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

我刚刚完成了 PostgreSQL 18 的标准安装以及 双容器 配置,整个过程非常顺利,没有任何问题。再次感谢 @chrisr 和团队提供的简易指南。

对于配置在 Cloudflare CDN 后面并使用 R2 进行上传/备份的双容器环境,我使用的步骤如下:

第一步:磁盘清理

# 清除所有未使用的 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

第二步:维护与备份

  1. 编辑 Cloudflare 维护页面,显示“15-20 分钟系统维护更新”,并设置自动刷新计时器(可能不会花这么长时间,但以防万一!)。开启一个 Cloudflare Worker 路由以显示维护页面。

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

第三步:安全关机

  1. 首先停止 Web 容器以断开所有活动连接,然后停止数据库容器:
cd /var/discourse
./launcher stop web_only
./launcher stop data
  1. 验证 PostgreSQL 是否正常关闭:
tail -n 20 shared/data/log/var-log/postgres/current

第四步:升级重建

按以下顺序运行命令:

./launcher rebuild data # 导出、迁移并恢复 PostgreSQL 18
./launcher rebuild data # 重建数据库容器
./launcher rebuild web_only # 重建 Web 应用

第五步:优化与清理

  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:

3 个赞