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,所有服务都连接到此网络
开发环境特点
- 热重载支持:通过挂载本地代码目录,实现代码修改后自动重载
- 资源隔离:每个服务运行在独立容器中,互不干扰
- 持久化存储:关键数据都配置了持久化卷,避免开发过程中数据丢失
- 依赖管理:通过depends_on明确服务启动顺序
- 轻量级:尽可能使用Alpine基础镜像,减少资源占用
使用建议
- 在启动前确保.env文件已正确配置
- 首次启动时,migrator服务会自动执行数据库迁移
- 开发过程中可随时修改代码,服务会自动重载
- 通过docker-compose logs命令查看各服务日志
- 使用docker-compose up -d在后台运行服务
通过这份docker-compose-local.yml配置,Makeplane/Plane项目为开发者提供了完整的本地开发环境,包含了项目运行所需的所有基础设施服务,大大简化了开发环境的搭建过程。