production-deploy.md 2.88 KB

生产部署环境与上线流程

状态:✅ 当前有效。2026-08-27 首次整理,来源于登录服务器实地核查(非猜测)。

服务器

  • 地址:root@60.205.214.169(hostname hexyun)。本机已配好免密 SSH,直接 ssh root@60.205.214.169 即可,不需要额外问用户要密码/密钥。
  • 对外域名 lemonboss.wudaima.com 由这台机器提供服务。
  • 同一台机器上还跑着大量不相关的容器(wordpress、milvus、rasa、chroma 等),docker 相关命令务必认准容器名 lemonboss,不要用 docker restart 之类命令波及别的服务。

部署拓扑

  • 代码目录(host 侧):/opt/lemonboss,属主 hexyun:hexyun。是一个独立 git 仓库,origin 与本地仓库一致,指向 git@gitlab-wuwei.hexpm.com:yibo/lemonboss.git,跟踪分支 main。
  • 运行方式:Docker 容器 lemonboss(镜像 lemonboss-base:latest),重启策略 unless-stopped。
    • /opt/lemonboss bind-mount 到容器内 /app
    • /opt/data bind-mount 到容器内 /data
    • entrypoint:docker-entrypoint.sh → node server/index.js
  • 端口:容器内 3010 → 宿主机 127.0.0.1:3011(对外走反向代理到 lemonboss.wudaima.com,代理具体配置未查)。

更新上线流程

  1. 本地正常提交,git push origin main。
  2. 登录服务器:ssh root@60.205.214.169,cd /opt/lemonboss && git pull origin main。
    • 必须用 root 拉代码:目录属主虽是 hexyun,但只有 root 配了到 gitlab-wuwei.hexpm.com 的部署 SSH key;hexyun 没配任何 key,sudo -u hexyun git pull 会直接因 host key / 鉴权失败报错。
    • git pull 完成后,把本次改动涉及的文件 chown hexyun:hexyun 改回属主(git pull 用 root 跑,新拉下来的文件会变成 root:root),避免以后应用进程(跑在 hexyun 身份下)对这些文件失去写权限。整个目录不建议全量 chown -R(node_modules 体量大且没必要)。
  3. docker restart lemonboss 让新代码生效——bind mount 是实时的,但 Node 进程不会自动热重载,必须重启容器内进程。
  4. 验证:
    • curl http://127.0.0.1:3011/api/health 应返回 200
    • docker logs --tail 40 lemonboss 确认启动日志无异常(正常应看到 ✅ 服务启动: http://0.0.0.0:3010 等心跳/看门狗初始化行)

其他线索

  • /opt/lemonboss/.env 里的 OPEN_API_KEYS 是 /api/open/* 外部调用的鉴权 key,本文档不记录明文值。
  • /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/)。