Files
plane-gptproto-integration/deploy/local/docker-compose.override.yml
T
carlandCursor 0136c15274 Initial commit: Plane 自部署与 gptproto AI 集成
包含本地/远程部署脚本、AI Agent 服务、Dashboard 与 QA 验证。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-21 11:37:41 +08:00

127 lines
4.2 KiB
YAML

# deploy/local/docker-compose.override.yml — Plane v1.3.0 community self-host
# Run with:
# cd deploy/local && \
# docker compose \
# -f src/deployments/cli/community/docker-compose.yml \
# -f docker-compose.override.yml \
# --env-file .env up -d
#
# Goals:
# - Pin Plane release via APP_RELEASE=v1.3.0 in .env (no :latest in any service).
# - Expose ONLY the proxy on host port 8090 (8080 occupied by local dart server).
# - Postgres / Redis / RabbitMQ / MinIO have no host port mapping.
# - Add plane-ai (FastAPI on host port 8100) joined to Plane's default network.
# - LOCKDOWN: 注入反遥测 env 到 api/worker/beat-worker/web,详见 patches/README.md
# 反遥测 env anchor — env-gated 开关,注入到 plane-backend / 前端容器
x-lockdown-env: &lockdown-env
# [核心] 让 register_instance.py 新建 Instance 时 is_telemetry_enabled=False
# 进而让 instance_traces 任务的 if 守卫直接跳过整个 OpenTelemetry 上报
DISABLE_TELEMETRY: ${DISABLE_TELEMETRY:-1}
# [核心] 让 register_instance.py 跳过 GET api.github.com/.../releases/latest
DISABLE_GITHUB_VERSION_CHECK: ${DISABLE_GITHUB_VERSION_CHECK:-1}
# 防御纵深: OpenTelemetry exporter 指向本机不存在端口
OTLP_ENDPOINT: ${OTLP_ENDPOINT:-http://127.0.0.1:1}
# PostHog 事件追踪: 留空即禁用 (上游默认即空)
POSTHOG_API_KEY: ${POSTHOG_API_KEY:-}
POSTHOG_HOST: ${POSTHOG_HOST:-}
# Microsoft Clarity 前端会话录制: 留空即禁用
VITE_SESSION_RECORDER_KEY: ${VITE_SESSION_RECORDER_KEY:-}
# Intercom 客服 widget: 0 即禁用
IS_INTERCOM_ENABLED: ${IS_INTERCOM_ENABLED:-0}
# Unsplash 图搜索: 留空即禁用
UNSPLASH_ACCESS_KEY: ${UNSPLASH_ACCESS_KEY:-}
# 把已打补丁的 Python 文件覆盖挂载到上游 makeplane/plane-backend:v1.3.0 容器内
# 的 /code/plane/... 路径上,绕过"用预构建镜像"的限制。
# 详见 patches/README.md
x-lockdown-volumes: &lockdown-volumes
# 保留上游 logs_api named volume
- logs_api:/code/plane/logs
# 唯一补丁:把 env-gated 版 register_instance.py 覆盖到容器内
# tracer.py 不打补丁 —— 它已经有 if instance.is_telemetry_enabled: 守卫,DB flag 关掉就够
- ${PWD}/src/apps/api/plane/license/management/commands/register_instance.py:/code/plane/license/management/commands/register_instance.py:ro
services:
api:
environment:
<<: *lockdown-env
volumes: *lockdown-volumes
worker:
environment:
<<: *lockdown-env
volumes: *lockdown-volumes
beat-worker:
environment:
<<: *lockdown-env
volumes: *lockdown-volumes
migrator:
environment:
<<: *lockdown-env
volumes: *lockdown-volumes
web:
environment:
<<: *lockdown-env
space:
environment:
<<: *lockdown-env
admin:
environment:
<<: *lockdown-env
proxy:
ports: !override
- "8090:80"
plane-db:
ports: !override []
plane-redis:
ports: !override []
plane-mq:
ports: !override []
plane-minio:
# Pin minio (upstream community compose uses :latest)
image: minio/minio:RELEASE.2024-12-18T13-15-44Z
ports: !override []
plane-ai:
build:
# ${PWD} = deploy/local/ (when running compose from this dir);
# 用 ${PWD} 让 build context 不受 -f 顺序影响——纯相对路径会从第一个 -f 文件所在目录解析
context: ${PWD}/../../ai-agent
dockerfile: Dockerfile
image: plane-ai:v1.3.0
container_name: plane-ai
restart: unless-stopped
environment:
GPTPROTO_API_KEY: ${GPTPROTO_API_KEY}
GPTPROTO_BASE_URL: ${GPTPROTO_BASE_URL:-https://gptproto.com/v1}
GPTPROTO_MODEL: ${GPTPROTO_MODEL:-claude-sonnet-4-6}
PLANE_API_BASE: ${PLANE_API_BASE:-http://api:8000}
PLANE_API_TOKEN: ${PLANE_API_TOKEN}
DATABASE_URL: postgresql://${POSTGRES_USER:-plane}:${POSTGRES_PASSWORD:-plane}@plane-db:5432/${POSTGRES_DB:-plane}
ports:
- "8100:8100"
depends_on:
- api
- plane-db
plane-dashboard:
build:
context: ${PWD}/../../plane-dashboard
dockerfile: Dockerfile
image: plane-dashboard:v1.0.0
container_name: plane-dashboard
restart: unless-stopped
ports:
- "0.0.0.0:8103:80"