插件窝 干货文章 Docker实践:安装Symfony并搭建完整开发环境

Docker实践:安装Symfony并搭建完整开发环境

Docker Compose Symfony php 665    来源:    2025-04-10

Docker环境下安装Symfony并搭建完整开发环境指南

1. 环境准备

首先确保你的系统已经安装了Docker和Docker Compose。如果没有安装,可以参考以下步骤:

安装Docker

# 对于Ubuntu/Debian
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

# 对于CentOS/RHEL
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker

# 验证安装
docker --version

安装Docker Compose

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(unlink -m)-$(uname -s)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# 验证安装
docker-compose --version

2. 创建Symfony项目

方法一:使用Symfony CLI(推荐)

# 安装Symfony CLI
wget https://get.symfony.com/cli/installer -O - | bash
mv ~/.symfony/bin/symfony /usr/local/bin/symfony

# 创建新项目
symfony new my_project --full
cd my_project

方法二:使用Composer

docker run --rm -v $(pwd):/app composer create-project symfony/website-skeleton my_project
cd my_project

3. 创建Docker配置

3.1 创建docker-compose.yml文件

version: '3.8'

services:
  php:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - .:/var/www/html
    depends_on:
      - mysql
      - redis
    environment:
      DATABASE_URL: "mysql://symfony:password@mysql:3306/symfony?serverVersion=8.0"
      REDIS_URL: "redis://redis"
      MAILER_DSN: "smtp://mailhog:1025"

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

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

  redis:
    image: redis:alpine

  mailhog:
    image: mailhog/mailhog
    ports:
      - "8025:8025"

  node:
    image: node:16
    working_dir: /var/www/html
    volumes:
      - .:/var/www/html
    command: ["sh", "-c", "npm install && npm run watch"]

volumes:
  mysql_data:

3.2 创建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

# 安装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/html

3.3 创建Nginx配置文件 (docker/nginx.conf)

server {
    listen 80;
    index index.php index.html;
    server_name localhost;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/html/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;
    }
}

4. 启动Docker容器

docker-compose up -d

5. 配置Symfony

5.1 安装依赖

docker-compose exec php composer install

5.2 配置数据库

# 创建数据库
docker-compose exec php bin/console doctrine:database:create

# 运行迁移
docker-compose exec php bin/console doctrine:migrations:migrate

5.3 安装前端依赖 (可选)

docker-compose exec node npm install
docker-compose exec node npm run build

6. 访问应用

  • Symfony应用: http://localhost:8080
  • MailHog (邮件测试): http://localhost:8025

7. 常用命令

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

# 运行Symfony命令
docker-compose exec php bin/console [command]

# 查看日志
docker-compose logs -f

# 停止容器
docker-compose down

8. 开发工作流

  1. 修改代码后会自动同步到容器中(因为使用了volume映射)
  2. 对于PHP代码更改,无需重启服务
  3. 对于前端资源更改,可能需要重新构建: bash docker-compose exec node npm run build
  4. 对于配置更改(如Nginx),需要重启相关服务: bash docker-compose restart nginx

9. 调试配置

Xdebug配置 (在Dockerfile中添加)

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

# 配置Xdebug
RUN echo "xdebug.mode=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

然后在docker-compose.yml的php服务中添加:

extra_hosts:
  - "host.docker.internal:host-gateway"

10. 生产环境优化

对于生产环境,建议:

  1. 使用多阶段构建优化Docker镜像
  2. 配置适当的PHP-FPM和Nginx优化参数
  3. 设置适当的文件权限
  4. 添加健康检查
  5. 考虑使用单独的容器来处理cron作业和消息队列

这样你就有了一个完整的Symfony开发环境,包含了PHP、Nginx、MySQL、Redis和邮件测试服务,可以立即开始Symfony项目的开发工作。