Zulip 升级失败后如何回滚到之前的版本
【免费下载链接】zulipZulip server and web application. Open-source team chat that helps teams stay productive and focused.项目地址: https://gitcode.com/GitHub_Trending/zu/zulip
在自托管的 Zulip 服务器上执行upgrade-zulip或upgrade-zulip-from-git升级时,升级可能中途失败,或者新版本虽然启动完成但行为异常。这时你需要把服务切回升级前的版本。本文针对用标准安装方式部署(非 Docker)的 Zulip 服务器,利用部署目录与符号链接机制完成回滚,并给出回滚后的验证方式;Docker 部署的升级流程在 升级文档 中被单独引导至 Docker 章节,不适用本文步骤。
回滚机制:部署目录与符号链接
Zulip 的升级过程会在/home/zulip/deployments/下创建一个新部署,其中包含 Zulip 服务器代码的完整副本,并在升级过程中移动/home/zulip/deployments/{current,last,next}这三个符号链接(upgrade.md)。也就是说,旧版本的完整代码树一直保留在/home/zulip/deployments/中,回滚只需要重新启动对应目录里的版本。
注意适用范围:文档明确该回滚流程面向 minor release(例如从9.4回滚到9.3)。如果要降级到更早的 major release,需要先回滚数据库迁移,那是一个更复杂的过程。
先确认升级在哪里失败
升级脚本是幂等的(idempotent),解决问题后再次执行没有危害。因此在决定回滚之前,先看一下日志判断能否快速修复:
- 升级脚本的全部输出记录在
/var/log/zulip/upgrade.log; - Zulip 服务器的 Internal Server Error 记录在
/var/log/zulip/errors.log。
文档列出的最常见原因有两类:
- 网络问题(服务器没有稳定的互联网访问,或没有配置代理)。修复网络后直接重跑升级即可。
- 使用
upgrade-zulip-from-git时,内存刚好达到运行 Zulip 最低要求的机器容易在升级过程中出现 out-of-memory,通常失败的步骤是tools/webpack。可以先停掉 Zulip 服务释放内存再跑升级:
./scripts/stop-server(在/home/zulip/deployments/current/目录下执行,完整路径见 upgrade.md 中给出的scripts/stop-server用法。)
如果你能定位并修复原因,直接重试升级;如果短时间内无法定位可修复的原因,或者新版本已经启动但你判断它工作不正常,就执行下面的回滚。
执行回滚
回滚到上一个版本(即升级前的版本),运行:
/home/zulip/deployments/last/scripts/restart-server回滚到更早的某个版本时,把路径换成对应部署目录:
/home/zulip/deployments/DATE/scripts/restart-server其中DATE是/home/zulip/deployments/下实际存在的部署目录名,查看该目录的目录列表即可找到。
restart-server会停止当前正在运行的 Zulip 服务器,并启动你指定部署路径对应的版本(upgrade.md)。副作用是服务会停止并短暂不可用,然后以旧版本重新拉起。从 restart-server 脚本源码 可以看到,它还会在启动前执行./manage.py check --database default做语法和数据库检查,并自动把current、last符号链接指向你回滚的版本;脚本要求以zulip用户身份运行,以root运行时会自动切换到zulip用户。
验证回滚结果
- 脚本成功跑完会输出
Zulip restarted successfully!(见 restart-server 末尾)。 - 用
supervisorctl status检查各服务状态;全部为RUNNING表示正常。如果出现非RUNNING状态、或某服务 uptime 不足 5 秒(说明它在启动后立即崩溃并反复重启),先查看/var/log/zulip/errors.log;如果那里没有相关日志,再查该服务在/etc/supervisor/conf.d/zulip.conf中配置的stdout_logfile(日志只有在服务完全启动后才会进入errors.log,这一点见 troubleshooting.md)。 - 确认当前指向的版本:检查
/home/zulip/deployments/current/version.py中的ZULIP_VERSION,它反映回滚后正在运行的版本(方法来自 modify.md)。 - 浏览器访问 Zulip 服务器 URL,确认页面和收发消息恢复正常。
限制与后续操作
- 该回滚只适合 minor release 之间的降级;跨 major release 降级需要先回滚数据库迁移,文档将其描述为更复杂的过程。
- 回滚本身不修复问题。修复失败原因后,可以直接重跑升级脚本(幂等,重试无副作用)。
- 如果回滚后旧版本也无法正常启动,或者升级前的部署目录已经缺失,文档提供的兜底路径是恢复到完整备份:升级前若已用
/home/zulip/deployments/current/manage.py backup生成过备份,可用/home/zulip/deployments/current/scripts/setup/restore-backup /path/to/backup恢复(见 export-and-import.md)。
【免费下载链接】zulipZulip server and web application. Open-source team chat that helps teams stay productive and focused.项目地址: https://gitcode.com/GitHub_Trending/zu/zulip
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考