Ist der erste Beitrag in den obigen https://meta.discourse.org/t/set-up-file-and-image-uploads-to-s3
noch ein gültiger Leitfaden, der es Administratoren ermöglicht, dies zu tun? Wenn nein, gibt es eine andere Stelle, an der der korrekte Leitfaden für 2024 zu S3 zu finden ist? Es heißt, dies sei offiziell und werde vom Discourse-Team unterstützt.
Wir haben es wie oben beschrieben implementiert, und die Bilder sind in der Discourse-Instanz defekt, obwohl sie auf S3 hochgeladen werden.
Unser Ablauf
Richten Sie den S3-Bucket selbst und die Richtlinie in S3 wie oben beschrieben ein (alle Schritte wurden genau befolgt).
Richten Sie die Umgebung in app.yml und im Adminbereich (identisch) wie oben beschrieben ein.
launcher rebuild app
Es wird überhaupt kein CDN verwendet, da wir davon ausgehen, dass dies optional ist und auch ohne CDN funktionieren sollte.
Ergebnis:
Bilder werden von Discourse in den Bucket hochgeladen.
Links sind nicht zugänglich (vermutlich aufgrund der S3-Richtlinie im offiziellen Leitfaden).
Angenommene Änderung für die offizielle S3-Richtlinie im Leitfaden. Principal: Diese Richtlinie gibt keinen Principal an, was bedeutet, dass sie für jeden gilt, der mit den richtigen Berechtigungen authentifiziert wurde. Wenn anonyme (öffentliche) Zugriffe erlaubt werden sollen, müssen wir \"Principal\": \"*\" angeben. Das ist möglicherweise auch keine gute Lösung, da es den Bucket öffentlich macht. Dies ist eine Annahme, da wir uns freuen würden, wenn jemand den Leitfaden aktualisieren würde, um ihn 2024 korrekt zu machen.
wir nutzen Cloudflare R2 für S3-Speicher (es funktioniert jetzt), und ich wollte Discourse auf einen anderen Server verschieben.
Allerdings fehlten beim Wiederherstellen aus einem Backup die Profilbilder, selbst wenn die Option „Uploads sichern“ aktiviert war.
Daher habe ich auf dem alten Server den S3-Migrationsbefehl ausgeführt, um noch lokal gespeicherte Bilder zu migrieren. Dabei ist jedoch ein Fehler aufgetreten, und es ist nicht klar, was die Ursache ist.
rake uploads:migrate_to_s3 --trace
** Invoke uploads:migrate_to_s3 (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute uploads:migrate_to_s3
Bitte beachten Sie: Die Migration zu S3 ist derzeit nicht umkehrbar!
[CTRL+c] zum Abbrechen, [ENTER] zum Fortsetzen
Migriere Uploads zu S3 für 'default'...
Lade Dateien zu S3 hoch...
- Lokale Dateien auflisten
..... => 5123 Dateien
- S3-Dateien auflisten
....... => 6871 Dateien
- Dateien zu S3 synchronisieren
.......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................^[[B............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
Aktualisiere die URLs in der Datenbank...
Entferne alte optimierte Bilder...
Markiere alle Beiträge mit Lightboxen für Neubearbeitung...
828 Beiträge wurden zur Neubearbeitung markiert
rake aborted!
FileStore::ToS3MigrationError: 4898 von 5838 Uploads wurden nicht zu S3 migriert. Die S3-Migration für die Datenbank 'default' ist fehlgeschlagen. (FileStore::ToS3MigrationError)
/var/www/discourse/lib/file_store/to_s3_migration.rb:132:in `raise_or_log'
/var/www/discourse/lib/file_store/to_s3_migration.rb:73:in `migration_successful?'
/var/www/discourse/lib/file_store/to_s3_migration.rb:383:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:59:in `migrate'
/var/www/discourse/lib/tasks/uploads.rake:126:in `migrate_to_s3'
/var/www/discourse/lib/tasks/uploads.rake:106:in `block in migrate_to_s3_all_sites'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management/null_instance.rb:36:in `each_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management.rb:21:in `each_connection'
/var/www/discourse/lib/tasks/uploads.rake:104:in `migrate_to_s3_all_sites'
/var/www/discourse/lib/tasks/uploads.rake:100:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/task.rb:281:in `block in execute'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/task.rb:281:in `each'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/task.rb:281:in `execute'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/task.rb:219:in `block in invoke_with_call_chain'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/task.rb:199:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/task.rb:199:in `invoke_with_call_chain'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/task.rb:188:in `invoke'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:188:in `invoke_task'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:138:in `block (2 levels) in top_level'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:138:in `each'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:138:in `block in top_level'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:147:in `run_with_threads'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:132:in `top_level'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:83:in `block in run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:214:in `standard_exception_handling'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.2.1/lib/rake/application.rb:80:in `run'
bin/rake:13:in `<top (required)>'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.5.18/lib/bundler/cli/exec.rb:58:in `load'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.5.18/lib/bundler/cli/exec.rb:58:in `kernel_load'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.5.18/lib/bundler/cli/exec.rb:23:in `run'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.5.18/lib/bundler/cli.rb:455:in `exec'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.5.18/lib/bundler/vendor/thor/lib/thor/command.rb:28:in `run'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.5.18/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.5.18/lib/bundler/vendor/thor/lib/thor.rb:527:in `dispatch'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.5.18/lib/bundler/cli.rb:35:in `dispatch'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.5.18/lib/bundler/vendor/thor/lib/thor/base.rb:584:in `start'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.5.18/lib/bundler/cli.rb:29:in `start'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.5.18/exe/bundle:28:in `block in <top (required)>'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.5.18/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.5.18/exe/bundle:20:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Es scheint, dass diese Bilder aus irgendeinem Grund immer noch lokal gespeichert sind, obwohl ich dieses Migrationsskript bereits zuvor ausgeführt habe.
Ich vermute, Sie haben etwas in Ihrem S3-Setup geändert und die fehlenden Bilder befinden sich in einem anderen Bucket oder einem anderen Pfad als die neuen.
Ich möchte wissen, ob es Probleme geben wird, wenn ich versuche, den S3-Dienstanbieter zu wechseln, abgesehen vom Problem bereits hochgeladener Bilder. Damit habe ich eigentlich keine größeren Probleme, da die Seite noch nicht live ist; ich entwickle sie noch.
Ist es möglich, die Bilder lokal zu speichern und dann S3 mit dem neuen Dienstanbieter wieder zu aktivieren?
Sie können siteSettings.include_s3_uploads_in_backups=true in Rails setzen und dann ein Backup erstellen, die S3-Einstellungen ändern und das Backup wiederherstellen.
Der verlinkte Thread erwähnt einen PR, um eine migrate_from_s3-Aufgabe zu entfernen, und ich habe keinen Grund zu der Annahme, dass sie später wieder hinzugefügt wurde, aber ich wollte prüfen, ob dies immer noch der Fall ist. Ich erwäge eine Migration zu MinIO und bin etwas besorgt über die Abhängigkeit.
Ich frage mich, ob dies eine Lösung für das von mir erwähnte Problem bieten könnte. Die Einstellung einschließen, ein Backup erstellen, die S3-Einstellungen deaktivieren und das Backup wiederherstellen.
Von diesem Thread scheint es, dass diese Einstellung die einzelnen Dateien von S3 herunterlädt, aber ich frage mich, ob es Probleme mit Beiträgen geben könnte, die S3-URLs anstelle von lokalen Dateien referenzieren. Ich bin mir nicht sicher, wie das in der Datenbank gehandhabt wird. Ich wäre daran interessiert zu erfahren, ob Ihre Migration zu einem anderen Anbieter erfolgreich war, @Rhod.
Ich habe den Übergang reibungslos geschafft. Ich betone, dass ich keine größeren Probleme hatte, da die Anzahl der Bilder oder Backups minimal war. Das Forum war ausschließlich zu Testzwecken gedacht, noch nicht in der “Produktion”. Schließlich, nach mehreren Versuchen und Irrtümern, habe ich das Forum auf einem neuen Server (Hetzner) neu installiert und S3 (Cloudflare R2) für Backups und Bilder mit dem Server konfiguriert, der mich schließlich überzeugt hat.
Es tut mir leid, dass ich nicht viel helfen kann. Ich werde sehen, ob ich es in Zukunft auf einem anderen Server testen kann.