diff --git a/.env.example b/.env.example index 5f3fd85..0846f0f 100644 --- a/.env.example +++ b/.env.example @@ -3,7 +3,7 @@ POSTGRES_PASSWORD= POSTGRES_DB= POSTGRES_IMAGE=pgvector/pgvector:pg18 REDIS_IMAGE=redis:8.8-alpine -LIBREDESK_IMAGE=libredesk/libredesk:v2.9.0-rc.10 +LIBREDESK_IMAGE=libredesk/libredesk:v2.9.0 LIBREDESK_SYSTEM_USER_PASSWORD= LIBREDESK_ENC_KEY= LIBREDESK_BASE_URL= diff --git a/README.md b/README.md index 0e55381..7b05a5b 100644 --- a/README.md +++ b/README.md @@ -3,11 +3,11 @@ **完全新建**的一套 CRM 客服栈:LibreDesk(平台 + 内置 AI)+ Twenty(CRM)+ bridge(业务工具/集成)。 与旧项目 `/home/dev/code/crm/crm-ai-demo` 完全隔离:独立目录、独立 Postgres/Redis、独立端口,不迁旧数据。 -## 当前状态(2026-10-21) +## 当前状态(2026-10-26) | 组件 | 状态 | |---|---| -| LibreDesk v2.9.0-rc.10 | ✅ 运行中 :9000(System 密码见 `.env`) | +| LibreDesk v2.9.0 | ✅ 运行中 :9000(System 密码见 `.env`) | | Twenty v2.30.1(全新实例) | ✅ 运行中 :3100,数据库迁移完成(71 张表) | | bridge | ✅ 运行中 :4100,4 个工具,单测 18/18 通过 | | Postgres / Redis | ✅ :5440 / :6390 healthy | @@ -53,7 +53,7 @@ Twenty :3100 ── 公司/联系人/商机/备注/任务 | 组件 | 地址 | 镜像/实现 | |---|---|---| -| LibreDesk | http://localhost:9000 | `libredesk:v2.9.0-rc.10`(含 WhatsApp) | +| LibreDesk | http://localhost:9000 | `libredesk:v2.9.0`(含 WhatsApp) | | Twenty | http://localhost:3100 | `twentycrm/twenty:v2.30.1`(全新实例) | | bridge | http://localhost:4100 | Node 24,自研 | | Postgres | localhost:5440 | pgvector/pg18,库 `libredesk` / `twenty` / `bridge` | @@ -220,6 +220,6 @@ cd bridge && npm test ## 关键约束 - **镜像直接使用 Docker Hub**:`libredesk/libredesk`、`pgvector/pgvector`、`redis`、`twentycrm/twenty`;如网络受限可在 Docker daemon 配自己的 registry mirror -- **WhatsApp 仅 v2.9 RC 支持**,需要 Meta Cloud API 凭据;RC 版供联调,不直接上生产 +- **WhatsApp 自 v2.9.0 起支持**,需要 Meta Cloud API 凭据;当前运行 v2.9.0 正式版 - **LibreDesk AI 仍是 beta**,建议低流量验证 - 旧栈(Chatwoot/bridge/Twenty :3000)保持运行,可并行对照,互不影响 diff --git a/docker-compose.yml b/docker-compose.yml index 3ac9f02..b40f602 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -48,7 +48,7 @@ services: # ---------------------------------------------------------------- LibreDesk libredesk: - image: ${LIBREDESK_IMAGE:-libredesk/libredesk:v2.9.0-rc.10} + image: ${LIBREDESK_IMAGE:-libredesk/libredesk:v2.9.0} container_name: crmnew-libredesk restart: unless-stopped ports: diff --git a/docs/api-mapping.md b/docs/api-mapping.md index 33489fb..2a80004 100644 --- a/docs/api-mapping.md +++ b/docs/api-mapping.md @@ -1,6 +1,6 @@ # Chatwoot → LibreDesk 对照表 -迁移旧 `bridge` 时按此表逐项替换。字段/事件均已对照 LibreDesk 源码与文档核对(v2.8.0 / v2.9.0-rc)。 +迁移旧 `bridge` 时按此表逐项替换。字段/事件均已对照 LibreDesk 源码与文档核对(v2.8.0 / v2.9.0)。 ## 1. HTTP API diff --git a/docs/architecture.md b/docs/architecture.md index 6759656..eaa1ac4 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -12,7 +12,7 @@ | 业务 RPC | Hyperf JSON-RPC over TCP | 商品推荐、订单、库存/ETA、会员 | — | | imap-id-proxy | Node 24 | 给 LibreDesk 的 IMAP 连接注入 ID 命令,兼容 163 | 仅本地 POC | -\* WhatsApp 需 LibreDesk v2.9 RC;当前镜像 `v2.9.0-rc.10`。 +\* WhatsApp 自 LibreDesk v2.9.0 起支持;当前镜像 `v2.9.0`。 ## 2. 数据流 diff --git a/docs/deploy-wangliang.md b/docs/deploy-wangliang.md index 8269dba..5a72096 100644 --- a/docs/deploy-wangliang.md +++ b/docs/deploy-wangliang.md @@ -11,7 +11,7 @@ | 组件 | 容器 | 宿主端口 | 状态 | |---|---|---|---| -| LibreDesk v2.9.0-rc.10(渠道/工作台) | `crmnew-libredesk` | `9000` | ✅ healthy | +| LibreDesk v2.9.0(渠道/工作台) | `crmnew-libredesk` | `9000` | ✅ healthy | | Twenty CRM v2.30.1(server) | `crmnew-twenty-server` | `3100` | ✅ healthy | | Twenty worker | `crmnew-twenty-worker` | — | ✅ running | | bridge(业务工具 / RPC 集成) | `crmnew-bridge` | `4100` | ✅ healthy | @@ -42,7 +42,7 @@ grep '^TOOLS_SHARED_KEY=' .env # bridge 工具密钥 | 项 | 仓库默认 | 本环境 | 原因 | |---|---|---|---| -| `LIBREDESK_IMAGE` | `libredesk/libredesk:v2.9.0-rc.10` | `libredesk/libredesk:v2.9.0-rc.10-**arm64**` | 宿主是 ARM64,`v2.9.0-rc.10` 只有 amd64;官方另发了 `-arm64` 同版本 tag,实测原生 `linux/arm64` 运行 | +| `LIBREDESK_IMAGE` | `libredesk/libredesk:v2.9.0` | `libredesk/libredesk:v2.9.0-**arm64**` | 宿主是 ARM64;`v2.9.0-arm64` 的 digest 与多架构 `v2.9.0` 的 arm64 子镜像一致,显式 arm64 tag 沿用原部署习惯 | | `LIBREDESK_BASE_URL` | `http://localhost:9000` | `https://wangliang-crm.dev.gaia888.com` | 走宿主 nginx 的 HTTPS | | `TWENTY_SERVER_URL` | `http://192.168.31.61:3100` | `https://wangliang-twenty.dev.gaia888.com` | 前端 `REACT_APP_SERVER_BASE_URL` 用的就是它(已核对页面内联配置) | | `RECOMMEND_URL` | 测试服地址 | `jsonrpc://wangliang-dev:9503` | 用 **本工作区** 的 product-service | @@ -389,3 +389,11 @@ RAG_PG_URL="postgres://crmnew:${PW}@127.0.0.1:5440/bridge" node scripts/kb-versi - agent1/agent2 的**邮件通知已关闭**(assignment/new_reply/SLA 等 email 渠道全部 `false`),仅保留站内通知。 - 原因:`agent1@yehwang.com` / `agent2@yehwang.com` 在 `yehwang.com` 邮件服务器上被 550 拒绝,导致“New conversation assigned to you”退信。 - OTP 邮件不受影响,bridge OTP 已实测可发送并送达 163 收件箱。 + +## 11. 2026-10-26 LibreDesk 升级记录(rc.10 → v2.9.0) + +- 目标:`libredesk/libredesk:v2.9.0`(2026-10-22 正式版);本环境用 `libredesk/libredesk:v2.9.0-arm64`(digest 与多架构 `v2.9.0` 的 arm64 子镜像一致)。 +- 升级前:`pg_dump -Fc libredesk` → `backups/libredesk-before-v2.9.0-2026-10-26.dump`(已验证可 `pg_restore -l`);记录旧镜像 image ID `sha256:03df145b…`(rc.10-arm64)。 +- 变更范围:rc.10 → v2.9.0 无 DB migration、无 config 变更(仅 UI / 邮件模板 / widget / campaign 修复),数据库 schema 保持 57 张表。 +- 操作:改 `.env` 的 `LIBREDESK_IMAGE` → `docker compose up -d --force-recreate libredesk`(启动链自动 `--install --upgrade`,预期打印 `no upgrades to run`)。 +- 回滚:切回 `libredesk/libredesk:v2.9.0-rc.10-arm64` 并重建;无 schema 变更,不需要恢复数据库。 diff --git a/docs/libredesk-setup.md b/docs/libredesk-setup.md index 201804c..4917b7d 100644 --- a/docs/libredesk-setup.md +++ b/docs/libredesk-setup.md @@ -198,10 +198,10 @@ const payload = { 接完后旧桥的 `bridge/mail/`(IMAP 轮询 + 自动回复)可以退役;邮件摘要改为定时调 LibreDesk 报表 API。 -## 8. WhatsApp(当前 v2.9.0-rc.10 已可用) +## 8. WhatsApp(v2.9.0 已可用) -> **版本现状**:本套已运行 `v2.9.0-rc.10`,`channels` 枚举为 `email / livechat / whatsapp`,`whatsapp_templates` 表已就绪。 -> RC 属于预发布版本,生产使用前评估稳定性;回滚见 README「回滚到稳定版」。 +> **版本现状**:本套已运行 `v2.9.0` 正式版(2026-10-22 发布,2026-10-26 从 rc.10 升级),`channels` 枚举为 `email / livechat / whatsapp`,`whatsapp_templates` 表已就绪。 +> 升级前已 `pg_dump` 备份;本次无 DB migration,回滚见 `docs/runbook.md`「回滚」。 1. Meta 侧准备:Business Account、WABA ID、Phone Number ID、Permanent Access Token、App Secret、Webhook Verify Token 2. `Admin → Inboxes → New inbox → WhatsApp`,填上述凭据 @@ -209,7 +209,7 @@ const payload = { 4. 模板:`whatsapp_templates` 表 + 后台模板管理;24 小时窗口外的主动消息必须用已审核模板 5. **AI 对 WhatsApp 的支持文档未覆盖**(文档只写 email + live chat),需实测 assistant 是否在 WhatsApp 会话触发 -切换镜像:`.env` 里改 `LIBREDESK_IMAGE=libredesk/libredesk:v2.9.0-rc.9`(若 Docker Hub 无该 tag,则按官方文档从 `v2.9.0-rc.9` 源码构建)。 +切换镜像:`.env` 里改 `LIBREDESK_IMAGE` 后 `docker compose up -d --force-recreate libredesk`;升级前先 `pg_dump` 备份,并记录当前镜像 digest 便于回滚。 ## 9. 验收清单 diff --git a/docs/migration-plan.md b/docs/migration-plan.md index afc0083..287ff0b 100644 --- a/docs/migration-plan.md +++ b/docs/migration-plan.md @@ -91,11 +91,11 @@ | RAG 降级 | EU 语种召回下降 | 迁移后用 golden 问题抽检,必要时保留旧 RAG 服务 | | 单工作区 | 多站点只能多 inbox,联系人共享 | 用 JWT 的 site 属性 + 隐私口径评审 | -## 7. 版本核实(2026-10-21) +## 7. 版本核实(2026-10-26 更新) -- LibreDesk 稳定版:**v2.8.0**(2026-08-22),渠道 `email/livechat` -- 预发布:**v2.9.0-rc.10**(2026-10-21),新增 WhatsApp(Meta Cloud API + 模板) -- 本套环境已切到 rc.10;稳定版 v2.8.0 仍无 WhatsApp;官方文档暂无 WhatsApp 配置页(仅 release notes / 权限表提及) +- LibreDesk 稳定版:**v2.9.0**(2026-10-22),渠道 `email/livechat/whatsapp` +- 升级前为预发布 **v2.9.0-rc.10**(2026-10-21);rc.10 → v2.9.0 无 DB migration、无 config 变更 +- 本套环境已于 2026-10-26 升到 v2.9.0(升级前 `pg_dump` 备份,回滚只需切回 rc.10 镜像) - AI Assistant / AI tools / verified contact 为 v2.8 已有能力,标注 beta diff --git a/docs/runbook.md b/docs/runbook.md index 50abda0..7f9d70e 100644 --- a/docs/runbook.md +++ b/docs/runbook.md @@ -160,20 +160,29 @@ docker run --rm -v crm-new_twenty-data:/data -v "$PWD/backups":/backup alpine \ # 1. 备份 docker exec crmnew-postgres pg_dump -U crmnew -d libredesk > backups/libredesk-before-upgrade.sql -# 2. 修改 .env 的 LIBREDESK_IMAGE 后重建 +# 2. 记录升级前镜像(回滚基线;tag 可能被上游重推,务必留 digest/image ID) +docker image inspect libredesk/libredesk:<旧 tag> --format '{{.Id}} {{.RepoDigests}}' + +# 3. 修改 .env 的 LIBREDESK_IMAGE 后重建 docker compose up -d --force-recreate libredesk -# 3. 容器启动命令会自动执行 --upgrade;确认日志 +# 4. 容器启动命令会自动执行 --upgrade;确认日志 docker compose logs --tail=50 libredesk ``` +> 2026-10-26 升级记录(rc.10 → v2.9.0,无 DB migration / 无 config 变更): +> 本机 amd64 升级前 image ID `sha256:abdc41e7…` → 升级后 `sha256:e7aa3bac…`; +> 测试服 arm64 升级前 image ID `sha256:03df145b…` → 升级后 `sha256:147d0081…`。 + ## 回滚 ```bash -# 切回稳定版 -sed -i 's#^LIBREDESK_IMAGE=.*#LIBREDESK_IMAGE=libredesk/libredesk:latest#' .env +# 本次 rc.10 → v2.9.0 无 schema 变更:切回 tag 即可,无需恢复数据库。 +# 若要精确回滚,先确认本地仍缓存升级前镜像(image ID 见上方升级记录),再切 tag: +sed -i 's#^LIBREDESK_IMAGE=.*#LIBREDESK_IMAGE=libredesk/libredesk:v2.9.0-rc.10#' .env docker compose up -d --force-recreate libredesk -# 跨大版本回滚数据库需恢复备份(升级前 pg_dump) + +# 跨大版本回滚(有 migration 时)才需要按升级前 pg_dump 恢复数据库 ``` ## 端口冲突排查