插件窝 干货文章 使用Docker快速部署并安装Symfony框架

使用Docker快速部署并安装Symfony框架

Docker Symfony compose PHP 206    来源:    2025-04-10

使用Docker快速部署Symfony框架

Symfony是一个流行的PHP框架,使用Docker可以快速搭建开发环境而无需在本地安装各种依赖。以下是使用Docker部署Symfony的完整指南。

方法一:使用官方Symfony Docker模板

1. 创建新Symfony项目

# 创建新项目
symfony new my_project --docker

# 或者使用composer
composer create-project symfony/website-skeleton my_project
cd my_project

2. 初始化Docker配置

如果你没有使用--docker选项创建项目,可以手动添加Docker支持:

# 从官方仓库下载Docker配置
git clone https://github.com/dunglas/symfony-docker.git
cp -r symfony-docker/docker .
cp symfony-docker/.env .
cp symfony-docker/docker-compose.yaml .

3. 启动容器

docker-compose up -d

4. 访问应用

应用将在 http://localhost:8000 可用

方法二:手动配置Docker环境

1. 创建项目目录结构

my_symfony_app/
├── docker/
│   ├── php/
│   │   └── Dockerfile
│   └── nginx/
│       └── default.conf
├── docker-compose.yaml
└── .env

2. 配置Dockerfile (docker/php/Dockerfile)

FROM php:8.2-fpm

# 安装依赖
RUN apt-get update && apt-get install -y \
    git \
    curl \
    libpng-dev \
    libonig-dev \
    libxml2-dev \
    zip \
    unzip

# 清理缓存
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# 安装PHP扩展
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd

# 安装Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# 设置工作目录
WORKDIR /var/www

3. 配置Nginx (docker/nginx/default.conf)

server {
    listen 80;
    server_name localhost;
    root /var/www/public;

    location / {
        try_files $uri /index.php$is_args$args;
    }

    location ~ ^/index\.php(/|$) {
        fastcgi_pass php:9000;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
        internal;
    }

    location ~ \.php$ {
        return 404;
    }

    error_log /var/log/nginx/project_error.log;
    access_log /var/log/nginx/project_access.log;
}

4. 配置docker-compose.yaml

version: '3.8'

services:
  php:
    build:
      context: ./docker/php
    volumes:
      - ./:/var/www
    depends_on:
      - mysql

  nginx:
    image: nginx:alpine
    ports:
      - "8000:80"
    volumes:
      - ./:/var/www
      - ./docker/nginx:/etc/nginx/conf.d
    depends_on:
      - php

  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: symfony
      MYSQL_USER: symfony
      MYSQL_PASSWORD: symfony
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql

  adminer:
    image: adminer
    restart: always
    ports:
      - "8080:8080"
    depends_on:
      - mysql

volumes:
  mysql_data:

5. 启动容器并安装Symfony

# 启动服务
docker-compose up -d

# 进入PHP容器
docker-compose exec php bash

# 在容器内安装Symfony
composer create-project symfony/website-skeleton .
exit

6. 配置数据库连接

编辑.env文件:

DATABASE_URL="mysql://symfony:symfony@mysql:3306/symfony?serverVersion=8.0"

常用命令

  • 启动服务: docker-compose up -d
  • 停止服务: docker-compose down
  • 查看日志: docker-compose logs -f
  • 进入PHP容器: docker-compose exec php bash
  • 运行Symfony命令: docker-compose exec php bin/console [command]
  • 安装Composer包: docker-compose exec php composer require [package]

常见问题解决

  1. 权限问题:

    docker-compose exec php chown -R www-data:www-data var
    
  2. 清除缓存:

    docker-compose exec php bin/console cache:clear
    
  3. 数据库迁移:

    docker-compose exec php bin/console doctrine:migrations:migrate
    

使用Docker部署Symfony可以确保开发环境的一致性,简化团队协作和部署流程。根据项目需求,你可以进一步定制Docker配置,如添加Redis、Elasticsearch等服务。