Deja de usar Amazon S3 para subir archivos

I want to stop using Amazon s3 for uploads.
I’ve not done a rake task like this so want to check things before I run on the live environment.
My plan is to use a clone of my live server to test the rake task uploads:migrate_from_s3.

Will this move the files from s3?
Or copy them to the local storage and leave the s3 files there until I manually delete them?

If it deletes them from s3 that will break the live forum and that would be bad!
thanks

2 Me gusta

I believe @vinothkannans can point you in the right direction here.

1 me gusta

Yes, it will remove the file from S3.

You should clone your S3 bucket too. And change the bucket name to newly cloned one in the site settings before testing the migration process.

Also I will recommend you to take a backup of S3 bucket before running the migration in live environment.

4 Me gusta

La tarea de rake uploads:migrate_from_s3 no aparece cuando entro en la aplicación y ejecuto rake -AT.

¿Existe un nuevo método para migrar las cargas desde S3 de nuevo a local?

2 Me gusta

¿Qué salida obtienes al ejecutar rake task uploads:migrate_from_s3?

rake ha terminado abruptamente

No se sabe cómo construir la tarea ‘uploads:migrate_from_s3’ (Consulta la lista de tareas disponibles con rake --tasks)

¿Quizás quisiste decir? uploads:migrate_to_s3

Se eliminó en una solicitud de extracción (Pull Request) de la comunidad. Puedes leer la justificación en:

4 Me gusta

Gracias por eso. No logro encontrar instrucciones o orientación sobre cómo se debe realizar esto manualmente.

1 me gusta

Puedes usar awscli para migrar manualmente todos tus archivos desde S3 a tu servidor,

cd /var/discourse
./launcher enter app
sudo apt install awscli
aws configure

Configura aws con tu ID y contraseña de S3. Luego,

cd public/uploads/default/
aws s3 sync s3://mybucketname/

Este comando descargará todos los archivos desde S3 a public/uploads/default/. Luego,

rake posts:rebake
exit
./launcher rebuild app
4 Me gusta

Primero intenté solucionar la migración fuera de S3, y después de completar el uso de mi propia migración como banco de pruebas para el código que estaba escribiendo, me informaron que había tomado un enfoque completamente incorrecto. Esta afirmación se vio respaldada por corrupción de datos en mi instancia (grande) que migré desde S3 a archivos locales. Hace relativamente poco, terminé reparando manualmente datos dañados en la base de datos, y no espero haber terminado de limpiar los efectos de mi intento.

Si fuera a iniciar hoy una migración desde S3 hacia mi propio almacenamiento, levantaría un contenedor de Minio junto a Discourse, usaría minio-client para copiar desde S3 a mi contenedor de Minio, reconfiguraría Discourse para la nueva ubicación “S3” de mi Minio local y luego ejecutaría posts:remap o volvería a hornear todos los posts para servir desde mi contenedor de Minio como si fuera “S3”.

Aquí hay un ejemplo de cómo debería funcionar posts:remap en este caso. Tengo la sensación de que existe un ejemplo mejor en algún lugar aquí, pero esto debería ser suficiente para empezar.

6 Me gusta

Así que seguí estas instrucciones y pude copiar mis archivos subidos, pero aún hay enlaces al servidor S3 en toda la instancia, incluso con las subidas a S3 desactivadas. Intenté un remapeo de Discourse, pero no fue efectivo; también probé rake posts:remap sin éxito, y posts:rebake tampoco funcionó.

Sin duda, configurar las subidas en S3 fue muy sencillo, pero volver atrás no ha sido tan fácil.

4 Me gusta

La migración desde S3 lleva mucho tiempo rota y aún no se ha solucionado. Sigue la publicación anterior de mcdanlj.

¿Qué salida obtienes al ejecutar el siguiente comando?

./launcher enter app
rails c
Upload.all.sample(20).pluck(:url)
3 Me gusta

He vuelto a enlazar las subidas individualmente, ya que el sitio no es extenso en este momento.
rake posts:missing_uploads fue útil para determinar si las había encontrado todas.

2 Me gusta

¿Estás seguro de que todas las URL se han reasignado correctamente? No solo para las imágenes, sino que también debes reasignar las URL para avatares, iconos, copias de seguridad, etc. Prueba el comando anterior y verifica si aparece una URL de S3 en la salida.

3 Me gusta

Las URLs han vuelto a ser relativas. Lamentablemente, para quienes lean este post en el futuro, no estoy seguro de qué combinación de tareas de Rake y reconstrucciones de la aplicación fue el secreto de mi éxito. Alguien más experto que yo en Discourse debería elaborar un tutorial infalible sobre cómo lograr esto.

El uso de awscli, como describió Pravi arriba, fue efectivo para copiar archivos desde S3.

6 Me gusta

Yo también estoy muy confundido.
Antes tenía dos buckets de S3 en momentos diferentes. Y rake posts:missing_uploads mostró que unos 500 posts tenían archivos de subida faltantes o estaban afectados.

Pero luego decidí copiar los activos de ambos buckets a un servidor Ubuntu local (en una instancia de GCP). Ahora, los archivos de subida faltantes aparecen en un rango de 1000.

Si ejecuto Upload.all.sample(1000).pluck(:url), obtengo rutas diferentes para las subidas: algunas en el servidor local, otras en el bucket1 y muy pocas en el bucket2.

¿Qué debería hacer ahora? (Actualmente tengo configuradas las subidas en el servidor local).

Mi sitio web es pequeño, con solo unos 1000 posts en 2 años.

