Discourse インスタンスを別のサーバーに移動する

ここに遭遇したマイグレーションのエッジケースを追加しておきます。誰かの助けになれば幸いです。

スタンドアロンの Discourse インスタンスを新しい VPS に移行する際、Let’s Encrypt/SSL のエッジケースに遭遇しました。そのため、このガイドに従って作業している他の人にとって有用な場合に備えて、正確な診断と復旧手順をまとめました。

私の場合、app 内の nginx が起動しませんでした。その原因は、/var/discourse/shared/standalone/ssl/ 内の両方の .cer ファイルがゼロバイトのファイルになってしまったことです:

PEM_read_bio_X509_AUX() failed

再構築により証明書の発行が再度試みられ、何度か試行した結果、Let’s Encrypt の証明書発行レート制限に達してしまいました。古いサーバーからまだ有効な証明書ファイルをコピーするだけでは不十分でした。なぜなら、app を起動すると、それらのファイルが再びゼロバイトのファイルに置き換えられてしまうからです。

最終的に問題を解決したのは、app を停止し、古いサーバーから正常に動作している /var/discourse/shared/standalone/ssl/ ディレクトリと、対応する /var/discourse/shared/standalone/letsencrypt/ の状態の両方をコピーし、その後コンテナを再起動することでした。

完全な手順を以下に文書化しました:

これらは、この特定の移行に関する診断/復旧のメモであり、公式の移行ガイドや HTTPS ドキュメントの代わりとなるものではありません。

また、関連するゼロバイトの .cer ファイル障害モードを扱った古い Meta トピックもあります: