在开始之前,请确保您的系统已安装以下软件: - Docker (版本20.10.0或更高) - Docker Compose (版本1.27.0或更高) - Git (可选,用于克隆Symfony项目)
# 安装Symfony CLI (如果尚未安装)
curl -sS https://get.symfony.com/cli/installer | bash
# 创建新Symfony项目
symfony new my_project --full
cd my_project
git clone your_project_repo.git
cd your_project
docker-compose.yml
文件version: '3.8'
services:
app:
build:
context: .
dockerfile: Dockerfile
ports:
- "8000:8000"
volumes:
- .:/var/www/html
depends_on:
- db
- redis
environment:
DATABASE_URL: "mysql://symfony:password@db:3306/symfony?serverVersion=8.0"
REDIS_URL: "redis://redis"
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: symfony
MYSQL_USER: symfony
MYSQL_PASSWORD: password
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
redis:
image: redis:alpine
ports:
- "6379:6379"
volumes:
- redis_data:/data
mailhog:
image: mailhog/mailhog
ports:
- "1025:1025" # SMTP server
- "8025:8025" # Web UI
volumes:
mysql_data:
redis_data:
Dockerfile
文件# 使用官方PHP镜像作为基础
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 \
libpq-dev \
&& docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd zip \
&& pecl install redis \
&& docker-php-ext-enable redis
# 安装Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# 设置工作目录
WORKDIR /var/www/html
# 复制项目文件
COPY . .
# 安装PHP依赖
RUN composer install --no-interaction --optimize-autoloader
# 暴露端口
EXPOSE 8000
# 启动命令
CMD ["symfony", "server:start", "--port=8000", "--allow-http"]
.env
文件确保您的 .env
文件包含以下数据库配置:
DATABASE_URL="mysql://symfony:password@db:3306/symfony?serverVersion=8.0"
REDIS_URL="redis://redis"
MAILER_DSN=smtp://mailhog:1025
# 进入app容器
docker-compose exec app bash
# 在容器内执行
php bin/console doctrine:database:create
php bin/console doctrine:migrations:migrate
docker-compose up -d
# 启动容器
docker-compose up -d
# 停止容器
docker-compose down
# 查看运行中的容器
docker-compose ps
# 进入app容器
docker-compose exec app bash
# 查看日志
docker-compose logs -f
# 安装新的Composer包
docker-compose exec app composer require package_name
# 运行Symfony命令
docker-compose exec app php bin/console your:command
创建 nginx/Dockerfile
:
FROM nginx:alpine
COPY nginx.conf /etc/nginx/conf.d/default.conf
创建 nginx/nginx.conf
:
server {
listen 80;
server_name localhost;
root /var/www/html/public;
index index.php index.html;
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;
}
更新 docker-compose.yml
:
services:
nginx:
build:
context: ./nginx
ports:
- "80:80"
volumes:
- .:/var/www/html
depends_on:
- app
sudo chown -R $USER:$USER .
来修复文件权限.env
文件中的数据库配置是否与 docker-compose.yml
中的配置匹配docker-compose exec app php bin/console cache:clear
.env.prod
文件存储生产环境变量通过以上步骤,您应该已经成功在Docker环境中安装并配置了Symfony框架。现在可以开始开发您的Symfony应用程序了!