Commit 78c24226170d9f13e10a21de33951a64d07fc045
1 parent
4689608b
docs: 补记「换模型/密钥必须重建容器」的坑 + 当前模型状态
ANTHROPIC_BASE_URL/API_KEY/MODEL 是 docker run -e 时固化进容器配置的, 改 .env + docker restart 不生效,必须重建容器;顺带记录当前已切到 智谱 GLM-5.3-Flash(此前是 DeepSeek deepseek-v4-flash)。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Showing
1 changed file
with
33 additions
and
1 deletions
docs/done/production-deploy.md
| ... | ... | @@ -28,7 +28,39 @@ |
| 28 | 28 | - `curl http://127.0.0.1:3011/api/health` 应返回 200 |
| 29 | 29 | - `docker logs --tail 40 lemonboss` 确认启动日志无异常(正常应看到 `✅ 服务启动: http://0.0.0.0:3010` 等心跳/看门狗初始化行) |
| 30 | 30 | |
| 31 | +## ⚠️ 环境变量是固化在容器里的,改 `.env` + `docker restart` 不会生效 | |
| 32 | + | |
| 33 | +2026-08-27 踩过一次坑:`ANTHROPIC_BASE_URL` / `ANTHROPIC_API_KEY` / `ANTHROPIC_MODEL`(决定 Claude CLI 实际打到哪个模型厂商)这几个变量,是当初 `docker run -e ...` 时**直接固化进容器配置**的(`docker inspect lemonboss --format '{{.Config.Env}}'` 能看到),跟 bind-mount 进去的 `/opt/lemonboss/.env` 文件是两码事——Node 进程虽然也会 `dotenv` 加载 `.env`,但容器注入的 env 已经先一步存在于 `process.env`,dotenv 默认不覆盖已存在的变量,所以改 `.env` 完全不生效,`docker restart` 只是重启同一个容器进程,也不会重新读取新的 `-e` 值。 | |
| 34 | + | |
| 35 | +**要真正改这类模型/密钥配置,必须重建容器**(`docker restart` 无效): | |
| 36 | + | |
| 37 | +```bash | |
| 38 | +# 1. 保留旧容器做回滚,不要直接删 | |
| 39 | +TS=$(date +%Y%m%d%H%M%S) | |
| 40 | +docker rename lemonboss lemonboss-old-$TS | |
| 41 | +docker stop lemonboss-old-$TS | |
| 42 | + | |
| 43 | +# 2. 用完全相同的镜像/端口/挂载/重启策略/JWT_SECRET 重建,只改要换的那几个 -e | |
| 44 | +docker run -d --name lemonboss \ | |
| 45 | + --restart unless-stopped \ | |
| 46 | + --user 1000:1000 \ | |
| 47 | + -p 127.0.0.1:3011:3010 \ | |
| 48 | + -v /opt/lemonboss:/app \ | |
| 49 | + -v /opt/data:/data \ | |
| 50 | + -e NODE_ENV=production -e PORT=3010 -e HOST=0.0.0.0 \ | |
| 51 | + -e CORS_ORIGIN=https://lemonboss.wudaima.com \ | |
| 52 | + -e JWT_SECRET=<原样抄一份,改错会让所有已登录用户掉线> \ | |
| 53 | + -e ANTHROPIC_BASE_URL=... -e ANTHROPIC_API_KEY=... -e ANTHROPIC_MODEL=... \ | |
| 54 | + lemonboss-base:latest | |
| 55 | + | |
| 56 | +# 3. 验证:health 200 + docker exec 进去看 /proc/<pid>/environ 确认新值生效 + 跑一次真实 invoke | |
| 57 | +``` | |
| 58 | + | |
| 59 | +完整现有配置可以先 `docker inspect lemonboss > backup.json` 存一份再动手,照抄里面的 `Env`/`Mounts`/`HostConfig.PortBindings`/`Config.User` 等字段,一个都不能漏,尤其是 `JWT_SECRET`。 | |
| 60 | + | |
| 61 | +**当前模型配置**(2026-08-27 起):智谱 GLM-5.3-Flash,`ANTHROPIC_BASE_URL=https://open.bigmodel.cn/api/anthropic`,`ANTHROPIC_MODEL=glm-5.3-flash`(此前是 DeepSeek `deepseek-v4-flash` + `https://api.deepseek.com/anthropic`)。 | |
| 62 | + | |
| 31 | 63 | ## 其他线索 |
| 32 | 64 | |
| 33 | -- `/opt/lemonboss/.env` 里的 `OPEN_API_KEYS` 是 `/api/open/*` 外部调用的鉴权 key,本文档不记录明文值。 | |
| 65 | +- `/opt/lemonboss/.env` 里的 `OPEN_API_KEYS` 是 `/api/open/*` 外部调用的鉴权 key,本文档不记录明文值。**注意**:`.env` 文件本身对 `ANTHROPIC_*` 这三个变量是摆设(见上),但 `OPEN_API_KEYS` 等其他没有被 `docker run -e` 固化的变量,还是照常从 `.env` 里读取生效的——只有被固化过的那几个例外。 | |
| 34 | 66 | - `/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/`)。 | ... | ... |