Skip to content

升级与回滚 ​

站跑起来之后,版本会更新。这篇讲怎么安全地升、以及升错了怎么退。不懂的词查 术语小词典(比如「迁移」「卷」)。

TL;DR ​

  • 只要你没改过本站代码,升级就是两行命令:拉新版本 → 重新 up。数据库结构会自动跟着升级,不用你动手。
  • 升级前先备份——这是铁律。回滚 = 旧代码 + 恢复备份。
  • 每个版本的升级注意项写在仓库根 CHANGELOG.md 里,升级前读一眼对应版本段。

正常升级(为什么能直接升) ​

本站的数据库结构变更走「迁移脚本」——每次结构变动都是一个带编号的脚本,起服务时自动执行没跑过的那些。因为升级只往前走(执行新脚本、数据自动前滚),所以只要你没亲手改过仓库代码,升级就是:

bash
git fetch --tags && git checkout <新版本tag>
docker compose -f docker/docker-compose.yml up -d --build   # 用镜像方式则是 pull 后 up -d

几个放心点:

  • 升级中途失败可以重跑:迁移是「幂等」的(跑多次和跑一次结果一样),不会把数据搞乱;
  • 你的设置不会丢:站点设定都存在数据库里,升级代码不动数据;
  • 看变更说明:每个版本的升级注意项(比如删了某个旧设置、需要手工处理的迁移)写在 CHANGELOG.md 对应版本段,动手前扫一眼。

回滚(升错了怎么办) ​

  • 应用层回滚:git checkout <旧tag> && docker compose up -d --build。⚠️ 注意:如果新版本已经执行了不兼容的数据库迁移,旧代码可能跑在新结构上会出错——所以重大升级前务必先备份,回滚 = 旧代码 + 恢复备份,两件事一起做。
  • 备份 / 恢复:scripts/backup.sh(数据库导出 + 附件卷打包 + 14 天轮转)与 scripts/restore.sh(先 --drill 演练确认归档完整,再 --force 实际恢复;恢复动作故意没做网页按钮,防误触)。
  • 站型包回滚:后台「站型包应用台账」能看每次应用的差异快照并回滚,和数据库回滚互相独立。
  • 升级演练:大版本升级前,用 scripts/upgrade_drill.py 把「备份 → 迁移前进 → 断言 → 回滚」整条路预演一遍,心里有底再上生产。

从 NexusPHP 迁过来(老站换壳) ​

如果你原来是 NexusPHP 站,想换到本站:apps/worker 里自带一个导入工具(np_import),只读你旧的 MySQL、分四个阶段把用户/种子/统计/举报搬过来,且可重复跑不会重复。用法和字段对照写在 apps/worker/src/bin/np_import.rs 文件头的注释里;搬完之后旧用户首次登录会强制改密码。建议先在备份上完整演练一次,再上生产。


词看不懂?→ 术语小词典