插件窝 干货文章 Docker快速安装Symfony:详细指南与教程

Docker快速安装Symfony:详细指南与教程

Docker Symfony Compose 创建 236    来源:    2025-04-10

Docker快速安装Symfony:详细指南与教程

1. 准备工作

在开始之前,请确保您的系统已安装以下组件: - Docker (版本20.10.0或更高) - Docker Compose (版本1.29.0或更高) - Git (可选,用于版本控制)

2. 创建Symfony项目

方法一:使用Symfony CLI

  1. 首先安装Symfony CLI:

    wget https://get.symfony.com/cli/installer -O - | bash
    
  2. 创建新项目:

    symfony new my_project --webapp
    

方法二:使用Composer

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

3. 配置Docker环境

3.1 创建Dockerfile

在项目根目录创建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"]

3.2 创建docker-compose.yml

在项目根目录创建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:

3.3 创建Nginx配置

创建目录和配置文件:

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;
}

4. 启动Docker容器

docker-compose up -d --build

5. 配置Symfony项目

5.1 配置数据库连接

编辑.env文件,修改数据库配置:

DATABASE_URL="mysql://symfony:symfony@db:3306/symfony?serverVersion=8.0"

5.2 创建数据库

docker-compose exec app php bin/console doctrine:database:create
docker-compose exec app php bin/console doctrine:migrations:migrate

6. 访问项目

  • Symfony应用:http://localhost:8080
  • PHPMyAdmin:http://localhost:8081

7. 常用命令

进入容器

docker-compose exec app bash

停止容器

docker-compose down

查看日志

docker-compose logs -f

清除缓存

docker-compose exec app php bin/console cache:clear

8. 可选配置

8.1 添加Xdebug

修改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

8.2 添加Node.js支持

docker-compose.yml中添加:

node:
  image: node:16
  volumes:
    - .:/var/www
  working_dir: /var/www
  command: npm run watch

9. 故障排除

  1. 权限问题

    docker-compose exec app chmod -R 777 var
    
  2. 端口冲突: 修改docker-compose.yml中的端口映射

  3. 数据库连接问题: 确保.env中的数据库配置与docker-compose.yml中的一致

  4. 缓存问题

    docker-compose exec app php bin/console cache:clear
    

通过以上步骤,您应该已经成功在Docker环境中安装并运行了Symfony应用。这个配置提供了PHP-FPM、Nginx、MySQL和PHPMyAdmin的完整开发环境。