Rocket.Chat 7.x 升级到 8.5.x:一次 Docker 与 MongoDB 联动迁移实践
Rocket.Chat 从 7.x 升级到 8.x,看起来像一次普通的容器镜像升级,但在实际环境中,真正需要处理的不只是 Rocket.Chat 本身。 这次升级同时涉及: 整个过程最重要的并不是“把新镜像跑起来”,而是保证: 任何一个阶段出现问题,都能够明确知道数据是否安全、问题出在哪里,以及能否回退。 一、为什么不能只修改镜像版本然后 docker compose up 旧环境采用的是典型的 Docker Compose 部署: MongoDB 使用的是较早时期常见的第三方容器镜像。 升级到 Rocket.Chat 8.x 后,数据库环境也需要同步调整。新的目标结构变成: 这带来了一个非常重要的问题: 旧 MongoDB 数据目录不能简单地直接挂载到新的 MongoDB 8.2 容器里。 MongoDB 的数据目录内部包含: 跨多个 MongoDB 大版本直接复用底层数据目录,风险远高于普通容器镜像升级。 因此这次采用的不是“原地替换数据库镜像”,而是: 也就是说,迁移的是逻辑数据,而不是直接让 MongoDB 8.2 接管 MongoDB 7 的物理文件。 二、升级前先建立可验证的数据库基线 在修改任何东西之前,先记录数据库当前状态。 例如检查: 这里最重要的不是某一个具体数字,而是建立一个可以在迁移结束后重新比对的基线。 例如: 迁移后重新执行相同统计。 …