Symfony是一个流行的PHP框架,使用Docker可以快速搭建开发环境而无需在本地安装各种依赖。以下是使用Docker部署Symfony的完整指南。
# 创建新项目
symfony new my_project --docker
# 或者使用composer
composer create-project symfony/website-skeleton my_project
cd my_project
如果你没有使用--docker
选项创建项目,可以手动添加Docker支持:
# 从官方仓库下载Docker配置
git clone https://github.com/dunglas/symfony-docker.git
cp -r symfony-docker/docker .
cp symfony-docker/.env .
cp symfony-docker/docker-compose.yaml .
docker-compose up -d
应用将在 http://localhost:8000
可用
my_symfony_app/
├── docker/
│ ├── php/
│ │ └── Dockerfile
│ └── nginx/
│ └── default.conf
├── docker-compose.yaml
└── .env
FROM php:8.2-fpm
# 安装依赖
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
zip \
unzip
# 清理缓存
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# 安装PHP扩展
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd
# 安装Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# 设置工作目录
WORKDIR /var/www
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/project_error.log;
access_log /var/log/nginx/project_access.log;
}
version: '3.8'
services:
php:
build:
context: ./docker/php
volumes:
- ./:/var/www
depends_on:
- mysql
nginx:
image: nginx:alpine
ports:
- "8000:80"
volumes:
- ./:/var/www
- ./docker/nginx:/etc/nginx/conf.d
depends_on:
- php
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: symfony
MYSQL_USER: symfony
MYSQL_PASSWORD: symfony
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
adminer:
image: adminer
restart: always
ports:
- "8080:8080"
depends_on:
- mysql
volumes:
mysql_data:
# 启动服务
docker-compose up -d
# 进入PHP容器
docker-compose exec php bash
# 在容器内安装Symfony
composer create-project symfony/website-skeleton .
exit
编辑.env
文件:
DATABASE_URL="mysql://symfony:symfony@mysql:3306/symfony?serverVersion=8.0"
docker-compose up -d
docker-compose down
docker-compose logs -f
docker-compose exec php bash
docker-compose exec php bin/console [command]
docker-compose exec php composer require [package]
权限问题:
docker-compose exec php chown -R www-data:www-data var
清除缓存:
docker-compose exec php bin/console cache:clear
数据库迁移:
docker-compose exec php bin/console doctrine:migrations:migrate
使用Docker部署Symfony可以确保开发环境的一致性,简化团队协作和部署流程。根据项目需求,你可以进一步定制Docker配置,如添加Redis、Elasticsearch等服务。