在开始之前,请确保您已经安装了以下软件: - Docker (最新稳定版) - Docker Compose (通常随 Docker 一起安装)
mkdir symfony-docker
cd symfony-docker
docker-compose.yml
文件version: '3.8'
services:
php:
build:
context: .
dockerfile: Dockerfile
volumes:
- ./:/var/www/html
depends_on:
- mysql
- redis
nginx:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./:/var/www/html
- ./docker/nginx/conf.d:/etc/nginx/conf.d
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:
- "8025:8025"
volumes:
mysql_data:
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/html
创建目录和文件 docker/nginx/conf.d/symfony.conf
:
server {
listen 80;
server_name localhost;
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;
}
error_log /var/log/nginx/symfony_error.log;
access_log /var/log/nginx/symfony_access.log;
}
docker-compose up -d
docker-compose exec php composer create-project symfony/website-skeleton .
只需将项目文件放入项目目录即可。
编辑 .env
文件:
DATABASE_URL="mysql://symfony:symfony@mysql:3306/symfony?serverVersion=5.7"
docker-compose exec php composer install
http://localhost:8080
应该能看到 Symfony 欢迎页面http://localhost:8025
可以查看 Mailhog 邮件界面docker-compose up -d
docker-compose down
docker-compose exec php bash
docker-compose logs [service_name]
docker-compose exec php bin/console [command]
修改 Dockerfile
添加:
# 安装 Xdebug
RUN pecl install xdebug && docker-php-ext-enable xdebug
# 配置 Xdebug
COPY docker/php/xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini
创建 docker/php/xdebug.ini
:
zend_extension=xdebug.so
xdebug.mode=debug
xdebug.client_host=host.docker.internal
xdebug.start_with_request=yes
xdebug.discover_client_host=1
xdebug.log=/var/www/html/var/log/xdebug.log
修改 Dockerfile
添加:
# 安装 Node.js 和 Yarn
RUN curl -sL https://deb.nodesource.com/setup_14.x | bash - \
&& apt-get install -y nodejs \
&& npm install -g yarn
权限问题:
docker-compose exec php chown -R www-data:www-data var
端口冲突:
修改 docker-compose.yml
中的端口映射
容器无法启动:
docker-compose logs [service_name]
数据库连接问题:
确保 .env
中的数据库配置与 docker-compose.yml
中的一致
这个配置提供了一个完整的 Symfony 开发环境,包括 PHP、Nginx、MySQL、Redis 和 Mailhog。您可以根据项目需求进一步定制。