Files
memind/docs/103-105-upgrade-runbook-2026-06-26.md
T

5.7 KiB
Raw Blame History

103 / 105 一次性升级实施记录(2026-06-26)

历史记录说明:本文记录 2026-06-26 当时的一次性升级事实。2026-07-03 后,103 的 MindSpace Service 已独立部署到 /Users/john/MindSpace/Users/john/Project/Memind/MindSpace 只作为旧链路兼容/存量目录处理。当前生产拓扑以 103 runtime topology 为准。

目标

本次升级的目标不是继续修补旧工作树,而是一次性把:

  1. 本地三仓库收口为唯一源码真相。
  2. 103 收口为“只接收发布包”的正式运行机。
  3. 105 收口为入口 / 代理机,不再承担可写业务数据目录。
    后续禁止 SSH 直改 105 业务源码;运维细则见 105 服务器变更规范

已确认的真实结构

103

  • 主机:john@58.38.22.103
  • 主运行根目录:/Users/john/Project
  • 当前业务目录:
    • /Users/john/Project/Memind
    • /Users/john/Project/memind_adm
    • /Users/john/Project/memind_plaza
  • 当前产物目录骨架已经存在:
    • /Users/john/Project/backups
    • /Users/john/Project/incoming
    • /Users/john/Project/releases

105

  • 可达 SSH 入口:root@120.26.184.105
  • 旧文档中的固定内网地址 100.101.255.32 当前已视为废弃,不应继续写入脚本或说明
  • 当前 H5 运行目录:/root/tkmind_go/ui/h5
  • 当前 Plaza 目录:/root/tkmind_go/ui/plaza
  • 105 上没有 Goose 双实例,只是入口 / portal 层

关键结论

1. MindSpace 数据真身在 103,不在 105

103 .env 明确指向:

  • H5_USERS_ROOT=/Users/john/Project/Memind/users
  • MINDSPACE_STORAGE_ROOT=/Users/john/Project/Memind/data/mindspace
  • MEMIND_SHARED_PUBLISH_ROOT=/Users/john/Project/Memind/MindSpace

因此:

  • 103 是 MindSpace 用户空间、发布页、资产存储的真实落盘位置
  • 105 不是这批数据的主存储

2. 105 通过 rclone 挂载 103 的共享目录

105 现有 systemd mount

  • memind-shared-mindspace.mount.service
    • memind-mac:/Users/john/Project/Memind/MindSpace 挂到 /mnt/memind-shared/MindSpace
  • memind-shared-storage.mount.service
    • memind-mac:/Users/john/Project/Memind/data/mindspace 挂到 /mnt/memind-shared/data/mindspace

这意味着:

  • 105 的无缝升级前提是 103 上这两条真实路径不能变
  • 可以重建代码目录
  • 不能随意移动这两棵持久目录的位置

3. 本次升级不能把 MindSpace 数据从路径上“迁走”

如果本次升级把以下路径改掉:

  • /Users/john/Project/Memind/MindSpace
  • /Users/john/Project/Memind/data/mindspace
  • /Users/john/Project/Memind/users

那么:

  • 103 本地服务会断引用
  • 105 的 rclone mount 会失效
  • 旧发布页 / 用户空间会出现访问中断

因此本次升级的正确策略是:

  1. 保持这三条路径不变
  2. 让新 release 继续继承这些目录
  3. 把“源码目录可手改”废除,而不是把“数据根路径”迁走

本次备份结果

103

备份目录:

  • /Users/john/Project/backups/upgrade-20260626-094108

包含:

  • 103-Memind-live.tgz
  • 103-Memind-persistent.tgz
  • 103-memind_adm-live.tgz
  • 103-memind_plaza-live.tgz

其中最关键的是:

  • 103-Memind-persistent.tgz

它单独保存了:

  • MindSpace
  • data
  • users
  • public/plaza-covers
  • .env

105

备份目录:

  • /root/service_backup/tkmind-upgrade-20260626-094109

包含:

  • 105-h5-live.tgz
  • 105-plaza-live.tgz
  • 105-h5.env
  • 105-service-config.tgz

当前数据体量

103

  • /Users/john/Project/Memind/MindSpace: 95M
  • /Users/john/Project/Memind/data: 40M
  • /Users/john/Project/Memind/users: 52K
  • /Users/john/Project/memind_adm: 112M
  • /Users/john/Project/memind_plaza: 617M
  • /Users/john/Project/tkmind_go: 45G

重要说明

/Users/john/Project/tkmind_go 很大,但它不是本次无缝迁移的关键业务数据真身。

本次升级不应先去搬这 45G,而应优先保证:

  1. Memind 的持久目录不丢
  2. 105 的入口配置不丢
  3. 三个本地仓库的首次正式 bundle 发布可回退

推荐升级顺序

第一步:保留 103 持久路径不动

以下路径本次不改名、不挪位置:

  • /Users/john/Project/Memind/MindSpace
  • /Users/john/Project/Memind/data/mindspace
  • /Users/john/Project/Memind/users
  • /Users/john/Project/Memind/public/plaza-covers

第二步:三项目按发布包重建代码版本

建议顺序:

  1. Memind
  2. memind_adm
  3. memind_plaza

原因:

  1. Memind 决定主持久目录和 105 的共享挂载根
  2. memind_adm 独立但依赖 Memind 共享实现
  3. memind_plaza 最后切,避免前端入口先于主共享资源变化

第三步:105 只保留入口角色

本次升级后,105 应保留:

  1. goose-h5.service
  2. 反代 / 入口相关配置
  3. 指向 103 的共享挂载与远端 API 目标

本次升级后,105 不应继续承担:

  1. 可写业务数据真身
  2. 源码发布主线
  3. Goose 实例

这次如何做到“无缝”

无缝的关键不是不重启,而是:

  1. 数据路径保持不变
  2. 新版本继承同一批持久目录
  3. 入口配置不突然指向新路径
  4. 每次切换都有可回退包

因此本次切换原则是:

  1. 先切代码
  2. 不搬数据根
  3. 不改共享路径
  4. 切完再验证挂载和业务路径

切换后必须验证

103

  1. http://127.0.0.1:8081/api/status
  2. http://127.0.0.1:3001/plaza
  3. MindSpace 已有用户空间可读
  4. 发布页可打开
  5. data/mindspace/users/* 能继续访问对应资产

105

  1. goose-h5.service 正常
  2. /mnt/memind-shared/MindSpace 挂载正常
  3. /mnt/memind-shared/data/mindspace 挂载正常
  4. H5 请求仍能正确回源 103 的 Goose / shared data