Problemas con copias de seguridad multisitio en S3--copias de seguridad almacenadas en la raíz

Tengo una instancia multisitio en AWS EC2. Tengo las copias de seguridad configuradas de la siguiente manera:

DISCOURSE_S3_BACKUP_BUCKET: lc-sitename
DISCOURSE_S3_SECRET_ACCESS_KEY: secret-key
DISCOURSE_S3_ACCESS_KEY_ID: key-id
DISCOURSE_BACKUP_LOCATION: s3

Las copias de seguridad para las instancias multisitio se están almacenando en la raíz del bucket, pero no aparecen en la lista en la interfaz de usuario. Las copias de seguridad para el sitio principal se almacenan bajo default como se esperaba. Esto significa que las copias de seguridad son invisibles para la restauración y no se podan según la configuración.

La sección multisitio se ve así:

        site:
           adapter: postgresql
           database: site
           pool: 25
           timeout: 5000
           host: data
           password: secret
           host_names:
             - community.site.org

¿Podría ser que si DISCOURE_USE_S3 no está configurado, las copias de seguridad terminan en el lugar equivocado? (Intenté configurar use_s3 en discourse.conf, pero no reinicié unicorn, sino que ejecuté una copia de seguridad desde la línea de comandos y aún así la colocó en la raíz, no en el nombre del sub-sitio).

Hubo algún problema con las cargas en S3 (quizás una mala configuración del bucket), por lo que S3 es solo para copias de seguridad.

1 me gusta

Pasé otra hora y media en esto.

Uno de los sitios multisitio está colocando correctamente sus subidas copias de seguridad en el directorio correcto, pero dos no lo hacen.

Los que no van al lugar correcto tenían bases de datos restauradas de una instancia de un solo sitio, por lo que supongo que hay algo en la base de datos que está forzando a la copia de seguridad a ir a la raíz de la carpeta de copias de seguridad en lugar del nombre del sitio (o el predeterminado para el sitio predeterminado).

@gerhard, lamento molestarte, pero ¿te importaría echarle un vistazo rápido para ver si hay algo obvio y tonto que estoy pasando por alto?

Sí, el almacenamiento de cargas es por diseño, si una copia de seguridad era de una instancia de sitio único, se restaura de manera diferente.

      was_multisite = BackupMetadata.value_for("multisite") == "t"
      upload_path = "/#{Discourse.store.upload_path}/"
      uploads_folder = was_multisite ? "/" : upload_path

¿Pero no se trataba de dónde se guardaban las copias de seguridad, no de dónde se restauraban las imágenes?

1 me gusta

Sí.

Eso es correcto.

Pero, ¡ups!

Como dije (correctamente) antes, esta instancia está (¿actualmente?) usando S3 solo para copias de seguridad y no para subidas.

Son las copias de seguridad de 2 de los 3 sub-sitios las que se están colocando en la raíz del bucket de copias de seguridad. El sitio principal las está enviando a default como se esperaba, y uno de los sitios multisitio las está enviando al directorio sitename.

1 me gusta

Hmm, ese es un comportamiento extraño. ¿Te refieres a las copias de seguridad que se suben desde el navegador o a las copias de seguridad creadas por el sistema?

No veo ninguna razón por la que las copias de seguridad creadas por el sistema terminen en el lugar equivocado. El código parece bastante sencillo.

s3_helper se configura con el bucket y el nombre multisitio correctos.

Me refiero a que al hacer una copia de seguridad desde la interfaz web o la tarea rake para dos de los 3 hosts multisitio (que ambos fueron migrados desde otro servidor) se sube la copia de seguridad a la raíz del bucket s3 de copias de seguridad en lugar de a nombre-del-sitio/nombre-de-la-copia-de-seguridad.

También me parece extraño.

Intentaré añadir algunos puts a esas funciones para ver si puedo rastrearlo.

Creo que añadí puts a la source_path y tenía la ruta completa correcta en el sistema operativo, pero cuando se sube a S3, el nombre del sitio ya no está en la ruta.

Lo miraré más de cerca la semana que viene. Las copias de seguridad están ahí, solo que no están donde Discourse las encontrará.