Preservación de sesiones de usuario al migrar entre hosts

Las cookies de sesión se cifran utilizando una clave secreta generada aleatoriamente que, de forma predeterminada, se almacena en Redis. Los datos de Redis no se incluyen en las copias de seguridad, por lo que se genera una nueva clave secreta al restaurar el sitio en un servidor nuevo.

Puedes establecer manualmente la clave secreta utilizando la variable de entorno DISCOURSE_SECRET_KEY_BASE en tu archivo app.yml. Así que podrías probar algo como esto para preservar las sesiones:

  1. En tu servidor existente, entra en la consola y encuentra la clave secreta en Redis:

    pry(main)> GlobalSetting.safe_secret_key_base
    => "5fb9dc98be368599e0a..."
    
  2. Añade DISCOURSE_SECRET_KEY_BASE a la sección env: de tu archivo app.yml en el servidor antiguo, utilizando el valor que encontraste en el paso (1), y vuelve a compilar la aplicación. En teoría, si todo sale bien, Discourse ahora debería usar el valor del archivo app.yml y las sesiones de usuario persistirán. Puedes verificar que se está utilizando la variable de entorno ejecutando:

    GlobalSetting.secret_key_base
    
  3. Asegúrate de que el archivo app.yml en el nuevo servidor tenga la misma SECRET_KEY_BASE. Cuando restaures la copia de seguridad, las sesiones de usuario deberían persistir.

No he probado este flujo, así que si planeas usarlo en un foro de producción, asegúrate de probarlo primero.

Nota al margen: absolutamente no debes compartir la clave secreta entre múltiples instancias de Discourse. El conocimiento de la clave secreta permitiría a alguien descifrar y modificar su cookie de sesión en un sitio, lo que podría tener consecuencias de seguridad muy graves.