Symfony是一个流行的PHP框架,结合Docker可以快速搭建开发环境。本指南将详细介绍如何使用Docker安装和配置Symfony项目。
首先安装Symfony CLI:
curl -1sLf 'https://dl.cloudsmith.io/public/symfony/stable/setup.alpine.sh' | sudo sh
sudo apk add symfony-cli
创建新项目:
symfony new my_project --webapp
docker run --rm -v $(pwd):/app composer create-project symfony/website-skeleton my_project
docker-compose.yml
文件:version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./:/var/www/html
- ./docker/nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
php:
build:
context: .
dockerfile: docker/php/Dockerfile
volumes:
- ./:/var/www/html
environment:
- DATABASE_URL=mysql://db_user:db_password@db:3306/db_name
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: db_name
MYSQL_USER: db_user
MYSQL_PASSWORD: db_password
ports:
- "3306:3306"
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
mkdir -p docker/php
docker/php/Dockerfile
:FROM php:8.1-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_mysql mbstring exif pcntl bcmath gd
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
WORKDIR /var/www/html
docker/nginx.conf
: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
.env
文件中的数据库配置:DATABASE_URL="mysql://db_user:db_password@db:3306/db_name?serverVersion=5.7"
docker-compose exec php php bin/console doctrine:database:create
docker-compose exec php php bin/console doctrine:migrations:migrate
打开浏览器访问:http://localhost:8080
如果遇到文件权限问题,可以运行:
docker-compose exec php chown -R www-data:www-data var
docker-compose restart
docker-compose logs -f
在docker/php/Dockerfile
中添加:
RUN pecl install xdebug && docker-php-ext-enable xdebug
然后在docker-compose.yml
的php服务中添加环境变量:
environment:
- XDEBUG_MODE=debug
- XDEBUG_CONFIG=client_host=host.docker.internal
在docker-compose.yml
中添加:
mailhog:
image: mailhog/mailhog
ports:
- "8025:8025"
并在.env
中配置:
MAILER_DSN=smtp://mailhog:1025
通过以上步骤,你已经成功使用Docker搭建了一个Symfony开发环境。这种配置提供了PHP、Nginx、MySQL的完整开发栈,并且可以轻松扩展其他服务如Redis、Elasticsearch等。