在开始之前,请确保您的系统已安装以下组件: - Docker (版本20.10.0或更高) - Docker Compose (版本1.29.0或更高) - Git (可选,用于版本控制)
首先安装Symfony CLI:
wget https://get.symfony.com/cli/installer -O - | bash
创建新项目:
symfony new my_project --webapp
docker run --rm -v $(pwd):/app composer create-project symfony/website-skeleton my_project
在项目根目录创建Dockerfile
:
# 使用官方PHP镜像
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
# 复制项目文件
COPY . .
# 安装依赖
RUN composer install
# 暴露端口
EXPOSE 9000
# 启动PHP-FPM
CMD ["php-fpm"]
在项目根目录创建docker-compose.yml
:
version: '3.8'
services:
app:
build:
context: .
dockerfile: Dockerfile
volumes:
- .:/var/www
depends_on:
- db
- webserver
webserver:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- .:/var/www
- ./docker/nginx/conf.d:/etc/nginx/conf.d
depends_on:
- app
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: symfony
MYSQL_USER: symfony
MYSQL_PASSWORD: symfony
ports:
- "3306:3306"
volumes:
- db_data:/var/lib/mysql
phpmyadmin:
image: phpmyadmin/phpmyadmin
environment:
PMA_HOST: db
PMA_PORT: 3306
ports:
- "8081:80"
depends_on:
- db
volumes:
db_data:
创建目录和配置文件:
mkdir -p docker/nginx/conf.d
创建docker/nginx/conf.d/app.conf
:
server {
listen 80;
server_name localhost;
root /var/www/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 up -d --build
编辑.env
文件,修改数据库配置:
DATABASE_URL="mysql://symfony:symfony@db:3306/symfony?serverVersion=8.0"
docker-compose exec app php bin/console doctrine:database:create
docker-compose exec app php bin/console doctrine:migrations:migrate
docker-compose exec app bash
docker-compose down
docker-compose logs -f
docker-compose exec app php bin/console cache:clear
修改Dockerfile,在PHP安装部分添加:
RUN pecl install xdebug && docker-php-ext-enable xdebug
然后创建docker/php/conf.d/xdebug.ini
:
zend_extension=xdebug.so
xdebug.mode=debug
xdebug.client_host=host.docker.internal
xdebug.start_with_request=yes
在docker-compose.yml
中添加:
node:
image: node:16
volumes:
- .:/var/www
working_dir: /var/www
command: npm run watch
权限问题:
docker-compose exec app chmod -R 777 var
端口冲突:
修改docker-compose.yml
中的端口映射
数据库连接问题:
确保.env
中的数据库配置与docker-compose.yml
中的一致
缓存问题:
docker-compose exec app php bin/console cache:clear
通过以上步骤,您应该已经成功在Docker环境中安装并运行了Symfony应用。这个配置提供了PHP-FPM、Nginx、MySQL和PHPMyAdmin的完整开发环境。