第一次部署的遗留问题

TL;DR

对 GetGrowth Press 第一次部署的所有已知问题做了交叉审查。14 项可以在 SolarFlow 重新部署时从根修正,6 项不能修正(上游设计或云厂商限制)。

现状:📋 清单已列,SolarFlow 部署时逐项融入部署步骤。


可以从根修正的(14 项)

1. site.py源码补丁

旧问题"public": 1"public": ("in", [0, 1]) 手动改 Press 源码,容器重建丢失

修正:Dockerfile builder 阶段加 sed,或创建 Release Group 时直接设 public=1,避免触发需要补丁的过滤逻辑

2. Agent Job手动标Success

旧问题:手动迁移的站点 site.insert() 触发 Agent Job 失败 → 手动改 DB 状态

修正:Press-B 所有站点通过 UI 正常创建,Agent Job 自然走完。上次是因为 gottenergy 从 Frappe Cloud 手动搬过来的

3. creation_failed手动清

旧问题:手动迁移站点后 creation_failed 时间戳需手动清

修正:走正常流程就不会有这个字段。这是手动迁移的副作用

4. 手动补plan字段

旧问题:站点创建后 plan 为空

修正:部署完 Press-B 后,先在 Press 里创建好 Plan(Frappe Team),再建站点

5. n1-f1 Agent密码对齐

旧问题:n1 和 f1 Agent 密码 Ansible 各自生成随机值,不一致

修正:建 Server 记录时用同一个 agent_password,不给 Ansible 各自生成的机会

6. nginx server_name手动加n1

旧问题:nginx.conf 只含 f1 的域名,n1 job 推送失败

修正:如果是 n+f 合并架构,playbook 模板里写死两个 server_name。如果是独立 n,根本不存在这个问题

7. Agent press_url手动sed

旧问题:Ansible 没传 --press-url,默认写 https://frappecloud.com

修正:playbook 传 --press-url https://os.solar-flow.ai

8. Release Group servers为空

旧问题:创建时没填 servers,create_deploy() 静默返回 None

修正:创建 Release Group 时把 servers 字段填上

9. m1 nginx公网暴露443

旧问题:m1 上 nginx 监听 443,公网可访问 Frappe 页面

修正:m-B 不装 nginx,或只监听内网。DO 控制台防火墙直接关 443 入站

10. docker compose down -v毁灭

旧问题:一条命令清空所有持久化数据

修正:docker-compose.yml 卷改用 external: truecompose down -v 不会删

11. 14个迁移App未固化

旧问题:gottenergy 的 14 个 app 手动 git clone,容器重建丢失

修正:Press-B 全走标准 Build 管道(App Source → Release → Release Group → Build → Deploy),不用手动装

12. certifi两个路径

旧问题:系统 Python 和虚拟环境 certifi 路径不同,只改了一处导致 SSL 失败

修正:Dockerfile 已经同时追加两个路径,Press-B 直接用

13. force=True删站

旧问题:跳过 Archive Site 流程,数据库和目录残留

修正:不用 force=True。这是行为规范,不是技术问题

14. 备份恢复未测试

旧问题:cron 每天备份但从未验证能否恢复

修正:Press-B 部署完后立即跑一次恢复演练,写入验证清单


不能从根修正的(6 项)

1. fc-ci fork依赖

为什么不能:Press app 和标准 frappe/frappe 的 pip 依赖版本互斥。这是 Press 团队自己的设计——他们 CI 用的就是 fc-ci 分支。除非 Press 团队把 fc-ci 合并到主线,否则必须保留 fork。

缓解:fork 到 miao-Q777/frappe 自保,上游删库不影响。

2. MariaDB在VPS非托管

为什么不能:DO 不提供 managed MariaDB。这是云厂商限制,不是部署选择。

缓解:CLAUDE.md 已规划 DO → Hetzner 迁移(Hetzner 有 managed MariaDB)。迁移前 m1 作为已知例外运行。

3. Press没有官方Docker镜像

为什么不能:Frappe 团队不发布 Press 的 Docker 镜像。他们对外只提供 Frappe Cloud SaaS 或 bench 裸机部署。这是商业策略决定。

缓解:8 文件自建方案已跑通,miao-Q777/press-deploy 仓库固化后即为我们自己的”官方镜像方案”。

4. Agent proxy.py缺@step装饰器

为什么不能:这是 frappe/agent 上游源码 bug — reload_nginx() 方法缺装饰器导致 Site 卡 Installing。我们 fork 了 agent,可以加 Fix 7。但每次合并 upstream 要额外注意这个文件。

当前状态:实际不影响功能(站点 200,只是 Press 状态不更新),可接受。

5. 容器supervisor.conf被Press覆盖

为什么不能:Press 设计如此。bench 的生命周期由 Press 管理,supervisor.conf 自动生成,重建 bench 时覆盖。不能改,只能接受。

缓解:自定义 daemon 放宿主机 systemd(邮件桥接已这么做),不依赖容器内 supervisor。

6. bench execute是eval模式

为什么不能:Frappe 框架设计如此。只接受单表达式,多行必须走 console 管道。

缓解:记住这个限制,多行用 echo '...' | bench --site xxx console


总结

类型数量说明
可修正14全新部署 SolarFlow 时可以从第一条命令就做对
不能修正6上游设计/云厂商限制/框架设计,非我们能控制

部署 SolarFlow Press-B 时,把可修正的 14 项逐条融入部署步骤即可。


📝 更新日志

日期改动原因
2026-07-08首次创建基于 solar注意事项.md 交叉审查 GetGrowth 第一次部署的全部遗留问题