插件窝 干货文章 Symfony框架的Docker安装指南

Symfony框架的Docker安装指南

Symfony Docker php 安装 1069    来源:    2025-04-10

Symfony框架的Docker安装指南

准备工作

在开始之前,请确保您已经安装了以下软件: - Docker (最新稳定版) - Docker Compose (通常与Docker一起安装)

快速安装Symfony到Docker环境

1. 创建Symfony项目

# 使用Symfony CLI创建新项目
symfony new my_project --full

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

2. 创建Docker配置文件

在项目根目录下创建以下文件:

docker-compose.yaml

version: '3.8'

services:
  app:
    build:
      context: .
      target: symfony_php
      args:
        SYMFONY_VERSION: ${SYMFONY_VERSION:-}
    restart: unless-stopped
    volumes:
      - ./:/srv/app:rw,cached
    networks:
      - symfony-network
    depends_on:
      - db
      - redis

  nginx:
    image: nginx:alpine
    restart: unless-stopped
    ports:
      - "8080:80"
    volumes:
      - ./docker/nginx/conf.d:/etc/nginx/conf.d:ro
      - ./public:/srv/app/public:ro
    networks:
      - symfony-network
    depends_on:
      - app

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: ${DATABASE_ROOT_PASSWORD:-root}
      MYSQL_DATABASE: ${DATABASE_NAME:-symfony}
      MYSQL_USER: ${DATABASE_USER:-symfony}
      MYSQL_PASSWORD: ${DATABASE_PASSWORD:-symfony}
    volumes:
      - db_data:/var/lib/mysql
    ports:
      - "3306:3306"
    networks:
      - symfony-network

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

  mailer:
    image: mailhog/mailhog:latest
    ports:
      - "1025:1025" # SMTP server
      - "8025:8025" # Web UI
    networks:
      - symfony-network

volumes:
  db_data:
  redis_data:

networks:
  symfony-network:
    driver: bridge

Dockerfile

# 多阶段构建

# PHP基础镜像
FROM php:8.2-fpm-alpine AS symfony_php

# 持久化 /usr/src/php目录
VOLUME /var/run/php

# 安装系统依赖
RUN apk add --no-cache \
    acl \
    fcgi \
    file \
    gettext \
    git \
    gnupg \
    g++ \
    make \
    mysql-client \
    openssh-client \
    postgresql-dev \
    rabbitmq-c-dev \
    zlib-dev \
    libzip-dev \
    libpng-dev \
    libjpeg-turbo-dev \
    freetype-dev \
    icu-dev \
    oniguruma-dev

# 安装PHP扩展
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install -j$(nproc) gd \
    && docker-php-ext-install \
        intl \
        mbstring \
        pdo \
        pdo_mysql \
        zip \
        opcache

# 安装并启用Xdebug (仅开发环境)
ARG APP_ENV=dev
RUN if [ "$APP_ENV" = "dev" ]; then \
    pecl install xdebug && docker-php-ext-enable xdebug; \
fi

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

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

# 复制项目文件
COPY . .

# 安装项目依赖
RUN if [ "$APP_ENV" = "prod" ]; then \
    composer install --prefer-dist --no-dev --no-scripts --no-progress --no-suggest; \
else \
    composer install --prefer-dist --no-scripts --no-progress --no-suggest; \
fi

# 设置权限
RUN chown -R www-data:www-data var

docker/nginx/conf.d/default.conf

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

3. 创建环境变量文件

创建 .env 文件(Symfony项目已包含)并添加以下Docker相关配置:

# Docker数据库配置
DATABASE_URL="mysql://symfony:symfony@db:3306/symfony?serverVersion=8.0"

# Mailer配置
MAILER_DSN=smtp://mailer:1025

4. 启动Docker容器

docker-compose up -d

5. 安装依赖并初始化数据库

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

# 在容器内安装依赖
composer install

# 创建数据库(如果不存在)
php bin/console doctrine:database:create

# 运行迁移
php bin/console doctrine:migrations:migrate -n

# 退出容器
exit

访问应用程序

  • Symfony应用: http://localhost:8080
  • MailHog界面: http://localhost:8025

常用命令

# 启动服务
docker-compose up -d

# 停止服务
docker-compose down

# 查看日志
docker-compose logs -f

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

# 清除缓存(在容器内)
php bin/console cache:clear

常见问题解决

1. 权限问题

如果在Linux上遇到权限问题,可以运行:

sudo chown -R $USER:$USER .
sudo chmod -R 777 var

2. 端口冲突

如果8080端口已被占用,可以在docker-compose.yaml中修改nginx服务的端口映射:

ports:
  - "8081:80"

3. 数据库连接问题

确保.env文件中的DATABASE_URLdocker-compose.yaml中的配置匹配。

4. Xdebug配置

如果需要Xdebug,确保在DockerfileAPP_ENV设置为dev,并在PHP容器中检查Xdebug是否已启用:

php -m | grep xdebug

生产环境建议

对于生产环境,建议: 1. 使用APP_ENV=prod构建 2. 移除Xdebug 3. 配置适当的SSL/TLS 4. 使用更严格的安全设置 5. 设置适当的资源限制

希望这个指南能帮助您顺利在Docker环境中安装和运行Symfony应用!