86 lines
4.0 KiB
Markdown
86 lines
4.0 KiB
Markdown
# Memind Portal 生产更新发布指南
|
||
|
||
> 2026-06-26 起,103 / Studio 正式禁止 `rsync` 发布。
|
||
> Portal 生产必须是**无源码 runtime 模式**,唯一合法入口是 `bash scripts/release-portal-runtime-prod.sh`。
|
||
> 每次发包前先读:[发包必看](发包必看.md)。
|
||
|
||
## 当前规则
|
||
|
||
1. 构建只发生在本机 Mac:`node scripts/build-portal-runtime.mjs`。
|
||
2. 103 只接收 `.runtime/portal/` 打出来的 artifact,不直接覆盖源码树。
|
||
- 所有由 goosed 以 stdio 启动的 Portal MCP 入口都必须打进 artifact,并同时加入发布脚本的必需文件和容器可见性检查;当前包括 `mindspace-sandbox-mcp.mjs` 与 `tkmind-search-mcp.mjs`。
|
||
3. 103 在切换前必须做 `Memind` 全量备份,并单独备份持久目录。
|
||
4. 103 **禁止** `npm install`、`npm run build`、在线改源码后继续运行。
|
||
5. 切换后必须通过 Portal 健康检查;失败立即回滚。
|
||
|
||
补充:
|
||
|
||
- `103 / Studio` runtime 发布入口:`bash scripts/release-portal-runtime-prod.sh`
|
||
- `105` runtime 发布入口:`bash scripts/release-portal-runtime-105.sh`
|
||
- 两者都必须是 **runtime artifact**,不要直接发源码树
|
||
- `105` 与 `103` 的关键差异是:
|
||
`105` 为 Linux 环境,**不要携带本机 Mac 的 `node_modules`**;应在 `105` 切换前本机执行 `npm install --omit=dev --no-package-lock`
|
||
|
||
## 唯一入口
|
||
|
||
```bash
|
||
bash scripts/release-portal-runtime-prod.sh --dry-run
|
||
bash scripts/release-portal-runtime-prod.sh
|
||
```
|
||
|
||
如果目标环境是 `105`:
|
||
|
||
```bash
|
||
bash scripts/release-portal-runtime-105.sh --dry-run
|
||
bash scripts/release-portal-runtime-105.sh --yes
|
||
```
|
||
|
||
## 产物发布流程
|
||
|
||
1. 本地 commit 当前改动。
|
||
2. 本机构建 runtime:`node scripts/build-portal-runtime.mjs`(发布脚本默认会自动执行)。
|
||
3. 校验 artifact 至少包含:`server.mjs`、`mindspace-sandbox-mcp.mjs`、`dist/`、`scripts/run-memind-portal-prod.sh`。
|
||
4. 本地生成 `memind-portal-runtime-<release-id>.tar.gz` 和发布清单。
|
||
5. 通过 `scp` 上传到 103 的 `incoming/memind-portal-runtime/`。
|
||
6. 103 备份当前 `/Users/john/Project/Memind` 全目录 + 持久目录。
|
||
7. 停止旧 Portal,解包 runtime artifact 到新的 live 目录,继承 `.env` / `data/` / `users/` / `.tailscale/` / `public/plaza-covers/` / `logs/`。`/Users/john/MindSpace` 是独立 MindSpace Service 根目录,不随 Portal runtime 解包;`/Users/john/Project/Memind/MindSpace` 只作为旧链路兼容/存量目录看待。
|
||
8. 更新 LaunchAgent 指向 `${APP_DIR}/scripts/run-memind-portal-prod.sh`。
|
||
9. 启动 Portal,检查 `127.0.0.1:8081/api/status` 为 200。
|
||
10. 旧源码 live 目录移入 `archives/`,线上不再保留可运行源码树。
|
||
|
||
## 105 runtime 发布差异
|
||
|
||
`105` 当前不是 launchd,而是 `systemd` 服务:
|
||
|
||
```text
|
||
goose-h5.service
|
||
WorkingDirectory=/root/tkmind_go/ui/h5
|
||
EnvironmentFile=/root/tkmind_go/ui/h5/.env
|
||
ExecStart=/opt/node/bin/node /root/tkmind_go/ui/h5/server.mjs
|
||
```
|
||
|
||
所以 `105` 发布时要额外满足:
|
||
|
||
1. 保留 `.env` / `MindSpace/` / `data/` / `users/` / `logs/` / `public/plaza-covers/`
|
||
2. 远端切换前在新的 runtime 目录执行 Linux 依赖安装
|
||
3. 最终用 `systemctl restart goose-h5` 拉起服务
|
||
4. 健康检查目标是 `http://127.0.0.1:8080/api/status`
|
||
|
||
## 禁止事项
|
||
|
||
- 禁止 `rsync_to_server.sh`
|
||
- 禁止 `bash scripts/release-prod.sh`(源码包发布已停用)
|
||
- 禁止手工拖文件覆盖 103
|
||
- 禁止在 103 直接改源码后继续跑
|
||
- **禁止 SSH 到 105 直接改业务源码**(含 `scripts/wechat-mp-menu.mjs`);见 [105 服务器变更规范](105-server-operations.md)
|
||
- 禁止跳过备份和健康检查
|
||
|
||
## 相关文档
|
||
|
||
- [本机与 103 运行拓扑](103-runtime-topology.md)
|
||
- [Portal 无源码迁移说明](no-source-portal-migration.md)
|
||
- [105 服务器变更规范](105-server-operations.md)
|
||
- [开发环境规则](../DEVELOPMENT_RELEASE_RULES.md)
|
||
- [测试发布规则](../TEST_RELEASE_RULES.md)
|
||
- [生产发布规则](../PRODUCTION_RELEASE_RULES.md)
|