S3 (no AWS) dejó de funcionar aleatoriamente, presumiblemente desde una actualización

Tengo un bucket configurado pero parece que está intentando usar el predeterminado?

Uso GarageHQ como una alternativa ligera a MinIO.

Estoy en la versión 3.6.0.beta1-dev
( ed6beea336 )

[2025-09-14 10:40:34] Eliminando el directorio temporal ‘/var/www/discourse/tmp/backups/default/2025-09-14-104012’…
[2025-09-14 10:40:34] Subiendo archivo…
[2025-09-14 10:40:35] EXCEPCIÓN: Bucket no encontrado: default

[2025-09-14 10:40:35] /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/seahorse/client/plugins/raise_response_errors.rb:17:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/plugins/sse_cpk.rb:24:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/plugins/dualstack.rb:21:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/plugins/accelerate.rb:43:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/checksum_algorithm.rb:169:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/jsonvalue_converter.rb:16:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/invocation_id.rb:16:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/idempotency_token.rb:19:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/param_converter.rb:26:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/seahorse/client/plugins/request_callback.rb:89:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/response_paging.rb:12:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/seahorse/client/plugins/response_target.rb:24:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/telemetry.rb:39:in `block in call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/telemetry/no_op.rb:29:in `in_span'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/telemetry.rb:53:in `span_wrapper'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/telemetry.rb:39:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/seahorse/client/request.rb:72:in `send_request'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/client.rb:3710:in `create_multipart_upload'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/multipart_file_uploader.rb:67:in `initiate_upload'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/multipart_file_uploader.rb:58:in `upload'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/file_uploader.rb:42:in `block in upload'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/user_agent.rb:90:in `metric'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/file_uploader.rb:40:in `upload'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/customizations/object.rb:477:in `block in upload_file'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/user_agent.rb:90:in `metric'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/customizations/object.rb:476:in `upload_file'
/var/www/discourse/lib/backup_restore/s3_backup_store.rb:48:in `upload_file'
/var/www/discourse/lib/backup_restore/backuper.rb:351:in `upload_archive'
/var/www/discourse/lib/backup_restore/backuper.rb:41:in `run'
/var/www/discourse/script/spawn_backup_restore.rb:9:in `backup'
/var/www/discourse/script/spawn_backup_restore.rb:31:in `block in <main>'
/var/www/discourse/script/spawn_backup_restore.rb:4:in `fork'
/var/www/discourse/script/spawn_backup_restore.rb:4:in `<main>'

La última copia de seguridad fue ayer, pero ahora ya no funciona, otros servicios pueden hacer copias de seguridad en mi S3 local sin problemas.

¿Alguien sabe cómo puedo solucionar esto?

Sí. AWS rompió la biblioteca S3 para muchos otros servicios.

Can't rebuild due to AWS SDK gem bump and new AWS Data Integrity Protections tiene algunas soluciones alternativas.

Creé este aws-revert-template.yml para revertir a una versión anterior. No sé si todavía funciona; mi archivo tiene fecha 2025-08-06T05:00:00Z

Hmm, no estoy completamente convencido de que este sea el problema, sin embargo

a menos que me equivoque, estuve en la versión 3.6 durante más de 2 días, y sin embargo tengo una copia de seguridad de hace 2 días y 10 días.

No mucho más. Creo que te equivocas.

Aquí está el commit en el que estás:

Pero también:

¿Tu bucket se llama “default”?

Sí, ahora estoy en el commit, inicialmente no lo estaba cuando publiqué este problema, actualicé para descartar un error.

[quote=“pfaffman, post:4, topic:382582”]¿tu bucket llamado “default”?
[/quote]

no, como se indica en el OP, por eso no creo que sea el mismo problema al que te refieres, mi bucket está especificado, lo he intentado tanto en la configuración de la UI de la sección de copias de seguridad como a través de variables de entorno en el yaml, todavía intenta usar el predeterminado independientemente.

