Commit 4689608b390c5dfb12c361919e4f0eadc57c7ca5
1 parent
5fe74b39
docs: 记录生产部署环境与上线流程
服务器地址、/opt/lemonboss 部署拓扑(docker 容器 lemonboss、bind mount)、 git pull + docker restart 的具体上线步骤,来自实地登录核查,避免下次重复问。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Showing
2 changed files
with
35 additions
and
0 deletions
docs/README.md
| ... | ... | @@ -21,6 +21,7 @@ |
| 21 | 21 | | [claude-code-cron.md](./done/claude-code-cron.md) | Claude Code 原生 Cron 调度功能参考手册 | |
| 22 | 22 | | [claude-cli-session-leak.md](./done/claude-cli-session-leak.md) | **常驻 CLI 子进程泄漏排查手册** — ✅ 已修复(`b0b2b62` + `2092a2e`):系统里有**两个互不相干的会话池**(`routes/agent-chat.js` 的 `sessions` / `src/core/session-pool.js`),各漏各的。含按 cwd 判断孤儿归属的方法、变异检验为什么必要、三步定位脚本,以及 `DISABLE_BACKGROUND_AGENTS=1` —— 跑全量测试前关掉后台驱动的开关 | |
| 23 | 23 | | [open-api-manual.md](./done/open-api-manual.md) | ArenaSK Open API 外部调用手册 | |
| 24 | +| [production-deploy.md](./done/production-deploy.md) | 生产部署环境与上线流程 — 服务器地址、`/opt/lemonboss` 部署拓扑、Docker 容器、git pull + 重启的具体步骤 | | |
| 24 | 25 | | [qa_judge_req.md](./done/qa_judge_req.md) | QA Judge Agent 需求文档 — 已在 `system/agents/qa-judge/` 落地 | |
| 25 | 26 | | [task_timeline_design.md](./done/task_timeline_design.md) | Task Timeline View 设计文档 — 已实现(`server/routes/tasks.js`、`server/services/task-service.js`、`web/src/views/TaskTimeline.vue`) | |
| 26 | 27 | | [user-guides/08-base-agent-4-phase-guide.md](./done/user-guides/08-base-agent-4-phase-guide.md) | Base Agent 四阶段使用指南 | | ... | ... |
docs/done/production-deploy.md
0 → 100644
| 1 | +# 生产部署环境与上线流程 | |
| 2 | + | |
| 3 | +> 状态:✅ 当前有效。2026-08-27 首次整理,来源于登录服务器实地核查(非猜测)。 | |
| 4 | + | |
| 5 | +## 服务器 | |
| 6 | + | |
| 7 | +- 地址:`root@60.205.214.169`(hostname `hexyun`)。本机已配好免密 SSH,直接 `ssh root@60.205.214.169` 即可,不需要额外问用户要密码/密钥。 | |
| 8 | +- 对外域名 `lemonboss.wudaima.com` 由这台机器提供服务。 | |
| 9 | +- 同一台机器上还跑着大量不相关的容器(wordpress、milvus、rasa、chroma 等),`docker` 相关命令务必认准容器名 `lemonboss`,不要用 `docker restart` 之类命令波及别的服务。 | |
| 10 | + | |
| 11 | +## 部署拓扑 | |
| 12 | + | |
| 13 | +- **代码目录**(host 侧):`/opt/lemonboss`,属主 `hexyun:hexyun`。是一个独立 git 仓库,`origin` 与本地仓库一致,指向 `git@gitlab-wuwei.hexpm.com:yibo/lemonboss.git`,跟踪分支 `main`。 | |
| 14 | +- **运行方式**:Docker 容器 `lemonboss`(镜像 `lemonboss-base:latest`),重启策略 `unless-stopped`。 | |
| 15 | + - `/opt/lemonboss` bind-mount 到容器内 `/app` | |
| 16 | + - `/opt/data` bind-mount 到容器内 `/data` | |
| 17 | + - entrypoint:`docker-entrypoint.sh` → `node server/index.js` | |
| 18 | +- **端口**:容器内 3010 → 宿主机 `127.0.0.1:3011`(对外走反向代理到 `lemonboss.wudaima.com`,代理具体配置未查)。 | |
| 19 | + | |
| 20 | +## 更新上线流程 | |
| 21 | + | |
| 22 | +1. 本地正常提交,`git push origin main`。 | |
| 23 | +2. 登录服务器:`ssh root@60.205.214.169`,`cd /opt/lemonboss && git pull origin main`。 | |
| 24 | + - **必须用 `root` 拉代码**:目录属主虽是 `hexyun`,但只有 `root` 配了到 `gitlab-wuwei.hexpm.com` 的部署 SSH key;`hexyun` 没配任何 key,`sudo -u hexyun git pull` 会直接因 host key / 鉴权失败报错。 | |
| 25 | + - `git pull` 完成后,把本次改动涉及的文件 `chown hexyun:hexyun` 改回属主(`git pull` 用 root 跑,新拉下来的文件会变成 `root:root`),避免以后应用进程(跑在 `hexyun` 身份下)对这些文件失去写权限。整个目录不建议全量 `chown -R`(node_modules 体量大且没必要)。 | |
| 26 | +3. `docker restart lemonboss` 让新代码生效——bind mount 是实时的,但 Node 进程不会自动热重载,必须重启容器内进程。 | |
| 27 | +4. 验证: | |
| 28 | + - `curl http://127.0.0.1:3011/api/health` 应返回 200 | |
| 29 | + - `docker logs --tail 40 lemonboss` 确认启动日志无异常(正常应看到 `✅ 服务启动: http://0.0.0.0:3010` 等心跳/看门狗初始化行) | |
| 30 | + | |
| 31 | +## 其他线索 | |
| 32 | + | |
| 33 | +- `/opt/lemonboss/.env` 里的 `OPEN_API_KEYS` 是 `/api/open/*` 外部调用的鉴权 key,本文档不记录明文值。 | |
| 34 | +- `/opt/lemonboss/.data/jobs-openapi.json` 是 open-api invoke 端点(`server/routes/open-api.js`)的 job 记录,容器重启时会从这个文件恢复历史 job(日志里 `[JobManager] Restored N jobs` 就是这个)——这是 job 记录,不是会话历史,二者存储位置不同(会话历史见 `system/agents/{agentId}/{companyId|_global}/conversations/`)。 | ... | ... |