包含本地/远程部署脚本、AI Agent 服务、Dashboard 与 QA 验证。 Co-authored-by: Cursor <cursoragent@cursor.com>
4.0 KiB
4.0 KiB
Plane v1.3.0 反遥测 / 反回拨补丁
设计原则: env-gated 开关,上游源码逻辑完整保留,不删任何代码,只新增 2 个 if 守卫。 升级 Plane 版本时,这种最小入侵的改动几乎不会冲突。
改了什么
只动一个文件:apps/api/plane/license/management/commands/register_instance.py,加 2 处守卫:
| 位置 | 改动 | 触发条件 |
|---|---|---|
check_for_latest_version() 函数首行 |
多了一个 if os.environ.get("DISABLE_GITHUB_VERSION_CHECK") == "1": return fallback_version |
启动时阻止 GET api.github.com/repos/makeplane/plane/releases/latest |
Instance.objects.create(...) 调用 |
is_telemetry_enabled 字段从硬编码 True 改为 is_telemetry_enabled=(os.environ.get("DISABLE_TELEMETRY") != "1") |
新建 Instance 时,根据 env 决定 telemetry 默认开关 |
上游所有其他代码 100% 原样保留。包括:
tracer.py整个文件不动 —— 它本身有if instance.is_telemetry_enabled:守卫,只要 DB flag 是 False,整个 OpenTelemetry 上报流程就不会执行register_instance.py的 try/except 流程、try/except 块、Instance.update()分支等全都保留
env 开关速查 (.env / .env.template 已设)
| 开关 | 默认值 | 作用 |
|---|---|---|
DISABLE_TELEMETRY |
1 |
新建 Instance 时 is_telemetry_enabled 置 False,tracer.instance_traces 内部的 if 守卫会跳过整个上报逻辑 |
DISABLE_GITHUB_VERSION_CHECK |
1 |
启动时跳过 GitHub release 查询 |
OTLP_ENDPOINT |
http://127.0.0.1:1 |
防御纵深: 即使 telemetry 误开,exporter 也连不存在的本地端口 |
POSTHOG_API_KEY / POSTHOG_HOST |
(空) | PostHog 事件追踪禁用 (上游默认就是空) |
VITE_SESSION_RECORDER_KEY |
(空) | Microsoft Clarity 前端会话录制禁用 (上游默认就是空) |
IS_INTERCOM_ENABLED |
0 |
Intercom 客服 widget 禁用 |
UNSPLASH_ACCESS_KEY |
(空) | Unsplash 图搜索关闭 |
升级 Plane 时如何重新应用
补丁过的 register_instance.py 已经替换在 deploy/local/src/apps/api/plane/license/management/commands/register_instance.py。如果你跑了 pull-plane.sh 拉新版本,补丁会被覆盖。重新应用:
cd deploy/local/src
patch -p1 < ../patches/01-env-gated-register-instance.patch
只动 1 个文件 2 处,几乎不会冲突。若失败手动加这 2 个 if 守卫即可,锚点很好认。
同时 — docker-compose.override.yml 还做了一层"覆盖挂载"
override.yml 把上面这个 patched 文件通过 volumes: bind-mount 覆盖到上游预构建镜像 makeplane/plane-backend:v1.3.0 容器内的 /code/plane/license/management/commands/register_instance.py。
这是必须的:上游镜像是预编译的,host 上改了 src/ 文件不会自动进容器。bind-mount 是绕过这点的最轻量做法 —— 比 rebuild 整个 backend 镜像快 100 倍。
验证
部署后:
# (1) DB flag 应为 false
docker compose exec plane-db psql -U plane -d plane -c \
"SELECT instance_id, is_telemetry_enabled FROM instances;"
# (2) 容器内补丁可见
docker compose exec api grep -n "LOCKDOWN" \
/code/plane/license/management/commands/register_instance.py
# (3) 模拟跑函数,确认 env-gated 起效
docker compose exec api python manage.py shell -c "
from plane.license.management.commands.register_instance import Command
import os
c = Command()
# 当前 env DISABLE_GITHUB_VERSION_CHECK=1,应直接返回 fallback
print(c.check_for_latest_version('v1.3.0')) # 期望: v1.3.0
"
没动什么
为避免影响上游构建/逻辑:
- 没改
tracer.py、Plane model 定义、Django 数据迁移、celery 任务注册、UI 组件 - 没移除 god-mode 里的 telemetry toggle (UI 还在,但即便管理员手贱开了它,因为 env 仍是 DISABLE_TELEMETRY=1,下次重启 register_instance 又把 DB flag 改回 False —— 重启即恢复 lockdown)
- 没破坏 任何 import / 函数签名 / 类定义,可以正常 git diff、code review、覆盖测试