アップグレードしてしまい、一部の設定が失われ/壊れています

完全な開示となりますが、自社ホスト型の Discourse インストールに対しては、非常に長い間、手動でのメンテナンスを行っていません。また、初期設定は別の方が行いました。

SendGrid が基本認証から API キーへの移行を要求したため、SMTP 認証情報の変更が必要となりました。

以下のドキュメントを見つけました:Discourse 向け推奨メールプロバイダー

そこには次のように書かれています:

現在のメールサービスを変更するには、./discourse-setup も実行してください(これにより、再構築が行われる間、数分間フォーラムがオフラインになります)。

このコマンドを実行し、期待通りに質問に回答したところ、標準出力に約 2,000 行の出力が流れ、最後に以下で終わりました:

Upgrade Complete
----------------
Optimizer statistics are not transferred by pg_upgrade so,
once you start the new server, consider running:
    ./analyze_new_cluster.sh

Running this script will delete the old cluster's data files:
    ./delete_old_cluster.sh
-------------------------------------------------------------------------------------
UPGRADE OF POSTGRES COMPLETE

Old 10 database is stored at /shared/postgres_data_old

To complete the upgrade, rebuild again using:

./launcher rebuild app
-------------------------------------------------------------------------------------

cfd4df26701b4b4cd4a4202f30a9c8165a1ba609c921bffc25f250f52fee6cbe

実は、これで何か「アップグレード」が行われるとは思っていませんでした。SMTP 認証情報の変更だけをしたかったのです。しかし、サイトが自動的に復旧しなかったため、指示に従って「アップグレードを完了させる」ために以下を実行しました:

./launcher rebuild app

これにより、標準出力にさらに約 8,000 行の出力が流れ、最終的にサイトは復旧しましたが、外観が以前と異なっています:

  • ロゴが欠落し、「Discourse」のロゴに置き換わっています。
  • ユーザーのアバター画像が壊れていました。やがてこれらは自動的に復旧しましたが、
  • 投稿内の画像やカテゴリのロゴは現在も壊れたままです。./discourse/share ディレクトリ内および URL が存在を期待している S3 バケット内を確認しましたが、該当するファイル名を持つ画像は見当たりません。
  • 「最新」ページから非表示にしていた「サポート」カテゴリの投稿が、再び表示されるようになりました。
  • 「カテゴリ」ページから「サポート」カテゴリ自体が消えています。
  • 「カテゴリ」ページが 2 列構成になり、左側にカテゴリ、右側に「最新」が表示されるようになりました。以前はカテゴリのリストのみだったと思います。
  • + New Topic ボタン内の + の色が、白からグレーに変わっています。

この時点で、何らかの設定が失われたのではないかと疑っています。ただし、すべての投稿は無事残っています。Discourse が(どのバージョンからかは不明ですが、おそらく多数のバージョンを跨いで)自身をアップグレードし、それによってデフォルト設定、CSS、テンプレートなどが変更され、上記の問題が発生したのではないかと考えています。

ソースコードを確認したところ、現在のバージョンは 2.6.0.beta6 で、これはわずか 7 日前にリリースされたもののようです。

そこで質問です:

  • SMTP 認証情報のような単純な設定変更を行うために、このようにソフトウェアを完全にアップグレードする必要があるのは普通のことでしょうか?
  • 全体のソフトウェアをアップグレードせずに、設定を変更したりセキュリティ更新を適用したりする方法はありますか?
  • 画像はどこへ行ったのでしょうか?あるいは、なぜ URL が変更され、アクセスできなくなったのでしょうか?
  • この出来事以降に投稿された新しいポストを失うことなく、ロールバックする方法はありますか?以前のバージョンが何だったかもわかりません。S3 には Discourse のバックアップ(gzipped 形式の SQL ダンプ)はあります。
  • + New Topic ボタンの色や、非表示/表示状態の「サポート」カテゴリなど、設定やカスタマイズをすべて手動でやり直す必要があるのでしょうか?

Discourse がホストされている EC2 インスタンスの EBS スナップショットを定期的に取得していたつもりでしたが、実際にはそうではありませんでした。現在はスナップショットを有効化し、必要に応じて将来はそれでロールバックできるようにしました。

よろしくお願いいたします。

はい。新しい SMTP 設定を適用するために、コンテナを破棄して再起動することも可能でしたが、その方法を慎重に確認する必要がありました。

いいえ。セキュリティ更新はソフトウェア全体の一部です。安定版ブランチを実行することは可能ですが、数バージョン前の状態だったようなので、少なくとも問題の大半は依然として発生していたでしょう。

それは不明です。アップグレードで画像が失われることは通常ありません。

いいえ。[quote=“mrmachine, post:1, topic:171465”]
「+ 新しいトピック」の色や、表示/非表示の「サポート」カテゴリなどの設定やカスタマイズをすべて手動で確認して修正する必要があるのでしょうか?
[/quote]

はい。数年前のバージョンを実行されていたようですね。それ以来、数十人のプログラマーが何千時間もの時間を費やして開発を進めてきました。その過程で、一部のカスタマイズが機能しなくなる変更が行われました。

ただし、最後のバックアップ以降の投稿を失わずにロールバックすることは依然としてできません。

ベータリリースのたびにアップグレードするか、次の安定版リリース時に安定版ブランチに切り替えるべきです。

この件についてフォローアップです。以前はアップロードされた画像を S3 に保存しており、リンク切れを避けるためにリモート画像をダウンロードしない設定にしていました。これが関係するかどうかはわかりませんが、重要なのは画像が S3 に保存され、Discourse 内で S3 の URL を参照するべきだったという点です。

アップグレード後、多くの画像が表示されなくなりました。カテゴリのロゴや投稿内のユーザーアップロード画像などです。S3 を確認すると、参照されていたファイル名が存在しませんでした。

幸いにも、S3 でバージョン管理が有効になっており、S3 コンソールでアップグレード中またはアップグレード後に多くの参照画像が削除されていたことが確認できました。

そこで、Stack Overflow で見つけた Python スクリプト(https://stackoverflow.com/a/54613767/2829685)を改編し、S3 バケット内のすべてのオブジェクトバージョンを反復処理して、アップグレード日付以降の last_modified タイムスタンプを持つファイルの現在のバージョンから「削除マーカー」を削除する処理を行いました。

この処理は大半の日中を要し、約 45,000 枚の画像を復元しました。Discourse は各画像に対して多数のサムネイルを作成しているようです。

現在、カテゴリのロゴや投稿内のユーザーアップロード画像は元通り表示されるようになりました。しかし、アップグレードプロセスの一部としてこれほど多くの画像が S3 から削除された理由については全くわかりません。

これは Discourse のアップグレードプロセスにおける非常に危険なバグではないでしょうか?ただし、非常に古いバージョンからのアップグレードだったため、すでに修正されている可能性もあります。