1 me gusta

Tienes que volver a mapear la URL de S3. ¿Puedes publicar la salida de Upload.all.sample(1000).pluck(:url)?

1 me gusta

Gracias, ji.

Puedo intentarlo si eso tiene buenas posibilidades de éxito.

Edición: Lo hice, pero las imágenes de mis publicaciones desaparecieron por completo. Al pasar el cursor sobre el marcador de posición de la imagen, no aparecía ningún enlace URL. Antes, no solo se mostraba un pequeño icono de imagen, sino también la URL de la imagen.

Estoy mostrando unas 45 líneas de salida. No sé si quieres que pegue aquí las 1000 líneas de salida completas.

=> ["//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/7277b38e1d614b3d700f6266fa5b841a15e7c6ba.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/0c1f27b110ff476c636265b46d63f83c5bf575e9.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/a/a18dd8e63379c70e2a4014b0f6d85cf89ab12ed7.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/5/51798c75050206a784d9ae186cffb5c4558b1625.jpeg",
 "/uploads/default/original/2X/1/159ca83317895ddaefec42ee75c8748201f34d1f.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/1/1593a5f91ac7642180c9651544806d89342a4e24.jpeg",
 "/uploads/default/original/2X/f/fa7c701e58c198984707161364c81e9c59b27572.jpeg",
 "/uploads/default/original/2X/b/b6b12c4df19b234f6d1551c26d92a14969f19f12.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/f/fcd4201295e6e63a7496e70e8b067225774834f3.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/f/f42150c03cce15a1bdc34c6af746fe51b63db36c.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/e66cfb3a0bdc558a02fd999d1bf5a185521456cf.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/1885bc0fe4cf6ee25ab8d6e250807c9836168cdc.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/c/c1f240c94d45e0be0cfcd7a3cc714e389bb49f23.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/2/293518b6119a17d64222cf5d691aee271fa572cf.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/617f0bb525f05934ae455582deacb96e7fd097e9.jpeg",
 "//bhdisco.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/3/331a610d2237294bdb126eecf1f087173c5087df.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/d/d0b3efa53ceab849e17e781e63f2b969f94dbde0.jpeg",
 "/images/default-favicon.ico",
 "/uploads/default/original/2X/b/b399c60eb0b83232531ef2ead5a060fbd9c2a64e.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/9/987178dc86175225b999151e112deb3bf26b13af.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/c/c99c8a9dd3e59cecc6fb5010f362b1dc3f49ca66.jpeg",
 "//bhdisco.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/5/5c145297f26cd91f6f157d507324724ba15cb618.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/e/ef5c223cd604e3574c300671da61693dc5399e62.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/9c99b85e976c42bc3c692f75b8828abbbc2bc4ea.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/6/6f88f27ee155e69bb5b701b86eba9dc3e369bc09.png",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/3/3b454434e58b05db14f51c3fcdfbd36d0d96d4eb.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/b7e92457674b8c28f6ecfbc9340816fc3583d20e.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/7/731c0ee200660fb1888cd058c79282bf7f6dab95.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/a42f92c28be8bd5ac86bb55f36fc9ca0bec37c72.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/ac7dc4c531d428b152de3eebceb44bfe779c349d.jpeg",
 "//bhdisco.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/f/f361a9ad5194ef13c2c6b24e2db98455e7cc48d9.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/43ec21eafc00f8cd05976e0fbec41ef686e0e3b3.png",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/8b41f21b02df80a9e5c4ea14a5dffa5776811f3d.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/6/6eee5c5a5a2b274e7d8ccc911cd4f594cc4930de.png",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/c1736a8c2923f0bd341f7112db74cd62392f7e14.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/c/c3e2fbb84c55dbf2f1fdccf835964eb4319e2371.png",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/0/0b41e87ab7728dbead217e237c4ad8940bdfe776.png",
 "//bhdisco.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/a/a3ac121566d741d5b396ba49625f3206ff0c498f.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/b/bbbb6973cb0900389675691c5c129c907cf4611f.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/2/28f5d5bf46b30a33bde8e67c184cb099cc71511a.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/f/ff34c3fc207781d5881d4583cceb26aa54619c0e.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/f/f85db75b4721b8d24abf78ee3d25f2ffbef26da9.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/35c6402fbf4a8fca05f30924800fa0c90cf891e7.png",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/9/9d8f29892278f164e8ce27a6b58cc8af0760802c.png",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/1/1a533eb9f4ec5186427a541a7ebbf06817627f97.png",
1 me gusta

Veo varios avatares rotos en tu sitio. Asumo que es porque has eliminado el bucket de S3 o no has vuelto a generar la caché después de copiar todos los archivos desde S3. ¿Por qué hay dos buckets en la salida?

bhdisco.s3.dualstack.ap-south-1.amazonaws.com
bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com

¿Has configurado tu sitio con un bucket y luego lo cambiaste por otro?

3 Me gusta

Lo siento, de alguna manera me perdí la notificación de que habías respondido. Gracias de verdad.

No he eliminado el bucket de S3, pero efectivamente cambié de bucket antes (en ese momento no era consciente de las complicaciones que eso implica). Así que todos mis activos estaban en dos buckets de S3, pero ahora los he copiado manualmente también al servidor local (/var/discourse/shared/web_only/uploads/default).

¿Cómo debería proceder para solucionar este lío?

Nota: Estoy familiarizado con los comandos básicos del contenedor, la consola de Rails y AWS S3.

1 me gusta