# 103 生产收口记录(2026-06-26) ## 目标 把 `103` 从“可直接手改的运行工作树”收口为“只接收本地发布包的生产环境”。 这份记录只做两件事: 1. 固定 2026-06-26 看到的真实生产状态。 2. 给后续“本地唯一发布源”改造提供基线。 ## 已确认的生产真相 ### 主机与入口 - 生产主机:`john@58.38.22.103` - 当前 SSH 端口:`22` - 旧的 `2222` 已关闭,不应再写入文档或脚本 ### 运行目录 - Memind: `/Users/john/Project/Memind` - 管理后台: `/Users/john/Project/memind_adm` - Plaza: `/Users/john/Project/memind_plaza` ### 运行服务 - `cn.tkmind.memind-portal` - `cn.tkmind.plaza` - `cn.tkmind.memind-adm-web` - `cn.tkmind.memind-adm-api` - `cn.tkmind.goosed-18006` - `cn.tkmind.goosed-18007` 结论:Goose 在线上是双实例负载,本地不需要强行复制这套拓扑;这部分应作为“发布后巡检”处理,而不是“本地开发必须等价”处理。 ## 数据库结论 ### 生产正在使用的业务库 `/Users/john/Project/Memind/.env` 与 `/Users/john/Project/memind_adm/.env` 都指向同一个 RDS: - `DATABASE_URL=.../goose` 因此: - 当前正式业务库是 `goose` - `memind` 库仍存在,但不是当前正式流量的主写入目标 ### 2026-06-26 抽样结果 `goose`: - `h5_users`: `41` - 有充值/加款记录的用户数:`27` `memind`: - `h5_users`: `26` - 有充值/加款记录的用户数:`12` 这说明 `memind` 更像旧数据或历史分流,当前生产业务应以 `goose` 为准。 ### 付费用户观察 按 `goose.h5_billing_ledger` 统计: - 除去明显超大测试/管理员账户 `admin` - 充值额度最高的真实用户:`wx_95eskyda / cheng cong👑` - 实际消耗最高的真实用户之一:`wx_ul610et8 / 唐` ## 工作树漂移结论 ### 103 生产工作树 - `Memind` - branch: `main` - commit: `728b01c` - dirty files: `154` - `memind_adm` - branch: `main` - commit: `7a5b9cc` - dirty files: `42` ### 本地工作树 - `test-memind` - commit: `d51df2f` - local diff count: `102` - `test-memindadm` - commit: `f217232` - local diff count: `28` ## 判断 不能把 `103` 视为“最新版本”,也不能把本地直接视为“可全量覆盖生产”的唯一事实。 当前状态更准确的描述是: 1. `103` 是真实运行版本,但带有大量未回收漂移。 2. 本地是主要开发来源,但尚未完成对 `103` 有效差异的回收。 3. 因此必须先做一次“收口”,再执行“本地唯一发布源”制度。 ## 收口策略 ### 禁止动作 - 禁止再用 `rsync` 直接覆盖生产工作树 - 禁止在 `103` 直接改源码后继续跑 - 禁止把 `103` 直接反向同步进本地主开发目录 ### 允许动作 1. 单独创建 `103-baseline` 副本或 worktree 2. 将 `103` 与本地、目标主线做三向比较 3. 只回收“生产独有且必须保留”的热修 4. 回收完成后,以本地提交为唯一发布源重新出包上线 ## 后续制度 从这次收口完成后开始: 1. 本地源码是唯一发布源 2. 生产只接收发布包 3. 发布包上传到 `incoming/` 4. 生产解包到 `releases/` 5. 备份当前 live 目录 6. 原子切换目录并重启 7. 失败自动回滚 ## 需要继续执行的事项 1. 为 `memind_adm` 补齐与 `Memind` 一样的发布包脚本和规则文档 2. 从 `103` 导出一个只读差异清单 3. 把真正必须保留的生产热修回收到本地 4. 收口完成后,把 `103` 变成“不可手改源码”的发布目标