Symfony是一个流行的PHP框架,使用Docker可以方便地搭建Symfony开发环境。以下是详细安装步骤:
确保已安装: - Docker - Docker Compose
# 安装Symfony CLI (如果尚未安装)
curl -sS https://get.symfony.com/cli/installer | bash
mv ~/.symfony5/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:
app:
build:
context: .
target: symfony_php
args:
SYMFONY_VERSION: ${SYMFONY_VERSION:-}
restart: unless-stopped
volumes:
- ./:/srv/app:rw,cached
working_dir: /srv/app
environment:
- APP_ENV=dev
depends_on:
- db
- redis
nginx:
image: nginx:alpine
restart: unless-stopped
ports:
- "8080:80"
volumes:
- ./:/srv/app:ro
- ./docker/nginx/conf.d:/etc/nginx/conf.d:ro
depends_on:
- app
db:
image: mysql:5.7
restart: unless-stopped
environment:
MYSQL_DATABASE: symfony
MYSQL_USER: symfony
MYSQL_PASSWORD: symfony
MYSQL_ROOT_PASSWORD: root
volumes:
- db_data:/var/lib/mysql:rw
ports:
- "3306:3306"
redis:
image: redis:alpine
restart: unless-stopped
ports:
- "6379:6379"
mailer:
image: maildev/maildev
restart: unless-stopped
ports:
- "1080:1080"
- "1025:1025"
volumes:
db_data:
# 多阶段构建 - 第一阶段:Composer
FROM composer:2 as symfony_php_composer
WORKDIR /app
# 安装Composer依赖
COPY composer.* symfony.lock ./
RUN composer install --prefer-dist --no-dev --no-scripts --no-progress --no-interaction
# 复制应用代码
COPY . .
RUN composer dump-autoload --optimize
# 多阶段构建 - 第二阶段:PHP
FROM php:8.1-fpm-alpine as symfony_php
# 安装PHP扩展和系统依赖
RUN apk add --no-cache \
acl \
fcgi \
file \
gettext \
git \
gnupg \
;
RUN set -eux; \
apk add --no-cache --virtual .build-deps \
$PHPIZE_DEPS \
icu-dev \
libzip-dev \
zlib-dev \
; \
\
docker-php-ext-configure zip; \
docker-php-ext-install -j$(nproc) \
intl \
zip \
pdo_mysql \
; \
pecl install \
apcu \
redis \
; \
docker-php-ext-enable \
apcu \
opcache \
redis \
; \
\
runDeps="$( \
scanelf --needed --nobanner --format '%n#p' --recursive /usr/local/lib/php/extensions \
| tr ',' '\n' \
| sort -u \
| awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \
)"; \
apk add --no-cache --virtual .phpexts-rundeps $runDeps; \
\
apk del .build-deps
COPY --from=symfony_php_composer /app /srv/app
WORKDIR /srv/app
RUN set -eux; \
mkdir -p var/cache var/log; \
chmod -R 777 var
COPY docker/php/php.ini /usr/local/etc/php/conf.d/symfony.ini
COPY docker/php/docker-entrypoint.sh /usr/local/bin/docker-entrypoint
RUN chmod +x /usr/local/bin/docker-entrypoint
ENTRYPOINT ["docker-entrypoint"]
CMD ["php-fpm"]
mkdir -p docker/nginx/conf.d docker/php
touch docker/php/php.ini docker/php/docker-entrypoint.sh
在docker/nginx/conf.d/default.conf
中添加:
server {
server_name localhost;
root /srv/app/public;
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
打开浏览器访问:http://localhost:8080
进入PHP容器:
docker-compose exec app bash
查看运行中的容器:
docker-compose ps
停止容器:
docker-compose down
重建容器(修改配置后):
docker-compose up -d --build
在.env
文件中配置数据库连接:
DATABASE_URL="mysql://symfony:symfony@db:3306/symfony?serverVersion=5.7"
如果需要使用RabbitMQ、Elasticsearch等其他服务,可以在docker-compose.yml
中添加相应配置。
这样你就拥有了一个完整的Symfony开发环境,包含了PHP、Nginx、MySQL和Redis等服务。