插件窝 干货文章 Docker安装Symfony:一键部署指南

Docker安装Symfony:一键部署指南

Docker Symfony Compose mysql 793    来源:    2025-04-10

Docker安装Symfony:一键部署指南

Symfony是一个流行的PHP框架,使用Docker可以快速搭建开发环境。以下是使用Docker一键部署Symfony应用的详细指南。

准备工作

  1. 确保已安装Docker和Docker Compose
  2. 确保本地有git客户端

方法一:使用Symfony官方Docker镜像(推荐)

1. 创建新项目

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

2. 进入项目目录

cd my-project

3. 创建Docker配置文件

创建docker-compose.yaml文件:

version: '3'

services:
  app:
    image: symfonycorp/cli
    volumes:
      - .:/app
    working_dir: /app
    ports:
      - "8000:8000"
    depends_on:
      - db

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: symfony
      MYSQL_USER: symfony
      MYSQL_PASSWORD: symfony
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    ports:
      - "8080:80"
    environment:
      PMA_HOST: db
    depends_on:
      - db

volumes:
  mysql_data:

4. 启动服务

docker-compose up -d

5. 运行Symfony应用

docker-compose exec app symfony server:start -d

现在可以通过 http://localhost:8000 访问Symfony应用。

方法二:自定义Docker配置

1. 创建项目目录结构

my-project/
├── docker/
│   ├── nginx/
│   │   └── default.conf
│   ├── php/
│   │   └── Dockerfile
├── docker-compose.yaml
└── src/ (Symfony项目文件)

2. 创建Dockerfile

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

3. 创建Nginx配置

docker/nginx/default.conf:

server {
    listen 80;
    server_name localhost;
    root /var/www/public;

    location / {
        try_files $uri /index.php$is_uri$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-compose.yaml

version: '3'

services:
  app:
    build:
      context: .
      dockerfile: docker/php/Dockerfile
    volumes:
      - ./:/var/www
    depends_on:
      - db

  nginx:
    image: nginx:alpine
    ports:
      - "8000:80"
    volumes:
      - ./:/var/www
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - app

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: symfony
      MYSQL_USER: symfony
      MYSQL_PASSWORD: symfony
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    ports:
      - "8080:80"
    environment:
      PMA_HOST: db
    depends_on:
      - db

volumes:
  mysql_data:

5. 构建并启动容器

docker-compose up -d --build

6. 安装Symfony

docker-compose exec app composer create-project symfony/skeleton .

7. 配置数据库连接

编辑.env文件:

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

常见问题解决

  1. 权限问题

    docker-compose exec app chown -R www-data:www-data var
    
  2. 缓存清理

    docker-compose exec app php bin/console cache:clear
    
  3. 安装额外扩展: 在Dockerfile中添加:

    RUN docker-php-ext-install pdo pdo_mysql
    
  4. 端口冲突: 修改docker-compose.yaml中的端口映射,如将8000:80改为8001:80

开发工作流

  • 启动服务:docker-compose up -d
  • 停止服务:docker-compose down
  • 查看日志:docker-compose logs -f
  • 运行命令:docker-compose exec app php bin/console [command]
  • 安装依赖:docker-compose exec app composer require [package]

通过以上步骤,您已经成功使用Docker部署了Symfony应用,可以开始开发了!