首先确保你的系统已经安装了Docker和Docker Compose。如果没有安装,可以参考以下步骤:
# 对于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
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
# 安装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
docker run --rm -v $(pwd):/app composer create-project symfony/website-skeleton my_project
cd my_project
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:
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
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;
}
}
docker-compose up -d
docker-compose exec php composer install
# 创建数据库
docker-compose exec php bin/console doctrine:database:create
# 运行迁移
docker-compose exec php bin/console doctrine:migrations:migrate
docker-compose exec node npm install
docker-compose exec node npm run build
# 进入PHP容器
docker-compose exec php bash
# 运行Symfony命令
docker-compose exec php bin/console [command]
# 查看日志
docker-compose logs -f
# 停止容器
docker-compose down
bash
docker-compose exec node npm run build
bash
docker-compose restart nginx
# 安装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"
对于生产环境,建议:
这样你就有了一个完整的Symfony开发环境,包含了PHP、Nginx、MySQL、Redis和邮件测试服务,可以立即开始Symfony项目的开发工作。