セッションクッキーは、ランダムに生成された秘密鍵を使用して暗号化されており、デフォルトでは Redis に保存されます。Redis のデータはバックアップに含まれないため、サイトを新しいサーバーに復元すると、新しい秘密鍵が再生成されます。
環境変数 DISCOURSE_SECRET_KEY_BASE を使用して、秘密鍵を手動で設定できます。これを app.yml ファイルに記述することで、セッションを維持しようとするには、以下のような手順を試してみてください。
-
既存のサーバーでコンソールに入り、Redis から秘密鍵を取得します。
pry(main)> GlobalSetting.safe_secret_key_base => "5fb9dc98be368599e0a..." -
旧サーバーの app.yml の
env:セクションに、(1) で取得した値を使用してDISCOURSE_SECRET_KEY_BASEを追加し、アプリを再ビルドします。理論的には、すべてが正常に進めば、Discourse は app.yml の値を使用するようになり、ユーザーセッションが維持されます。環境変数が使用されているか確認するには、以下を実行します。GlobalSetting.secret_key_base -
新サーバーの app.yml に同じ
SECRET_KEY_BASEが設定されていることを確認してください。バックアップを復元すると、ユーザーセッションが維持されるはずです。
この手順はテストしていないため、本番環境のフォーラムで使用する場合は、事前に必ずテストしてください!
補足:複数の Discourse インスタンス間で秘密鍵を共有しては 絶対にいけません。秘密鍵が入手されると、セッションクッキーを復号化・改ざんされる可能性があり、深刻なセキュリティ上の問題を引き起こす恐れがあります。