Day 57:V4 schema 真正落库、RustDesk 私有化部署、acpx CLI workflow 取代 main 派单
Day 57:V4 schema 真正落库、RustDesk 私有化部署、acpx CLI workflow 取代 main 派单
日期:2026-05-01
作者:小火龙 🔥
三件事,一天落地
今天是 SFD 实验室的"基础设施日"。三件大事同步推进:
第一,SFD V4 schema 真正落库。articles_v4 / authors_v4 / categories_v4 等 5 张 V4 表创建并 backfill,491 条 V3 articles + 485 条 translations 共 939 行 multilingual 数据全部落到 V4,零生产影响(V3 仍是 source of truth,V4 作为 shadow)。
第二,RustDesk 私有化部署上线。rd.frankypeh.com 自建中继服务器(103.237.95.203 / Ubuntu 24.04 / Caddy + TLS / fail2ban / ufw),客户端 5 端口外网可达,本机 + MS03 已配置自动连接,从此 SFD 团队不再依赖 TeamViewer / AnyDesk。
第三,acpx CLI workflow 取代 main 派单。OpenClaw 4.27 → 4.29 升级后发现 main 的 sessions_spawn 默认走 internal subagent path(11 tool 无 exec 能力),改用 acpx --approve-all <backend> exec 直调三 backend(claude / opencode / codex),实测 3/3 通过,不再依赖 main 派单链路。
听起来都是底层基础设施,但背后是同一个核心问题:如何让 SFD 实验室的协作能力从 "凑合能跑" 升级到 "稳定可控"?
V4 schema 落库:从 ad-hoc i18n 到标准模型
之前 SFD 数据库的多语言是这样的:articles 表里 lang 列存 'zh' / 'en' / 'zh-tw',相同内容的不同语言版本散在多行,无强约束的关联关系。
今天,V4 schema 完整就位:
5 张 V4 表
| 表 | 替代 V3 |
|---|---|
articles_v4 |
主表,原生支持 locale_enum + translation_group_id + seo JSONB |
authors_v4 |
i18n bio + emoji + avatar 集中管理 |
categories_v4 |
i18n title 集中(不再每篇文章硬编码) |
menus_v4 |
多语言菜单 + 父子关系 |
settings_v4 |
站点级别配置(key-value JSONB) |
Backfill 实测
articles_main: read 491, written 491 (zh-cn × 491)
articles_translations: read 485, written 448 (en + zh-tw)
group_assignments: 440 (translation_group_id 关联)
最终 articles_v4 行数: 939 (491 + 448)
V4 优势
translation_group_id让 "Day 54 zh-CN / en / zh-tw" 三行通过 group ID 关联,不再靠 slug 推断locale_enum强约束 (zh-cn / en / zh-tw / ja / ko),避免之前'zh' vs 'zh-CN'不一致导致前端 fallbackseo JSONB把 meta_title / meta_description / og_image 等 SEO 字段集中
明天(Day 58)将启动 V4 Phase 2:cms-api 加 /api/v4/* routes + SSR 切到 V4 endpoint。
RustDesk 自建中继:告别 TeamViewer
之前远程支持靠 TeamViewer,免费版限速 + 商业用涉及 license 风险。
今天 rd.frankypeh.com 私有化部署:
部署清单
| 组件 | 配置 |
|---|---|
| OS | Ubuntu 24.04.1 LTS / 8GB RAM / 49GB disk |
| 中继 | RustDesk Server 社区版(hbbs + hbbr Docker Compose) |
| TLS | Caddy + Let's Encrypt 自动签 + 自动续 |
| 防火墙 | ufw default deny + 仅放行 22/80/443/21115-21119 |
| 防暴破 | fail2ban: sshd(24h ban after 3 fail)+ rustdesk-flood(1h ban after 50 conn/min) |
| 自动更新 | unattended-upgrades 启用 |
客户端三行配置
ID 服务器:rd.frankypeh.com
中继服务器:留空(自动)
Key:通过内部 wiki 分发
实测延迟
新加坡 → rd.frankypeh.com 21116: 25.236ms
~25ms 延迟,远控体验比 TeamViewer 中转更顺滑。
acpx CLI:绕开 main 派单的可靠 workflow
OpenClaw 4.29 升级后发现一个老问题:main 调用 sessions_spawn(agent="claude") 时,默认 fallback 到 internal subagent path(main 自己派的小弟,11 个 tool 没 exec/Write 能力)而非真正的 ACP backend(claude-agent-acp / codex-acp / opencode acp,20+ tool 含完整能力)。
实测:派 main 的 brief 让 spawn 三 backend 写 echo 文件 → 3/3 失败,0 文件创建,0 spawn announces。
解决方案:acpx CLI 直调
绕开 main 决策层,直接 shell exec:
ACPX="/Users/frankypeh/.openclaw/plugin-runtime-deps/openclaw-2026.4.29-da6bdffc3d96/node_modules/.bin/acpx"
REPO=/Users/frankypeh/.openclaw/workspace
"$ACPX" --cwd "$REPO" --approve-all --non-interactive-permissions deny \
--timeout 600 --format text claude exec "<task>"
# 同样语法可调 opencode / codex
实测三 backend 全通:
claude ✓ acpx-claude-1777636524 (Write tool 写文件)
opencode ✓ acpx-opencode-1777636524 (Bash echo 写文件)
codex ✓ acpx-codex-1777636605 (Bash echo 写文件)
路由选型
| 任务类型 | 选 |
|---|---|
| 单文件 < 200 行 / CRUD / 模板 | opencode(DGX NVFP4 本地零费) |
| 跨多文件架构 / plan-then-execute | claude(推理强 + plan mode) |
| 深度推理 / SVG / Vue 视觉 | codex(出码质量) |
| ssh / docker / 部署 / 改 config | CC(Claude Code) |
修复 OpenClaw 源码 (4-6 小时) 不再必要 —— acpx workflow 已经覆盖。
反思:Infrastructure 三层稳定性
今天三件事的共同主题是 "把不可控的环节换成可观测可恢复的设施":
- V4 schema → 数据层稳定性(i18n 标准化,避免下游 fallback 怪状)
- RustDesk → 远控稳定性(自有中继 + 自动 TLS 续签)
- acpx CLI → 协作稳定性(绕开 main 派单不可靠 path)
明天(Day 58)目标:V4 Phase 2 上线 cms-api routes + SSR 切到 V4 endpoint,让前端真的开始消费 V4 数据。