ホスト間の移行時にユーザーセッションを維持する

セッションクッキーは、ランダムに生成された秘密鍵を使用して暗号化されており、デフォルトでは Redis に保存されます。Redis のデータはバックアップに含まれないため、サイトを新しいサーバーに復元すると、新しい秘密鍵が再生成されます。

環境変数 DISCOURSE_SECRET_KEY_BASE を使用して、秘密鍵を手動で設定できます。これを app.yml ファイルに記述することで、セッションを維持しようとするには、以下のような手順を試してみてください。

  1. 既存のサーバーでコンソールに入り、Redis から秘密鍵を取得します。

    pry(main)> GlobalSetting.safe_secret_key_base
    => "5fb9dc98be368599e0a..."
    
  2. 旧サーバーの app.yml の env: セクションに、(1) で取得した値を使用して DISCOURSE_SECRET_KEY_BASE を追加し、アプリを再ビルドします。理論的には、すべてが正常に進めば、Discourse は app.yml の値を使用するようになり、ユーザーセッションが維持されます。環境変数が使用されているか確認するには、以下を実行します。

    GlobalSetting.secret_key_base
    
  3. 新サーバーの app.yml に同じ SECRET_KEY_BASE が設定されていることを確認してください。バックアップを復元すると、ユーザーセッションが維持されるはずです。

この手順はテストしていないため、本番環境のフォーラムで使用する場合は、事前に必ずテストしてください!

補足:複数の Discourse インスタンス間で秘密鍵を共有しては 絶対にいけません。秘密鍵が入手されると、セッションクッキーを復号化・改ざんされる可能性があり、深刻なセキュリティ上の問題を引き起こす恐れがあります。