セルフホスティングユーザー向け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 ルートを削除します(1日10万回の上限に達したくないためです!)。
  3. ディスク領域を確保するために、古い pg18 データを削除します:
rm -fr /var/discourse/shared/data/postgres_data_old/

完了です! :partying_face: :clinking_beer_mugs:

「いいね!」 7