Zuerst hatte der Upgrade-Bildschirm alles deaktiviert. Ich habe neu gestartet und konnte dann das docker_manager-Upgrade auswählen. Das schlug mit folgendem Fehler fehl:
rake aborted!
NoMethodError: undefined method `path' for nil:NilClass
Also habe ich mich per SSH auf dem Server angemeldet und einen Rebuild versucht. Hier ist, was ich erhalten habe:
root@Discourse-1:/var/discourse# ./launcher rebuild app
x86_64 arch detected.
WARNING: containers/app.yml file is world-readable. You can secure this file by running: chmod o-rwx containers/app.yml
Ensuring launcher is up to date
Fetching origin
Launcher is up-to-date
............
Downloading MaxMindDB...
Compressing Javascript and Generating Source Maps
I, [2023-03-10T03:08:58.958320 #1] INFO -- : Terminating async processes
I, [2023-03-10T03:08:58.958649 #1] INFO -- : Sending INT to HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main pid: 42
I, [2023-03-10T03:08:58.958745 #1] INFO -- : Sending TERM to exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 103
103:signal-handler (1678417738) Received SIGTERM scheduling shutdown...
2023-03-10 03:08:58.959 UTC [42] LOG: received fast shutdown request
2023-03-10 03:08:58.966 UTC [42] LOG: aborting any active transactions
2023-03-10 03:08:58.969 UTC [42] LOG: background worker "logical replication launcher" (PID 51) exited with exit code 1
2023-03-10 03:08:58.971 UTC [46] LOG: shutting down
103:M 10 Mar 2023 03:08:59.047 # User requested shutdown...
103:M 10 Mar 2023 03:08:59.047 * Saving the final RDB snapshot before exiting.
2023-03-10 03:08:59.060 UTC [42] LOG: database system is shut down
103:M 10 Mar 2023 03:08:59.073 * DB saved on disk
103:M 10 Mar 2023 03:08:59.073 # Redis is now ready to exit, bye bye...
FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake themes:update assets:precompile' failed with return #<Process::Status: pid 1004 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"assets_precompile", "cmd"=>["su discourse -c 'bundle exec rake themes:update assets:precompile'"]}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
e956a73644feb880e4b524bcbd4fa3c626fcfcc4edb3752f72e523194f663b4e
root@Discourse-1:/var/discourse# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
root@Discourse-1:/var/discourse#
Haben Sie Plugins in Ihrer app.yml?
Wenn mir so etwas passiert, ist es normalerweise ein defektes Plugin, das auskommentiert werden muss, bevor der Wiederaufbau funktioniert.
Persönlich würde ich kein Update versuchen, wenn ein Backup fehlgeschlagen ist. Ein Backup – einschließlich des Herunterladens einer Kopie – ist für mich eine Voraussetzung. Das ist vielleicht im Moment kein hilfreicher Kommentar, aber ich denke, er muss gesagt werden.
Wenn das Problem darin besteht, dass kein Prozess gestartet werden kann, dann sind nicht nur die RAM- und Swap-Auslastung relevant, sondern auch die Kernel-Konfiguration. Wenn dies in den Protokollen erscheint
# WARNUNG overcommit_memory ist auf 0 gesetzt! Hintergrundspeicherung kann bei geringem Speicher fehlschlagen. Um dieses Problem zu beheben, fügen Sie 'vm.overcommit_memory = 1' zu /etc/sysctl.conf hinzu und starten Sie dann neu oder führen Sie den Befehl 'sysctl vm.overcommit_memory=1' aus, damit dies wirksam wird.
dann ist es ratsam, wie empfohlen vorzugehen. Siehe auch
Meine Discourse-Installation ist sehr generisch. Nach einem Neustart habe ich ein sauberes Backup erhalten. Letztendlich habe ich mich entschieden, eine Neuinstallation von Grund auf durchzuführen. Die Installation schlug mit denselben Fehlern fehl, die ich oben gepostet habe. Ich betreibe Discourse seit vier Jahren mit 6 GB Speicher in einem LXD-Container ohne Probleme. Die Speicherauslastung liegt konstant bei 1,9 GB. Während eines Upgrades erreicht der Speicher einen Spitzenwert von 5,1 GB. Mein Datenbank-Backup besteht nur aus 30 GB Daten, daher ist meine Installation im Vergleich zu anderen klein. Meine Konfiguration läuft auf Ubuntu 22.04. Sollte ich eine andere Distribution verwenden?
Ich habe vielleicht 40 Benutzer und 150 Beiträge. Das System verbraucht 1,8 GB Arbeitsspeicher und ich habe ihm 6 GB Arbeitsspeicher zugewiesen. Wie viel Arbeitsspeicher wird für einen erfolgreichen Rebuild benötigt? Das war in der Vergangenheit immer ausreichend.
## Dies ist die All-in-One, eigenständige Discourse Docker Container-Vorlage
##
## Nach Änderungen an dieser Datei MÜSSEN Sie neu erstellen
## /var/discourse/launcher rebuild app
##
## SEIEN SIE *SEHR* VORSICHTIG BEIM BEARBEITEN!
## YAML-DATEIEN SIND SEHR, SEHR EMPFINDLICH GEGEN FEHLER BEI LEERZEICHEN ODER AUSRICHTUNG!
## Besuchen Sie http://www.yamllint.com/, um diese Datei nach Bedarf zu validieren
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## Kommentieren Sie diese beiden Zeilen aus, wenn Sie Lets Encrypt (https) hinzufügen möchten
- "templates/web.ssl.template.yml"
- "templates/web.letsencrypt.ssl.template.yml"
## Welche TCP/IP-Ports soll dieser Container bereitstellen?
## Wenn Sie möchten, 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"
## Setzen Sie db_shared_buffers auf maximal 25% des Gesamtspeichers.
## wird automatisch von bootstrap basierend auf dem erkannten RAM gesetzt, oder Sie können überschreiben
db_shared_buffers: "4096MB"
## 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:
LC_ALL: en_US.UTF-8
LANG: en_US.UTF-8
LANGUAGE: en_US.UTF-8
# DISCOURSE_DEFAULT_LOCALE: en
## Wie viele gleichzeitige Webanfragen werden unterstützt? Hängt von Speicher und CPU-Kernen ab.
## wird automatisch von bootstrap basierend auf den erkannten CPUs gesetzt, oder Sie können überschreiben
UNICORN_WORKERS: 8
## TODO: Der Domainname, auf den diese Discourse-Instanz reagieren wird
## Erforderlich. Discourse funktioniert nicht mit einer reinen IP-Nummer.
DISCOURSE_HOSTNAME: discussion.scottibyte.com
## Kommentieren Sie aus, wenn der Container mit demselben
## Hostnamen (-h Option) wie oben angegeben gestartet werden soll (Standard "$hostname-$config")
#DOCKER_USE_HOSTNAME: true
## TODO: Liste von durch Kommas getrennten E-Mails, die bei der ersten Anmeldung zu Administratoren und Entwicklern gemacht werden
## Beispiel 'user1@example.com,user2@example.com'
DISCOURSE_DEVELOPER_EMAILS: 'aaaaaa@gmail.com'
## TODO: Der SMTP-Mailserver, der zum Überprüfen neuer Konten und zum Senden von Benachrichtigungen verwendet wird
# SMTP-ADRESSE, Benutzername und Passwort sind erforderlich
# WARNUNG: Das Zeichen '#' im SMTP-Passwort kann Probleme verursachen!
DISCOURSE_SMTP_ADDRESS: smtp.gmail.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: redacted
DISCOURSE_SMTP_PASSWORD: redacted
DISCOURSE_SMTP_ENABLE_START_TLS: true # (optional, Standard true)
DISCOURSE_SMTP_DOMAIN: discussion.scottibyte.com
DISCOURSE_NOTIFICATION_EMAIL: noreply@scottibyte.com
## Wenn Sie die Lets Encrypt-Vorlage hinzugefügt haben, kommentieren Sie unten aus, um ein kostenloses SSL-Zertifikat zu erhalten
LETSENCRYPT_ACCOUNT_EMAIL: me@example.com
## Die HTTP- oder HTTPS-CDN-Adresse für diese Discourse-Instanz (konfiguriert zum Ziehen)
## siehe https://meta.discourse.org/t/14857 für Details
#DISCOURSE_CDN_URL: https://discourse-cdn.example.com
## Der Maxmind Geolocation IP-Adressschlüssel für die IP-Adressensuche
## siehe https://meta.discourse.org/t/-/137387/23 für Details
DISCOURSE_MAXMIND_LICENSE_KEY: aaaaaaaa
## 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 hin
## 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
## Alle benutzerdefinierten Befehle, die nach dem Erstellen ausgeführt werden sollen
run:
- exec: echo "Beginn der benutzerdefinierten Befehle"
## Wenn Sie die E-Mail-Adresse 'Von' für Ihre erste Registrierung festlegen möchten, kommentieren Sie sie aus und ändern Sie sie:
## Nachdem Sie die erste Registrierungs-E-Mail erhalten haben, kommentieren Sie die Zeile wieder aus. Sie muss nur einmal ausgeführt werden.
# - exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
- exec: echo "Ende der benutzerdefinierten Befehle"
Der Maxmind-Schlüssel wurde in der YAML auskommentiert. Ein Neuerstellungsprozess ist im Gange. Übrigens haben E-Mail-Benachrichtigungen schon immer einwandfrei funktioniert. In letzter Zeit funktioniert die E-Mail mit dem Download-Link für das Backup nicht mehr. Ich gehe einfach in den Ordner und lade das Backup per SFTP herunter, und das funktioniert, und das Backup-Protokoll wird erfolgreich abgeschlossen. Was denken Sie also, woran liegt das Problem mit dem Maxmind-Schlüssel?
Wie Sie sehen können, hat der Rebuild funktioniert und das Forum ist auf dem neuesten Stand. Ein neues Backup hat von der GUI aus funktioniert, ebenso wie die Backup-Benachrichtigung und sogar der Download-Link für das Backup. Alles funktioniert einwandfrei.
Danke, Sie sind der Meister! Tolle Kommentare und wunderbare Hilfe, Sir.
Also, selbst mit einem neuen Maxmind-Schlüssel hatte ich kein Glück. Irgendwelche Ratschläge dazu?
Idealerweise keiner von beiden. Wir benötigen lediglich eine Bestätigung, was genau kaputt ist, mit den entsprechenden Reproduktionsschritten, damit wir einen Fehler melden und einen Ingenieur damit beauftragen können.
Alles, was ich getan habe, war, den Schlüssel auszukommentieren, und der Build funktionierte einwandfrei. Mit einem gültigen (und sogar neuen Schlüssel) schlägt der Build mit den von mir bereitgestellten Protokollen fehl.