首页
/ Makeplane/Plane项目本地开发环境Docker Compose配置详解

Makeplane/Plane项目本地开发环境Docker Compose配置详解

2025-07-05 03:27:35作者:丁柯新Fawn

概述

本文将深入解析Makeplane/Plane项目中的docker-compose-local.yml文件,该文件定义了项目在本地开发环境所需的Docker容器服务配置。通过这份配置,开发者可以快速搭建包含数据库、缓存、消息队列等基础设施的完整开发环境。

核心服务配置

1. Redis缓存服务 (plane-redis)

plane-redis:
  image: valkey/valkey:7.2.5-alpine
  restart: unless-stopped
  networks:
    - dev_env
  volumes:
    - redisdata:/data
  ports:
    - "6379:6379"
  • 使用Valkey(Redis兼容)的7.2.5 Alpine版本,体积小巧
  • 配置了持久化存储卷redisdata,确保数据不会因容器重启而丢失
  • 暴露标准Redis端口6379供其他服务连接

2. RabbitMQ消息队列服务 (plane-mq)

plane-mq:
  image: rabbitmq:3.13.6-management-alpine
  restart: unless-stopped
  networks:
    - dev_env
  volumes:
    - rabbitmq_data:/var/lib/rabbitmq
  env_file:
    - .env
  environment:
    RABBITMQ_DEFAULT_USER: ${RABBITMQ_USER}
    RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD}
    RABBITMQ_DEFAULT_VHOST: ${RABBITMQ_VHOST}
  • 使用带管理界面的RabbitMQ Alpine版本
  • 通过环境变量配置用户名、密码和虚拟主机
  • 数据持久化到rabbitmq_data卷
  • 管理界面可通过15672端口访问(虽然配置中未显式暴露)

3. MinIO对象存储服务 (plane-minio)

plane-minio:
  image: minio/minio
  restart: unless-stopped
  networks:
    - dev_env
  entrypoint: >
    /bin/sh -c "
    mkdir -p /export/${AWS_S3_BUCKET_NAME} &&
    minio server /export --console-address ':9090' &
    sleep 5 &&
    mc alias set myminio http://localhost:9000 ${AWS_ACCESS_KEY_ID} ${AWS_SECRET_ACCESS_KEY} &&
    mc mb myminio/${AWS_S3_BUCKET_NAME} -p || true
    && tail -f /dev/null
    "
  volumes:
    - uploads:/export
  env_file:
    - .env
  environment:
    MINIO_ROOT_USER: ${AWS_ACCESS_KEY_ID}
    MINIO_ROOT_PASSWORD: ${AWS_SECRET_ACCESS_KEY}
  ports:
    - "9000:9000"
    - "9090:9090"
  • 提供兼容S3协议的对象存储服务
  • 自动创建指定名称的存储桶
  • 暴露9000(API)和9090(控制台)端口
  • 使用自定义entrypoint脚本完成初始化工作
  • 数据存储在uploads卷中

4. PostgreSQL数据库服务 (plane-db)

plane-db:
  image: postgres:15.7-alpine
  restart: unless-stopped
  networks:
    - dev_env
  command: postgres -c 'max_connections=1000'
  volumes:
    - pgdata:/var/lib/postgresql/data
  env_file:
    - .env
  environment:
    PGDATA: /var/lib/postgresql/data
  ports:
    - "5432:5432"
  • 使用PostgreSQL 15.7 Alpine版本
  • 配置最大连接数为1000,适合开发测试
  • 数据持久化到pgdata卷
  • 暴露标准PostgreSQL端口5432

应用服务配置

1. API服务

api:
  build:
    context: ./apps/api
    dockerfile: Dockerfile.dev
    args:
      DOCKER_BUILDKIT: 1
  restart: unless-stopped
  networks:
    - dev_env
  volumes:
    - ./apps/api:/code
  command: ./bin/docker-entrypoint-api-local.sh
  env_file:
    - ./apps/api/.env
  depends_on:
    - plane-db
    - plane-redis
    - plane-mq
  ports:
    - "8000:8000"
  • 使用开发专用的Dockerfile构建
  • 启用Docker BuildKit加速构建
  • 挂载本地代码目录实现热重载
  • 依赖数据库、Redis和消息队列服务
  • 暴露8000端口供访问

2. 后台工作服务 (worker)

worker:
  build:
    context: ./apps/api
    dockerfile: Dockerfile.dev
    args:
      DOCKER_BUILDKIT: 1
  restart: unless-stopped
  networks:
    - dev_env
  volumes:
    - ./apps/api:/code
  command: ./bin/docker-entrypoint-worker.sh
  env_file:
    - ./apps/api/.env
  depends_on:
    - api
    - plane-db
    - plane-redis
  • 与API服务共享代码库
  • 运行异步任务处理
  • 依赖API、数据库和Redis服务

3. 定时任务服务 (beat-worker)

beat-worker:
  build:
    context: ./apps/api
    dockerfile: Dockerfile.dev
    args:
      DOCKER_BUILDKIT: 1
  restart: unless-stopped
  networks:
    - dev_env
  volumes:
    - ./apps/api:/code
  command: ./bin/docker-entrypoint-beat.sh
  env_file:
    - ./apps/api/.env
  depends_on:
    - api
    - plane-db
    - plane-redis
  • 处理周期性定时任务
  • 使用与worker相同的代码基础
  • 依赖关系与worker类似

4. 数据库迁移服务 (migrator)

migrator:
  build:
    context: ./apps/api
    dockerfile: Dockerfile.dev
    args:
      DOCKER_BUILDKIT: 1
  restart: "no"
  networks:
    - dev_env
  volumes:
    - ./apps/api:/code
  command: ./bin/docker-entrypoint-migrator.sh --settings=plane.settings.local
  env_file:
    - .env
  depends_on:
    - plane-db
    - plane-redis
  • 专门用于执行数据库迁移
  • 配置为不自动重启(restart: "no")
  • 运行后即退出
  • 依赖数据库和Redis服务

网络与存储配置

volumes:
  redisdata:
  uploads:
  pgdata:
  rabbitmq_data:

networks:
  dev_env:
    driver: bridge
  • 定义了四个持久化存储卷
    • redisdata: Redis数据
    • uploads: MinIO存储
    • pgdata: PostgreSQL数据
    • rabbitmq_data: RabbitMQ数据
  • 创建了一个桥接网络dev_env,所有服务都连接到此网络

开发环境特点

  1. 热重载支持:通过挂载本地代码目录,实现代码修改后自动重载
  2. 资源隔离:每个服务运行在独立容器中,互不干扰
  3. 持久化存储:关键数据都配置了持久化卷,避免开发过程中数据丢失
  4. 依赖管理:通过depends_on明确服务启动顺序
  5. 轻量级:尽可能使用Alpine基础镜像,减少资源占用

使用建议

  1. 在启动前确保.env文件已正确配置
  2. 首次启动时,migrator服务会自动执行数据库迁移
  3. 开发过程中可随时修改代码,服务会自动重载
  4. 通过docker-compose logs命令查看各服务日志
  5. 使用docker-compose up -d在后台运行服务

通过这份docker-compose-local.yml配置,Makeplane/Plane项目为开发者提供了完整的本地开发环境,包含了项目运行所需的所有基础设施服务,大大简化了开发环境的搭建过程。