插件窝 干货文章 使用Docker安装Symfony:一步步指南

使用Docker安装Symfony:一步步指南

Docker PHP Symfony Compose 707    来源:    2025-04-10

使用Docker安装Symfony:一步步指南

简介

Symfony是一个流行的PHP框架,结合Docker可以快速搭建开发环境。本指南将详细介绍如何使用Docker安装和配置Symfony项目。

前提条件

  • 已安装Docker和Docker Compose
  • 基本的命令行知识

步骤1:创建Symfony项目

方法A:使用Symfony CLI(推荐)

  1. 首先安装Symfony CLI:

    curl -1sLf 'https://dl.cloudsmith.io/public/symfony/stable/setup.alpine.sh' | sudo sh
    sudo apk add symfony-cli
    
  2. 创建新项目:

    symfony new my_project --webapp
    

方法B:使用Composer

docker run --rm -v $(pwd):/app composer create-project symfony/website-skeleton my_project

步骤2:配置Docker环境

  1. 在项目根目录创建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:
  1. 创建必要的目录和配置文件:
mkdir -p docker/php
  1. 创建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
  1. 创建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;
    }
}

步骤3:启动Docker容器

docker-compose up -d

步骤4:安装依赖

docker-compose exec php composer install

步骤5:配置数据库

  1. 更新.env文件中的数据库配置:
DATABASE_URL="mysql://db_user:db_password@db:3306/db_name?serverVersion=5.7"
  1. 创建数据库和表:
docker-compose exec php php bin/console doctrine:database:create
docker-compose exec php php bin/console doctrine:migrations:migrate

步骤6:访问应用程序

打开浏览器访问:http://localhost:8080

常见问题解决

1. 权限问题

如果遇到文件权限问题,可以运行:

docker-compose exec php chown -R www-data:www-data var

2. 修改配置后需要重启服务

docker-compose restart

3. 查看日志

docker-compose logs -f

高级配置

使用Xdebug调试

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

使用MailHog测试邮件

docker-compose.yml中添加:

mailhog:
  image: mailhog/mailhog
  ports:
    - "8025:8025"

并在.env中配置:

MAILER_DSN=smtp://mailhog:1025

总结

通过以上步骤,你已经成功使用Docker搭建了一个Symfony开发环境。这种配置提供了PHP、Nginx、MySQL的完整开发栈,并且可以轻松扩展其他服务如Redis、Elasticsearch等。