127 lines
4.2 KiB
YAML
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:
|
|
- "18101: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"
|