面向自托管用户的 PostgreSQL 18 更新

我刚刚完成了 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:维护与备份

  1. 编辑 Cloudflare 维护页面,显示“系统维护更新,预计需要 15-20 分钟”(实际可能不需要这么久,但为了安全起见最好预留时间),并设置约 30 秒的重新加载计时器。开启 Cloudflare Worker 路由以显示维护页面。

  1. 通过命令行触发备份:
cd /var/discourse
./launcher enter web_only
discourse backup
exit
  1. 登录 Cloudflare R2 控制台,检查备份文件夹以确认备份文件已成功上传

步骤 3:安全关闭

  1. 首先停止 Web 容器以终止所有活动连接,然后停止数据库容器:
cd /var/discourse
./launcher stop web_only
./launcher stop data
  1. 验证 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:优化与清理

  1. 生成缺失的 pg18 表统计信息,否则论坛速度会比平时慢:
docker exec -u postgres data /usr/lib/postgresql/18/bin/vacuumdb -d discourse --analyze-in-stages
  1. 测试论坛以确保一切正常运行 - 如果你设置了重新加载计时器,此时维护页面应该不再加载了。
  2. 移除指向维护页面的 Cloudflare Worker 路由(我们不想触及每日 100,000 次的限制!)
  3. 删除旧的 pg18 数据以回收磁盘空间:
rm -fr /var/discourse/shared/data/postgres_data_old/

完成! :partying_face: :clinking_beer_mugs:

7 个赞