跨CF账号改域名
TL;DR
老师要求放弃 getgrowth.app,改用 solar-flow.ai。第一步:Press 控制面板从
press.getgrowth.app迁移到os.solar-flow.ai,通过替换 CF Tunnel token + 软链接实现。现状:🚧 Press 面板已通,但整个 getgrowth.app 生态(站点、nginx、Agent、DB)尚未迁移。这是临时方案,容器重建后软链接丢失。
🎯 背景
- 需求:创始人决定换域名,从
getgrowth.app全面迁移到solar-flow.ai - 第一步:Press 控制面板是整个基础设施的管理入口,必须最先恢复访问
- 卡点:新域名
solar-flow.ai在另一个 CF 账户中,需要跨账户操作 - 约束:miao_77 无法直接 SSH 到 n1+f1(只有密钥没设密码),只能走 Press 容器跳板
✅ 前置条件
- solar-flow.ai 已在新 CF 账户中
- Press VPS (104.236.24.124) root SSH
- 新 CF 账户 Zero Trust Tunnel 已创建并拿到 token
- n1+f1 VPS (45.55.93.224) 需走 Press 容器跳板
🏗️ 当前零信任隧道架构
浏览器
→ CF Zero Trust Tunnel (新账户)
→ cloudflared (Press VPS, systemd)
→ localhost:8082
→ Docker 端口映射 → frontend 容器:8080 (nginx)
→ proxy_pass backend:8000 (Gunicorn)
→ Frappe bench 站点 press.getgrowth.app
三台 VPS 的 tunnel 情况:
| VPS | cloudflared | 方式 |
|---|---|---|
| Press (104.236.24.124) | 有 | systemd, Type=notify |
| n1+f1 (45.55.93.224) | 无 | CF DNS 橙云 → 公网 IP → nginx |
| m1 (159.65.38.50) | 无 | 纯数据库 |
选 systemd 而非 Docker:Docker 崩了没法远程修。
请求链路:nginx server_name $host + X-Frappe-Site-Name $host → Frappe 用 host 匹配 sites/ 目录名 → 找不到就 404
🛠️ 执行步骤
第 1 步:确认 tunnel 状态
systemctl status cloudflared
cat /etc/systemd/system/cloudflared.service第 2 步:替换 Token
cp /etc/systemd/system/cloudflared.service /etc/systemd/system/cloudflared.service.bak
sed -i 's|^ExecStart=.*|ExecStart=/usr/local/bin/cloudflared --no-autoupdate tunnel run --token <新Token>|' /etc/systemd/system/cloudflared.service
systemctl daemon-reload && systemctl restart cloudflared
systemctl status cloudflared第 3 步:新 CF 账户配置 Public Hostname
Zero Trust → Networks → Tunnels → Public Hostname:os.solar-flow.ai → localhost:8082
第 4 步:解决 404(软链接)
docker exec -u root frappepress-press-backend-1 ln -sf \
/home/frappe/frappe-bench/sites/press.getgrowth.app \
/home/frappe/frappe-bench/sites/os.solar-flow.ai为什么不用 currentsite.txt:会让所有未知域名落到 Press,软链接更精准。
🔍 验证
curl -s -o /dev/null -w "HTTP %{http_code}
" https://os.solar-flow.ai🕳️ 踩过的坑
坑 1:sed 替换 token 失败
现象:
sed: -e expression #1, char 195: unterminated 's' command根因:终端输出 token 被截断显示为eyJ*******解决:改为整行替换而非匹配旧 token
坑 2:
docker exec press-backend找不到容器根因:实际名
frappepress-press-backend-1解决:先docker ps | grep press确认
坑 3:查错容器(backend vs frontend)
根因:nginx 在 frontend,不在 backend
坑 4:替换 token 后 404
根因:Frappe 无
sites/os.solar-flow.ai/目录 解决:软链接
⚠️ 已知副作用
- 现有站点全部不可访问 — gottenergy/demo1/demo2 的 nginx + site_url 仍是旧域名
- 软链接容器重建后丢失 — docker compose down/up 后需重建
- Frappe 生成 URL 以新域名为基站 — 登录跳转、API 回调、邮件链接都变
os.solar-flow.ai - Press DB 记录仍指向旧域名 — Root Domain、Server name、Press Settings domain 未改
- n1+f1 的 nginx 和 Agent 配置未改 — proxy.conf 仍路由
*.getgrowth.app,Agent press_url 不通 - Token 明文在 service 文件 — 权限 644
📋 速查命令
systemctl status cloudflared
journalctl -u cloudflared --since "5 min ago" --no-pager
docker ps --format '{{.Names}}' | grep press
docker exec -u root frappepress-press-backend-1 ln -sf /home/frappe/frappe-bench/sites/press.getgrowth.app /home/frappe/frappe-bench/sites/os.solar-flow.ai
curl -s -o /dev/null -w "HTTP %{http_code}
" http://localhost:8082 -H "Host: os.solar-flow.ai"📝 更新日志
| 日期 | 改动 | 原因 |
|---|---|---|
| 2026-07-06 | tunnel token 替换 + 软链接,Press 通 os.solar-flow.ai | 跨 CF 迁移第一步 |
⚠️ 这是临时方案
本次只完成 Press 面板的 tunnel 迁移。软链接未永久化、DB 记录未改、n1+f1 完全未动。
🔮 完全夺舍替换 getgrowth.app(暂未实践)
以下为全面替换清单,具体步骤、踩坑、验证方法待实践后填入。
需要改的位置
VPS 层面:
- n1 nginx proxy.conf —
*.getgrowth.app→*.solar-flow.ai - f1 bench nginx.conf — server_name 加新域名
- f1 Agent config.json — domain + press_url
- Press Dockerfile/entrypoint — 永久化软链接
Press DB 层面:
- Press Settings → domain 改为
solar-flow.ai - Root Domain → 改为
solar-flow.ai - TLS Certificate → 新建
*.solar-flow.ai
站点数据(m1 MariaDB):
- gottenergy/demo1/demo2 →
site_url改为新域名
CF 层面:
- DNS
*.solar-flow.aiA →45.55.93.224(橙云) - TLS Origin CA 证书换新域名
- CF R2 + Email Routing 迁移
(以下待实践后填入:完整步骤、踩坑、验证、回滚方案)