插件窝 干货文章 使用Docker部署Symfony:快速开始开发

使用Docker部署Symfony:快速开始开发

Docker Symfony dockerfile composer 651    来源:    2025-04-10

使用Docker部署Symfony:快速开发指南

为什么使用Docker部署Symfony

Docker为Symfony开发提供了以下优势: - 一致的开发环境 - 快速设置和配置 - 隔离的服务依赖 - 易于团队协作 - 接近生产环境的配置

快速开始步骤

1. 安装必要工具

确保已安装: - Docker Desktop (或Docker Engine + Docker Compose) - Git

2. 创建Symfony项目

# 使用官方Symfony Docker镜像创建新项目
docker run --rm -v $(pwd):/app composer create-project symfony/skeleton:"6.4.*" my_project

或者使用Symfony CLI:

symfony new my_project --version="6.4.*"

3. 创建Docker配置

在项目根目录创建docker-compose.yaml文件:

version: '3.8'

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8000:8000"
    volumes:
      - .:/srv/app
    depends_on:
      - db
      - redis

  db:
    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

  redis:
    image: redis:alpine
    ports:
      - "6379:6379"

volumes:
  mysql_data:

创建Dockerfile:

FROM php:8.2-fpm

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

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

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

# 设置工作目录
WORKDIR /srv/app

# 复制项目文件
COPY . .

# 安装项目依赖
RUN composer install

4. 启动容器

docker-compose up -d

5. 访问应用

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

常用开发命令

运行Symfony命令

docker-compose exec app php bin/console [command]

安装新依赖

docker-compose exec app composer require [package]

查看日志

docker-compose logs -f

停止容器

docker-compose down

高级配置

添加Xdebug调试

修改Dockerfile添加:

RUN pecl install xdebug && docker-php-ext-enable xdebug

添加docker/php/conf.d/xdebug.ini:

zend_extension=xdebug
xdebug.mode=debug
xdebug.client_host=host.docker.internal
xdebug.start_with_request=yes

添加Nginx

docker-compose.yaml中添加:

nginx:
  image: nginx:alpine
  ports:
    - "80:80"
  volumes:
    - ./docker/nginx/conf.d:/etc/nginx/conf.d
    - .:/srv/app
  depends_on:
    - app

创建docker/nginx/conf.d/symfony.conf:

server {
    listen 80;
    server_name localhost;
    root /srv/app/public;

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

    location ~ ^/index\.php(/|$) {
        fastcgi_pass app: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/symfony_error.log;
    access_log /var/log/nginx/symfony_access.log;
}

生产环境建议

  1. 使用多阶段构建减小镜像大小
  2. 配置适当的PHP-FPM和Nginx优化参数
  3. 设置适当的文件权限
  4. 使用.env文件管理环境变量
  5. 考虑添加监控和日志收集

常见问题解决

问题1: 权限问题导致无法写入缓存 解决方案: 在Dockerfile中添加:

RUN chown -R www-data:www-data /srv/app/var

问题2: 数据库连接失败 解决方案: 确保.env中配置正确:

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

问题3: 性能缓慢 解决方案: - 启用OPcache - 使用APP_ENV=prod - 优化Composer自动加载

通过以上配置,你可以快速开始Symfony项目的Docker化开发,享受容器化带来的便利和一致性。