插件窝 干货文章 Docker安装Symfony:一站式开发环境配置

Docker安装Symfony:一站式开发环境配置

Symfony Docker PHP 配置 236    来源:    2025-04-10

Docker安装Symfony:一站式开发环境配置指南

为什么使用Docker开发Symfony项目

Docker为Symfony开发提供了以下优势: - 环境一致性:确保开发、测试和生产环境一致 - 快速配置:无需手动安装PHP、MySQL等组件 - 隔离性:不同项目可以使用不同版本的依赖而不冲突 - 便携性:团队新成员可以快速搭建开发环境

基础Docker环境配置

1. 创建项目目录结构

symfony-docker/
├── docker/
│   ├── php/
│   │   └── Dockerfile
│   └── nginx/
│       └── default.conf
├── docker-compose.yml
└── symfony/ (将在之后创建)

2. 配置Docker Compose文件

创建docker-compose.yml文件:

version: '3.8'

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

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

  mysql:
    image: mysql:5.7
    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"

  mailhog:
    image: mailhog/mailhog
    ports:
      - "1025:1025" # SMTP server
      - "8025:8025" # Web UI

volumes:
  mysql_data:

3. 配置PHP Dockerfile

创建docker/php/Dockerfile

FROM php:8.1-fpm

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

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

# 安装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 /var/www/symfony

# 创建非root用户并设置权限
RUN useradd -G www-data,root -d /home/symfony symfony \
    && mkdir -p /home/symfony \
    && chown -R symfony:symfony /home/symfony \
    && chown -R symfony:symfony /var/www/symfony

USER symfony

# 设置PATH
ENV PATH="/home/symfony/.composer/vendor/bin:${PATH}"

4. 配置Nginx

创建docker/nginx/default.conf

server {
    listen 80;
    server_name localhost;
    root /var/www/symfony/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/symfony_error.log;
    access_log /var/log/nginx/symfony_access.log;
}

创建Symfony项目

  1. 启动基础服务:
docker-compose up -d mysql redis nginx mailhog
  1. 进入PHP容器创建Symfony项目:
docker-compose run --rm php composer create-project symfony/website-skeleton symfony
  1. 启动所有服务:
docker-compose up -d

现在可以通过 http://localhost:8080 访问Symfony应用。

高级配置

1. Xdebug配置(可选)

修改docker/php/Dockerfile,在安装PHP扩展后添加:

# 安装Xdebug
RUN pecl install xdebug && docker-php-ext-enable xdebug

# 配置Xdebug
RUN echo "xdebug.mode=develop,debug" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    && echo "xdebug.client_host=host.docker.internal" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    && echo "xdebug.start_with_request=yes" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini

2. 数据库配置

在Symfony项目中配置.env文件:

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

3. 常用命令

  • 进入PHP容器:

    docker-compose exec php bash
    
  • 运行Symfony命令:

    docker-compose exec php bin/console [command]
    
  • 查看日志:

    docker-compose logs -f [service]
    

常见问题解决

  1. 权限问题

    • 运行 chmod -R a+rw symfony/var 解决缓存目录权限问题
  2. 端口冲突

    • 修改docker-compose.yml中的端口映射
  3. 数据库连接问题

    • 确保MySQL服务已启动
    • 检查.env文件中的数据库配置
  4. 性能问题

    • 在Mac/Windows上,考虑使用cached卷模式提高性能: ```yaml volumes:
      • ./symfony:/var/www/symfony:cached ```

生产环境注意事项

  1. 使用不同的Docker Compose文件(如docker-compose.prod.yml
  2. 配置适当的PHP设置(OPcache等)
  3. 使用Nginx或Apache的生产配置
  4. 设置适当的日志轮换
  5. 考虑使用多阶段构建优化镜像大小

通过以上配置,你已经拥有了一个功能完善的Symfony Docker开发环境,包含了PHP、Nginx、MySQL、Redis和Mailhog等服务,可以满足大多数Symfony项目的开发需求。