para aclarar, nada ha cambiado en el extremo de discourse o garage desde que dejó de funcionar, excepto una actualización a 3.5 y luego a 3.6.

1 me gusta

¿quizás alguien con S3 real podría verificar si está seleccionando correctamente un bucket? ¿lo mismo para otros terceros como Backblaze, R2, etc.?

Así que creé un bucket llamado “Default” y funciona como se esperaba, así que sí, no está eligiendo correctamente el nombre del bucket que le indico.

Excepto que miles de personas y el hosting de CDCK también se verían afectados y no lo están. Es mucho más probable que hayas eliminado o agregado un carácter a una línea en tu app.yml.

Puedes hacer cosas como esta:

grep -i S3 /var/discourse/containers/*
docker exec -it app bash -c 'grep s3 /var/www/discourse/config/discourse.conf

Y si configuraste s3 en la configuración en lugar de con variables de entorno, entonces puedes echar un vistazo a Configurar un proveedor de almacenamiento de objetos compatible con S3 para cargas para ver cómo son esas.

no hay nada malo en mi configuración, no se cambió nada excepto la actualización de discourse. He probado la configuración en el yaml y la configuración en la UI, la configuración de la UI la muestra literalmente como “cyanlabs-community” y, sin embargo, la copia de seguridad todavía intenta guardar en “default”

a pesar de tener s3 configurado en la UI, el archivo discourse.conf no contiene ninguna referencia a s3 según tu segundo comando

Esto, sin embargo, significa que el bucket no existe. ¿Puedes intentar crear un bucket y credenciales completamente nuevos y ver si la carga allí funciona?

1 me gusta

Gracias, pero siento que estoy dando vueltas en círculos aquí.

El bucket predeterminado no existía al comienzo de esta conversación, lo he creado desde entonces y utiliza ese bucket a pesar de tener el bucket cyanlabs-community configurado en la configuración.

Tanto cyanlabs-community como default existen en la instancia s3, pero Discourse no usará cyanlabs-community sin importar lo que intente.

Nuevo bucket cyanlabsdiscourse

Resultado de la copia de seguridad

[2025-09-22 15:14:59] Finalizando copia de seguridad...
[2025-09-22 15:14:59] Finalizando archivo de volcado de base de datos: cyanlabs-official-community-2025-09-22-151437-v20250916082012.sql.gz
[2025-09-22 15:14:59] Eliminando el directorio temporal '/var/www/discourse/tmp/backups/default/2025-09-22-151437'...
[2025-09-22 15:14:59] Cargando archivo...
[2025-09-22 15:15:37] Ejecutando el hook after_create_hook para la copia de seguridad...
[2025-09-22 15:15:37] Eliminando copias de seguridad antiguas...
[2025-09-22 15:15:37] Limpiando cosas...
[2025-09-22 15:15:37] Eliminando archivo de la memoria local...
[2025-09-22 15:15:37] Eliminando restos de '.tar'...
[2025-09-22 15:15:37] Marcando la copia de seguridad como finalizada...
[2025-09-22 15:15:37] Actualizando estadísticas del disco...
[2025-09-22 15:15:37] Notificando a 'CyanLabs' sobre el final de la copia de seguridad...
[2025-09-22 15:15:40] ¡Terminado!

Bucket cyanlabsdiscourse

Bucket default

Lo interesante es que todavía intenta establecer la conexión en bucketname.s3.domain.tld, por ejemplo, cyanlabsdiscourse.s3.domain.tld, ya que sin agregar un registro DNS no funcionaría en ese subdominio. por lo que la configuración se respeta para la URL, pero parece ser ignorada por la selección del bucket.

Creo que lo he intentado todo, por ahora usaré el bucket predeterminado, supongo.

¡AWS puede ser misterioso! Lamento que no hayas podido usar el nombre de bucket preferido. Es difícil ayudar sin poder replicarlo, así que supongo que tendrás que conformarte con usar el predeterminado como nombre de bucket.