跨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 情况

VPScloudflared方式
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.ailocalhost: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. 现有站点全部不可访问 — gottenergy/demo1/demo2 的 nginx + site_url 仍是旧域名
  2. 软链接容器重建后丢失 — docker compose down/up 后需重建
  3. Frappe 生成 URL 以新域名为基站 — 登录跳转、API 回调、邮件链接都变 os.solar-flow.ai
  4. Press DB 记录仍指向旧域名 — Root Domain、Server name、Press Settings domain 未改
  5. n1+f1 的 nginx 和 Agent 配置未改 — proxy.conf 仍路由 *.getgrowth.app,Agent press_url 不通
  6. 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-06tunnel 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.ai A → 45.55.93.224(橙云)
  • TLS Origin CA 证书换新域名
  • CF R2 + Email Routing 迁移

(以下待实践后填入:完整步骤、踩坑、验证、回滚方案)