Hallo zusammen,
wie kann ich den AWS S3-Speicher vollständig deaktivieren und alle Dateien sowie Backups aus dem S3-Speicher zurück auf meinen EC2-Server übertragen?
Hallo zusammen,
wie kann ich den AWS S3-Speicher vollständig deaktivieren und alle Dateien sowie Backups aus dem S3-Speicher zurück auf meinen EC2-Server übertragen?
Ich glaube, das wird funktionieren:
./launcher enter app
rake uploads:migrate_from_s3
rake posts:rebake
Dadurch werden die Uploads VON S3 auf Ihren Webserver migriert. Anschließend können Sie in Ihrer app.yml wieder DISCOURSE_USE_S3: false setzen und neu aufbauen.
Ich würde auch in den Admin-Bereich von Discourse gehen und alle Kästchen deaktivieren, die den S3-Modus aktivieren.
Ich habe mich an die Anweisungen von @AntiMetaman gehalten, aber es tritt ein Fehler auf: „rake aborted“. Zunächst wurde ich aufgefordert, den S3-Upload zu deaktivieren. Ich habe den S3-Upload deaktiviert und erneut „rake“ ausgeführt, woraufhin dieser Fehler auftrat.
root@ip-172-31-7-247-app:/var/www/discourse# rake uploads:migrate_from_s3 --trace
** Invoke uploads:migrate_from_s3 (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute uploads:migrate_from_s3
Migrating uploads from S3 to local storage for 'default'...
rake aborted!
NoMethodError: undefined method `downcase' for nil:NilClass
/var/www/discourse/app/models/global_setting.rb:107:in `s3_bucket_name'
/var/www/discourse/app/models/site_setting.rb:157:in `absolute_base_url'
/var/www/discourse/lib/tasks/uploads.rake:138:in `migrate_from_s3'
/var/www/discourse/lib/tasks/uploads.rake:118:in `block in migrate_all_from_s3'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rails_multisite-2.3.0/lib/rails_multisite/connection_management.rb:68:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rails_multisite-2.3.0/lib/rails_multisite/connection_management.rb:78:in `each_connection'
/var/www/discourse/lib/tasks/uploads.rake:118:in `migrate_all_from_s3'
/var/www/discourse/lib/tasks/uploads.rake:93:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:281:in `block in execute'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:281:in `each'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:281:in `execute'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:219:in `block in invoke_with_call_chain'
/usr/local/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:199:in `invoke_with_call_chain'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:188:in `invoke'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:160:in `invoke_task'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:116:in `block (2 levels) in top_level'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:116:in `each'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:116:in `block in top_level'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:125:in `run_with_threads'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:110:in `top_level'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:83:in `block in run'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:186:in `standard_exception_handling'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:80:in `run'
bin/rake:13:in `<top (required)>'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:63:in `load'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:63:in `kernel_load'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:28:in `run'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:476:in `exec'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor.rb:399:in `dispatch'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:30:in `dispatch'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/base.rb:476:in `start'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:24:in `start'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/exe/bundle:46:in `block in <top (required)>'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/friendly_errors.rb:123:in `with_friendly_errors'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/exe/bundle:34:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
Tasks: TOP => uploads:migrate_from_s3
Dieser hier, oder?

Ich bin heute auf dieses Thema gestoßen. Wenn es möglich ist, könnte es sich lohnen, noch etwas zu warten.
Wenn Sie S3 nur über das Admin-Panel deaktivieren, wird es nur auf Site-Ebene abgeschaltet. Sie möchten es global deaktivieren, weshalb Sie den Wert in der app.yml von true auf false ändern und dann neu aufbauen müssen.
Es sollte funktionieren, wenn Sie Ihr S3 eingerichtet haben. Ich habe gerade einen migrate_from_s3 und einen migrate_to_s3 ausprobiert. Bei mir funktioniert es. Ich habe keine Fehler erhalten. Ich weiß nicht, was dieser Fehler bedeutet, daher sollte ein Discourse-Entwickler jetzt weiterhelfen:
NoMethodError: undefined method 'downcase' for nil:NilClass
Seltsam, meine Antwort unten wurde gelöscht; daher poste ich sie erneut.
Dieser Fehler tritt auf, wenn eine String-Methode auf ein Objekt aufgerufen wird, das nil ist; und tritt im Allgemeinen in Ruby auf, wenn ein String-Objekt erwartet wird, es aber nil ist.
Deshalb tritt dieser Fehler auf.
DISCOURSE_USE_S3: false zu app.yml hinzugefügt, aber der Fehler bleibt bestehen. Welche Discourse-Version verwendest du? Ich verwende die neueste Version.
Ich bin auch auf dem neuesten Stand. Hast du beim Neuaufbau Fehler erhalten? Wenn ja, könntest du sie bitte posten?
Nein, es liegt kein Fehler vor.
Wenn der Fehler erst nach deinem rake-Befehl auftritt, kannst du bitte genau angeben, was du eingegeben hast? Musstest du nicht beim ersten Einrichten von S3 Dateien zu S3 migrieren?
Hier ist meine vollständige app.yml
## Dies ist die All-in-One, eigenständige Discourse Docker-Container-Vorlage
##
## Nach Änderungen an dieser Datei MUSST du neu aufbauen
## /var/discourse/launcher rebuild app
##
## SEI *SEHR* VORSICHTIG BEI DER BEARBEITUNG!
## YAML-DATEIEN SIND SUPER SUPER EMPFINDLICH GEGENÜBER FEHLERN IN LEERZEICHEN ODER AUSRICHTUNG!
## Besuche http://www.yamllint.com/, um diese Datei bei Bedarf zu validieren
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## Kommentiere diese zwei Zeilen aus, wenn du Lets Encrypt (https) hinzufügen möchtest
- "templates/web.ssl.template.yml"
- "templates/web.letsencrypt.ssl.template.yml"
## - "templates/cloudflare.template.yml"
## Welche TCP/IP-Ports soll dieser Container exponieren?
## Wenn du möchtest, dass Discourse einen Port mit einem anderen Webserver wie Apache oder nginx teilt,
## siehe https://meta.discourse.org/t/17247 für Details
expose:
- "80:80" # http
- "443:443" # https
params:
db_default_text_search_config: "pg_catalog.english"
## Setze db_shared_buffers auf maximal 25 % des gesamten Speichers.
## wird automatisch beim Bootstrap basierend auf dem erkannten RAM festgelegt, oder du kannst es überschreiben
db_shared_buffers: "128MB"
## kann die Sortierleistung verbessern, erhöht aber den Speicherverbrauch pro Verbindung
#db_work_mem: "40MB"
## Welche Git-Revision soll dieser Container verwenden? (Standard: tests-passed)
#version: tests-passed
env:
LANG: en_US.UTF-8
# DISCOURSE_DEFAULT_LOCALE: en
## Wie viele gleichzeitige Webanfragen werden unterstützt? Hängt vom Arbeitsspeicher und den CPU-Kernen ab.
## wird automatisch beim Bootstrap basierend auf den erkannten CPUs festgelegt, oder du kannst es überschreiben
UNICORN_WORKERS: 2
## TODO: Der Domänenname, auf den diese Discourse-Instanz antwortet
DISCOURSE_HOSTNAME: engineersasylum.com
## Kommentiere dies aus, wenn du möchtest, dass der Container mit dem gleichen
## Hostnamen (-h-Option) wie oben angegeben gestartet wird (Standard "$hostname-$config")
#DOCKER_USE_HOSTNAME: true
## TODO: Liste der durch Komma getrennten E-Mails, die bei der ersten Anmeldung zu Admin und Entwickler werden
## Beispiel: 'user1@example.com,user2@example.com'
DISCOURSE_DEVELOPER_EMAILS: 'praveen369gen@gmail.com'
## TODO: Der SMTP-Mailserver, der zur Validierung neuer Konten und zum Senden von Benachrichtigungen verwendet wird
DISCOURSE_SMTP_ADDRESS: email-smtp.us-east-1.amazonaws.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: AXXXXXXXXXXXXXXX
DISCOURSE_SMTP_PASSWORD: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (optional, Standard true)
## Wenn du die Lets Encrypt-Vorlage hinzugefügt hast, kommentiere unten aus, um ein kostenloses SSL-Zertifikat zu erhalten
LETSENCRYPT_ACCOUNT_EMAIL: praxxxxxx@gmail.com
## Die CDN-Adresse für diese Discourse-Instanz (konfiguriert zum Abrufen)
## siehe https://meta.discourse.org/t/14857 für Details
#DISCOURSE_CDN_URL: //discourse-cdn.example.com
DISCOURSE_USE_S3: false
## Der Docker-Container ist zustandslos; alle Daten werden in /shared gespeichert
volumes:
- volume:
host: /var/discourse/shared/standalone
guest: /shared
- volume:
host: /var/discourse/shared/standalone/log/var-log
guest: /var/log
## Plugins gehen hier hinein
## siehe https://meta.discourse.org/t/19157 für Details
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
- git clone https://github.com/discourse/discourse-solved.git
- git clone https://github.com/discourse/discourse-adplugin.git
- git clone https://github.com/communiteq/discourse-sitemap.git
- git clone https://github.com/discourse/discourse-whos-online.git
- git clone https://github.com/discourse/discourse-push-notifications.git
- git clone https://github.com/discourse/discourse-chat-integration.git
- git clone https://github.com/davidtaylorhq/discourse-telegram-notifications.git
- git clone https://github.com/discourse/discourse-knowledge-explorer.git
- git clone https://github.com/discourse/discourse-math.git
## Beliebige benutzerdefinierte Befehle, die nach dem Erstellen ausgeführt werden sollen
run:
- exec: echo "Beginn der benutzerdefinierten Befehle"
## Wenn du die 'Von'-E-Mail-Adresse für deine erste Registrierung festlegen möchtest, kommentiere dies aus und ändere:
## Nach Erhalt der ersten Anmelde-E-Mail kommentiere die Zeile erneut aus. Sie muss nur einmal ausgeführt werden.
#- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
- exec: echo "Ende der benutzerdefinierten Befehle"
Ich erinnere mich nicht genau, aber ich glaube, ich habe mit rake uploads:migrate_to_s3 zu S3 migriert
Ich habe keine Ahnung, aber hier ist ein ähnlicher Thread, der exakt denselben Fehler enthält wie du:
Vielleicht solltest du das mit einem Teammitglied besprechen.
Hallo @Pravi
Eine Frage zum Seitenbereich:
In deinem Post zu deiner yml-Datei schreibst du:
DISCOURSE_SMTP_PASSWORD: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Stimmt das? Steht das Passwort in deiner yml-Datei in doppelten Anführungszeichen?
Ja, es steht in doppelten Anführungszeichen. Ich habe es seitdem nicht mehr geändert, als ich es vor zwei Jahren hinzugefügt habe.
Ich habe die doppelten Anführungszeichen entfernt und die App erneut neu erstellt. Dann habe ich erneut rake uploads:migrate_from_s3 ausgeführt, aber leider immer noch kein Erfolg. Derselbe Fehler.
Hallo @Pravi,
Um ehrlich zu sein, bin ich ein Anti-Fan von AWS und S3, daher verwende ich sie nicht.
Hast du schon überlegt, den Rake-Task zu prüfen, das Skript zu reverse-engineern und die Aufgabe dann Schritt für Schritt manuell durchzuführen?
Ich habe nicht viel Erfahrung mit internen Discourse-Skripten und habe ein wenig Angst, das Skript zu bearbeiten. Ich möchte nicht alles ruinieren.
Können Sie mir den Speicherort der Discourse-Konfigurationsdatei nennen? Ich kann sie auf meinem Server nirgends finden. Der Befehl find gibt nichts zurück.
root@ip-172-31-7-247:/var/discourse# find . -name "*.config"
root@ip-172-31-7-247:/var/discourse# find . -name "*.conf"
./shared/standalone/letsencrypt/engineersasylum.com/engineersasylum.com.conf
./shared/standalone/letsencrypt/engineersasylum.com/engineersasylum.com.csr.conf
./shared/standalone/letsencrypt/engineersasylum.com_ecc/engineersasylum.com.conf
./shared/standalone/letsencrypt/engineersasylum.com_ecc/engineersasylum.com.csr.conf
./shared/standalone/letsencrypt/ca/acme-v01.api.letsencrypt.org/ca.conf
./shared/standalone/letsencrypt/ca/acme-v02.api.letsencrypt.org/ca.conf
./shared/standalone/letsencrypt/account.conf
./shared/standalone/postgres_data/pg_hba.conf
./shared/standalone/postgres_data/postgresql.auto.conf
./shared/standalone/postgres_data/pg_ident.conf
./shared/standalone/postgres_data/postgresql.conf
root@ip-172-31-7-247:/var/discourse#
Hallo @Pravi,
es tut mir leid, dass du mich missverstanden hast.
Ich habe dich nicht gebeten, diese Datei oder irgendeine andere Datei zu bearbeiten.
Ein Skript zu „reverse engineeren
Ich verstehe deinen Punkt. Ich werde es versuchen.
Kannst du mir den Speicherort der Datei ‘discourse.config’ nennen? Wo sind die Konfigurationen für S3 gespeichert?