插件窝 干货文章 Symfony框架的Docker安装与配置教程

Symfony框架的Docker安装与配置教程

Docker Symfony Compose redis 864    来源:    2025-04-10

Symfony框架的Docker安装与配置教程

1. 准备工作

在开始之前,请确保您的系统已安装以下软件: - Docker (版本20.10.0或更高) - Docker Compose (版本1.27.0或更高) - Git (可选,用于克隆Symfony项目)

2. 创建Symfony项目

方法一:使用Symfony CLI创建新项目

# 安装Symfony CLI (如果尚未安装)
curl -sS https://get.symfony.com/cli/installer | bash

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

方法二:克隆现有项目

git clone your_project_repo.git
cd your_project

3. 创建Docker配置文件

3.1 创建 docker-compose.yml 文件

version: '3.8'

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8000:8000"
    volumes:
      - .:/var/www/html
    depends_on:
      - db
      - redis
    environment:
      DATABASE_URL: "mysql://symfony:password@db:3306/symfony?serverVersion=8.0"
      REDIS_URL: "redis://redis"

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

  redis:
    image: redis:alpine
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data

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

volumes:
  mysql_data:
  redis_data:

3.2 创建 Dockerfile 文件

# 使用官方PHP镜像作为基础
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 \
    libpq-dev \
    && docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd zip \
    && pecl install redis \
    && docker-php-ext-enable redis

# 安装Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

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

# 复制项目文件
COPY . .

# 安装PHP依赖
RUN composer install --no-interaction --optimize-autoloader

# 暴露端口
EXPOSE 8000

# 启动命令
CMD ["symfony", "server:start", "--port=8000", "--allow-http"]

4. 配置Symfony项目

4.1 更新 .env 文件

确保您的 .env 文件包含以下数据库配置:

DATABASE_URL="mysql://symfony:password@db:3306/symfony?serverVersion=8.0"
REDIS_URL="redis://redis"
MAILER_DSN=smtp://mailhog:1025

4.2 创建数据库

# 进入app容器
docker-compose exec app bash

# 在容器内执行
php bin/console doctrine:database:create
php bin/console doctrine:migrations:migrate

5. 启动Docker容器

docker-compose up -d

6. 访问应用程序

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

7. 常用命令

# 启动容器
docker-compose up -d

# 停止容器
docker-compose down

# 查看运行中的容器
docker-compose ps

# 进入app容器
docker-compose exec app bash

# 查看日志
docker-compose logs -f

# 安装新的Composer包
docker-compose exec app composer require package_name

# 运行Symfony命令
docker-compose exec app php bin/console your:command

8. 可选配置

8.1 添加Nginx反向代理

创建 nginx/Dockerfile:

FROM nginx:alpine

COPY nginx.conf /etc/nginx/conf.d/default.conf

创建 nginx/nginx.conf:

server {
    listen 80;
    server_name localhost;

    root /var/www/html/public;
    index index.php index.html;

    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/project_error.log;
    access_log /var/log/nginx/project_access.log;
}

更新 docker-compose.yml:

services:
  nginx:
    build:
      context: ./nginx
    ports:
      - "80:80"
    volumes:
      - .:/var/www/html
    depends_on:
      - app

9. 故障排除

  1. 端口冲突:确保本地没有其他服务使用8000、3306或6379端口
  2. 权限问题:在Linux/Mac上,可能需要运行 sudo chown -R $USER:$USER . 来修复文件权限
  3. 数据库连接问题:检查 .env 文件中的数据库配置是否与 docker-compose.yml 中的配置匹配
  4. 缓存问题:运行 docker-compose exec app php bin/console cache:clear

10. 生产环境建议

  1. 使用 .env.prod 文件存储生产环境变量
  2. 配置适当的PHP-FPM和Nginx优化设置
  3. 设置适当的Docker资源限制
  4. 考虑使用多阶段构建来减小镜像大小
  5. 实现适当的日志轮换策略

通过以上步骤,您应该已经成功在Docker环境中安装并配置了Symfony框架。现在可以开始开发您的Symfony应用程序了!