news 2026/9/14 6:25:37

Zulip 升级失败后如何回滚到之前的版本

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Zulip 升级失败后如何回滚到之前的版本

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-zulipupgrade-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

文档列出的最常见原因有两类:

  1. 网络问题(服务器没有稳定的互联网访问,或没有配置代理)。修复网络后直接重跑升级即可。
  2. 使用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做语法和数据库检查,并自动把currentlast符号链接指向你回滚的版本;脚本要求以zulip用户身份运行,以root运行时会自动切换到zulip用户。

验证回滚结果

  1. 脚本成功跑完会输出Zulip restarted successfully!(见 restart-server 末尾)。
  2. supervisorctl status检查各服务状态;全部为RUNNING表示正常。如果出现非RUNNING状态、或某服务 uptime 不足 5 秒(说明它在启动后立即崩溃并反复重启),先查看/var/log/zulip/errors.log;如果那里没有相关日志,再查该服务在/etc/supervisor/conf.d/zulip.conf中配置的stdout_logfile(日志只有在服务完全启动后才会进入errors.log,这一点见 troubleshooting.md)。
  3. 确认当前指向的版本:检查/home/zulip/deployments/current/version.py中的ZULIP_VERSION,它反映回滚后正在运行的版本(方法来自 modify.md)。
  4. 浏览器访问 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 6:24:07

自然研学活动设计:色彩与气味的感官教育实践

1. 六亩半田埂上的研学构想在乌鲁木齐城郊一片六亩半的农田边缘,我萌生了做一场特殊研学活动的念头。这片田地不算大,但足够让孩子们奔跑嬉戏;不算规整,却正好保留着最自然的农耕肌理。每当春风吹过,田埂上的野花就摇曳…

作者头像 李华
网站建设 2026/9/14 6:23:57

OpenSpec+Superpowers实现契约驱动开发工作流

1. 这不是又一个“AI工作流”概念秀,而是真正能落地的工程化协作范式 OpenSpec Superpowers 搭建 SDDTDD 工作流——光看标题,很多人第一反应是:“又是套新词包装的老东西?”但如果你真花30分钟跑通这个组合,会发现它…

作者头像 李华
网站建设 2026/9/14 6:22:26

Qt图书管理系统课设全解析:界面分层、SQLite事务与QCustomPlot绘图实战

简介:这是一份面向高校计算机相关专业课程设计或毕业设计的图书管理系统完整方案,基于Qt框架与SQL数据库实现,适合具备C与数据库基础、希望快速搭建可演示项目或系统学习桌面应用开发的学习者。压缩包共一百三十二个文件,约六点六…

作者头像 李华
网站建设 2026/9/14 6:22:01

空气静压止推轴承压力计算程序的Matlab实现

简介:基于Matlab开发的空气静压止推轴承压力计算程序,面向机械设计、精密制造及航空航天相关专业的学生与工程师,可完成止推轴承气膜压力分布求解与可视化分析。压缩包共11个文件,以fig交互界面、m脚本、exe可执行程序为核心&…

作者头像 李华
网站建设 2026/9/14 6:20:41

多组学整合分析:技术原理与应用实践

1. 多组学时代的背景与意义基因组学、转录组学、蛋白组学和代谢组学等组学技术的快速发展,标志着生命科学研究进入了多组学时代。这个时代最显著的特征是数据维度的爆炸式增长和研究方法的系统性整合。传统单组学研究往往只能揭示生物过程的某个侧面,而多…

作者头像 李华