S3 (nicht AWS) funktioniert zufällig nicht mehr, vermutlich seit einem Update

Ich habe ein Bucket-Set, aber es scheint, als würde es versuchen, das Standard-Bucket zu verwenden?

Ich verwende GarageHQ als leichtgewichtige MinIO-Alternative.

Ich bin auf 3.6.0.beta1-dev
( ed6beea336 )

[2025-09-14 10:40:34] Entferne temporäres Verzeichnis ‘/var/www/discourse/tmp/backups/default/2025-09-14-104012’…
[2025-09-14 10:40:34] Archiv wird hochgeladen…
[2025-09-14 10:40:35] AUSNAHME: Bucket nicht gefunden: 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>'

Das letzte Backup war gestern, aber jetzt funktioniert es nicht mehr. Andere Dienste können immer noch ohne Probleme zu meinem lokalen S3 sichern.

Weiß jemand, wie ich das beheben kann?

Ja. AWS hat die S3-Bibliothek für viele andere Dienste kaputt gemacht.

Can't rebuild due to AWS SDK gem bump and new AWS Data Integrity Protections enthält einige Workarounds.

Ich habe diese aws-revert-template.yml erstellt, um auf eine ältere Version zurückzusetzen. Ich weiß nicht, ob sie noch funktioniert; meine Datei ist datiert 2025-08-06T05:00:00Z

Hmm, ich bin mir nicht sicher, ob das das Problem ist

wenn ich mich nicht irre, war ich länger als 2 Tage auf 3.6 und trotzdem habe ich vor 2 Tagen und vor 10 Tagen ein Backup erhalten.

Nicht viel mehr. Ich glaube, Sie irren sich.

Hier ist der Commit, auf dem Sie sich befinden:

Aber auch:

Heißt Ihr Bucket “default”?

Ja, ich bin jetzt beim Commit, anfangs war ich das nicht, als ich dieses Problem gepostet habe. Ich habe aktualisiert, um einen Fehler auszuschließen.

Nein, wie in der OP angegeben, glaube ich deshalb nicht, dass es sich um dasselbe Problem handelt, auf das Sie sich beziehen. Mein Bucket ist angegeben. Ich habe es sowohl in den UI-Einstellungen des Backup-Bereichs als auch über Umgebungsvariablen in der YAML versucht. Es versucht immer noch, standardmäßig zu verwenden, unabhängig davon.

Zur Klarstellung: Seitdem es aufgehört hat zu funktionieren, hat sich am Discourse- oder Garage-Ende nichts geändert, außer einem Update auf 3.5 und dann auf 3.6.

1 „Gefällt mir“

Vielleicht könnte jemand mit echtem S3 überprüfen, ob ein Bucket korrekt ausgewählt wird? Dasselbe gilt für andere Drittanbieter wie Backblaze, R2 usw.?

Ich habe einen Bucket namens „Default“ erstellt und er funktioniert wie vorgesehen. Es scheint also, dass der Bucket-Name, den ich angebe, nicht korrekt übernommen wird.

Außer dass Tausende von Menschen und das CDCK-Hosting wahrscheinlich ebenfalls betroffen wären und sie es nicht sind. Es ist viel wahrscheinlicher, dass Sie ein Zeichen in Ihrer app.yml-Datei gelöscht oder hinzugefügt haben.

Sie können so etwas tun:

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

Und wenn Sie S3 in den Einstellungen anstelle von Umgebungsvariablen konfiguriert haben, dann können Sie sich Configure an S3 compatible object storage provider for uploads ansehen, um zu sehen, wie diese aussehen.

Nichts ist falsch mit meinem Setup, es wurde nichts geändert außer dem Discourse-Update. Ich habe die Konfiguration in der YAML-Datei und die Konfiguration in der Benutzeroberfläche ausprobiert. Die Einstellungen der Benutzeroberfläche zeigen sie buchstäblich als „cyanlabs-community“ an und dennoch versucht das Backup immer noch, nach „default“ zu speichern.

Obwohl S3 in der Benutzeroberfläche konfiguriert ist, enthält die Datei discourse.conf keine S3-Referenzen gemäß Ihrem zweiten Befehl.

Das bedeutet jedoch, dass der Bucket nicht vorhanden ist. Können Sie versuchen, einen brandneuen Bucket und neue Anmeldeinformationen zu erstellen und zu sehen, ob der Upload dort funktioniert?

1 „Gefällt mir“

Danke, aber ich habe das Gefühl, ich drehe mich hier im Kreis.

Der Bucket “default” existierte zu Beginn dieses Gesprächs nicht. Ich habe ihn inzwischen erstellt und er verwendet diesen Bucket, obwohl in den Einstellungen der Bucket cyanlabs-community festgelegt ist.

Sowohl cyanlabs-community als auch default existieren in der S3-Instanz, aber Discourse verwendet cyanlabs-community nicht, egal was ich versuche.

Neuer Bucket cyanlabsdiscourse

Ergebnis des Backups

[2025-09-22 15:14:59] Finalizing backup...
[2025-09-22 15:14:59] Finalizing database dump file: cyanlabs-official-community-2025-09-22-151437-v20250916082012.sql.gz
[2025-09-22 15:14:59] Removing tmp '/var/www/discourse/tmp/backups/default/2025-09-22-151437' directory...
[2025-09-22 15:14:59] Uploading archive...
[2025-09-22 15:15:37] Executing the after_create_hook for the backup...
[2025-09-22 15:15:37] Deleting old backups...
[2025-09-22 15:15:37] Cleaning stuff up...
[2025-09-22 15:15:37] Removing archive from local storage...
[2025-09-22 15:15:37] Removing '.tar' leftovers...
[2025-09-22 15:15:37] Marking backup as finished...
[2025-09-22 15:15:37] Refreshing disk stats...
[2025-09-22 15:15:37] Notifying 'CyanLabs' of the end of the backup...
[2025-09-22 15:15:40] Finished!

cyanlabsdiscourse Bucket

default Bucket

Was interessant ist, ist, dass er immer noch versucht, die Verbindung unter bucketname.s3.domain.tld herzustellen, z. B. cyanlabsdiscourse.s3.domain.tld. Ohne das Hinzufügen eines DNS-Eintrags würde dies auf dieser Sub-Sub-Domain nicht funktionieren. Die Einstellung wird also für die URL berücksichtigt, aber es scheint, dass die Bucket-Auswahl ignoriert wird.

Ich habe das Gefühl, ich habe alles versucht, für jetzt werde ich wohl einfach den Standard-Bucket verwenden.

AWS kann geheimnisvoll sein! Es tut mir leid, dass Sie Ihren bevorzugten Bucket-Namen nicht zum Laufen bringen konnten. Es ist schwer zu helfen, ohne es reproduzieren zu können, daher müssen Sie wohl damit leben, den Standard als Bucket-Namen zu verwenden.