Symfony 是一个流行的 PHP 框架,结合 Docker 可以快速搭建开发环境。本教程将详细介绍如何使用 Docker 安装和配置 Symfony 项目。
mkdir symfony-docker-project
cd symfony-docker-project
创建 docker-compose.yml
文件:
version: '3.8'
services:
php:
image: php:8.2-fpm
container_name: symfony_php
working_dir: /var/www
volumes:
- ./:/var/www
depends_on:
- mysql
- redis
nginx:
image: nginx:alpine
container_name: symfony_nginx
ports:
- "8080:80"
volumes:
- ./:/var/www
- ./docker/nginx/conf.d:/etc/nginx/conf.d
depends_on:
- php
mysql:
image: mysql:8.0
container_name: symfony_mysql
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
container_name: symfony_redis
ports:
- "6379:6379"
mailhog:
image: mailhog/mailhog
container_name: symfony_mailhog
ports:
- "8025:8025"
volumes:
mysql_data:
创建 docker/nginx/conf.d/symfony.conf
文件:
server {
listen 80;
server_name localhost;
root /var/www/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;
}
如果需要额外的 PHP 扩展,创建 docker/php/Dockerfile
:
FROM php:8.2-fpm
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
zip \
unzip
RUN docker-php-ext-install pdo pdo_mysql mbstring exif pcntl bcmath gd
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
WORKDIR /var/www
然后更新 docker-compose.yml
中的 php 服务部分:
php:
build: ./docker/php
container_name: symfony_php
# 其余配置保持不变...
docker-compose up -d
进入 PHP 容器:
docker exec -it symfony_php bash
在容器内安装 Symfony:
composer create-project symfony/skeleton .
或者安装完整版:
composer create-project symfony/website-skeleton .
编辑 .env
文件:
DATABASE_URL="mysql://symfony:symfony@mysql:3306/symfony?serverVersion=8.0"
如果需要 Doctrine 或其他组件:
composer require doctrine
composer require symfony/maker-bundle --dev
php bin/console doctrine:database:create
php bin/console doctrine:migrations:migrate
打开浏览器访问:http://localhost:8080
如果遇到文件权限问题,可以运行:
docker exec -it symfony_php chown -R www-data:www-data /var/www
如果需要额外扩展,修改 PHP Dockerfile 并重新构建:
docker-compose build php
docker-compose up -d
开发模式下可以关闭缓存:
php bin/console cache:clear
在 PHP Dockerfile 中添加:
RUN pecl install xdebug && docker-php-ext-enable xdebug
创建 docker/php/conf.d/xdebug.ini
:
zend_extension=xdebug.so
xdebug.mode=develop,debug
xdebug.client_host=host.docker.internal
xdebug.start_with_request=yes
xdebug.discover_client_host=1
最终项目结构应类似:
symfony-docker-project/
├── docker/
│ ├── nginx/
│ │ └── conf.d/
│ │ └── symfony.conf
│ └── php/
│ ├── Dockerfile
│ └── conf.d/
│ └── xdebug.ini
├── docker-compose.yml
├── .env
└── (Symfony 项目文件)
通过以上步骤,您已经成功使用 Docker 搭建了 Symfony 开发环境。这种配置方式具有以下优势:
您可以根据项目需求进一步定制 Docker 配置,如添加 Elasticsearch、RabbitMQ 等服务。