我刚刚完成了 PostgreSQL 18 的升级,无论是标准安装还是 双容器配置,整个过程都非常顺利,没有任何问题。再次感谢 @chrisr 和团队提供的简便教程。
对于位于 Cloudflare CDN 之后、并使用 R2 上传/备份存储桶的双容器配置,我使用的步骤如下:
步骤 1:磁盘清理
# 删除所有未使用的 Docker 数据
docker system prune -a -f
# 清除旧日志和 apt 缓存
journalctl --vacuum-time=2d
apt-get clean
apt-get autoremove -y
# 检查数据库大小
du -sh /var/discourse/shared/data/postgres_data*
# 检查新的可用空闲空间
df -h -x tmpfs -x devtmpfs
步骤 2:维护与备份
- 编辑 Cloudflare 维护页面,显示“系统维护更新,预计需要 15-20 分钟”(实际可能不需要这么久,但为了安全起见最好预留时间),并设置约 30 秒的重新加载计时器。开启 Cloudflare Worker 路由以显示维护页面。
- 通过命令行触发备份:
cd /var/discourse
./launcher enter web_only
discourse backup
exit
- 登录 Cloudflare R2 控制台,检查备份文件夹以确认备份文件已成功上传
步骤 3:安全关闭
- 首先停止 Web 容器以终止所有活动连接,然后停止数据库容器:
cd /var/discourse
./launcher stop web_only
./launcher stop data
- 验证 PostgreSQL 是否正常关闭:
tail -n 20 shared/data/log/var-log/postgres/current
步骤 4:升级重建
按以下顺序执行命令:
./launcher rebuild data # 转储、迁移并恢复 PostgreSQL 18
./launcher rebuild data # 重建数据库容器
./launcher rebuild web_only # 重建 Web 应用
步骤 5:优化与清理
- 生成缺失的 pg18 表统计信息,否则论坛速度会比平时慢:
docker exec -u postgres data /usr/lib/postgresql/18/bin/vacuumdb -d discourse --analyze-in-stages
- 测试论坛以确保一切正常运行 - 如果你设置了重新加载计时器,此时维护页面应该不再加载了。
- 移除指向维护页面的 Cloudflare Worker 路由(我们不想触及每日 100,000 次的限制!)
- 删除旧的 pg18 数据以回收磁盘空间:
rm -fr /var/discourse/shared/data/postgres_data_old/
完成!
![]()
