Discourse-Upgrade über Web-UI schlägt fehl & SSH-Upgrade legt Discourse-Instanz lahm

HINWEIS: Ursprünglicher Beitrag aktualisiert am 25.11.21 17:00 EST mit neuen Informationen

Ich wurde über kritische Sicherheitsupdates für meine Discourse-Installation informiert und habe versucht, meine Installation über die Weboberfläche (/admin/upgrade) zu aktualisieren, wie ich es in der Vergangenheit getan habe. Es gab zwei Softwarekomponenten, die aktualisiert werden mussten – Docker Manager und Discourse.

Der Docker Manager musste zuerst aktualisiert werden (die Schaltfläche zum Aktualisieren von Discourse war deaktiviert). Ich habe das Upgrade des Docker Managers über die Weboberfläche gestartet und es wurde erfolgreich abgeschlossen. Anschließend habe ich das Upgrade von Discourse gestartet, aber es schlug auf halbem Weg fehl. Als ich die Weboberfläche aktualisierte, sah ich die folgende Nachricht:

Daher habe ich, den Anweisungen auf dem Bildschirm folgend, eine SSH-Verbindung zum Server hergestellt, git pull ausgeführt und dann sudo ./launcher rebuild app von der Befehlszeile aus gestartet. Der Vorgang wurde abgeschlossen, schlug jedoch mit der Fehlermeldung FAILED TO BOOTSTRAP fehl.

Hier ist die Ausgabe von zwei Ausführungen von sudo ./launcher rebuild app zu verschiedenen Zeiten:

Die Zeilennummern nach jeder Datei sind die Stellen, an denen die einzigen FEHLER auftreten. Beide scheinen sich auf die Datenbank und die Rollen zu beziehen (der Unterschied zwischen beiden Bereichen liegt daran, dass beim zweiten Versuch ein git pull aus dem Repository discourse/base durchgeführt wurde).

2021-11-25 21:21:38.451 UTC [64] postgres@postgres ERROR:  database "discourse" already exists
2021-11-25 21:21:38.451 UTC [64] postgres@postgres STATEMENT:  CREATE DATABASE discourse;
createdb: error: database creation failed: ERROR:  database "discourse" already exists
I, [2021-11-25T21:21:38.454429 #1]  INFO -- :
I, [2021-11-25T21:21:38.454908 #1]  INFO -- : > su postgres -c 'psql discourse -c "create user discourse;"' || true
2021-11-25 21:21:38.531 UTC [68] postgres@discourse ERROR:  role "discourse" already exists
2021-11-25 21:21:38.531 UTC [68] postgres@discourse STATEMENT:  create user discourse;
ERROR:  role "discourse" already exists

Dies scheint mit der FAILED-Fehlermeldung am Ende jedes Launcher Rebuild-Versuchs übereinzustimmen.

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 436 exit 1>
Location of failure: /pups/lib/pups/exec_command.rb:112:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
13bbdd52e0835ba9dfddc5c367d63b6087a16553c3a77d6087a16553c3a77d27ca307734d6e16907
** 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.

Hinweis: Diese FEHLER sind nicht das eigentliche Problem. Siehe “Lösung” unten.

Einige Leute haben unten erwähnt, dass es ein Problem mit redis gibt, das einen erfolgreichen Rebuild verhindert.

Ich habe sudo ./discourse-doctor zu verschiedenen Zeiten des Tages ausgeführt. Hier ist die Ausgabe von zwei der Ausführungen:

  • discourse-doctor-output-0.txt - konnte den laufenden Container ‘app’ nicht finden; Rebuild versucht, aber Container konnte nicht neu gestartet werden
  • discourse-doctor-output-1.txt - ‘app’ manuell mit sudo usr/bin/docker start app gestartet, bevor discourse-doctor ausgeführt wurde

Ich habe überprüft, ob meine Docker-Installation korrekt funktionierte, indem ich sudo docker run -it --rm hello-world ausgeführt habe.

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:cc15c5b292d8525effc0f89cb299f1804f3a725c8d05e158653a563f15e4f685
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

Ich habe sudo ./launcher cleanup ausgeführt, um sicherzustellen, dass ich genügend Speicherplatz habe.

WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Deleted Images:
<DETAILS REMOVED>

Total reclaimed space: 3.836GB

$ df -hT /dev/xvda1
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/xvda1     ext4   30G  9.1G   20G  32% /

Und ich habe sogar meine Speichereinstellungen überprüft.

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           1.9G        304M        633M         20M        1.0G        1.5G
Swap:          2.0G          0B        2.0G

Ein Neustart des Servers löste das Problem nicht, aber ich bemerkte nach dem Neustart des Servers etwas Interessantes.

Der Docker app-Container läuft nach einem Neustart.

$ sudo docker ps
CONTAINER ID   IMAGE                 COMMAND        CREATED       STATUS          PORTS                                                                      NAMES
6449ec0061a0   local_discourse/app   "\"/sbin/boot\""   7 weeks ago   Up 25 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   app

Aber wenn ich die Seite aufrufe, erhalte ich eine “502 Bad Gateway”-Fehlermeldung.

Wenn ich den app-Container stoppe und die Seite aufrufe, erhalte ich eine “Unable To Connect”-Fehlermeldung (was richtig zu sein scheint, da der Container nicht läuft).

Aber das verwirrt mich, da ich Nginx nicht auf diesem Server installiert habe.

Ich sehe in der Rebuild-Ausgabe, wo der Prozess Nginx-Dateien von einem Ort zum anderen kopiert, aber ich kann die entsprechenden Verzeichnisse oder Dateien, insbesondere nginx.conf, nirgendwo auf meinem Server finden. Ubuntu, Docker und Discourse sind nicht meine Hauptkompetenzen, aber ich gehe davon aus, dass diese Dateien “innerhalb” des Docker app-Containers kopiert werden.

Vielen Dank im Voraus; ich freue mich über jede zusätzliche Hilfe oder Anleitung bei diesem Problem, das anscheinend von Zeit zu Zeit bei Discourse-Upgrades auftritt.

UPDATE: Es stellt sich heraus, dass meine Annahme bezüglich des Docker app-Containers mit seinem eigenen internen Dateisystem korrekt ist. Sie können einen Snapshot des Container-Dateisystems erstellen und dieses Dateisystem mit bash erkunden.

# create image (snapshot) from container filesystem
$ sudo docker commit <container_id> mysnapshot
$ sudo docker run -t -i mysnapshot /bin/bash

Im app-Dateisystem gibt es ein nginx-Verzeichnis, das eine Discourse-Konfigurationsdatei enthält.

root@f91826d986eb:/etc/nginx/conf.d# ls -l
total 12
-rw-r--r-- 1 root root 10568 Oct  3 21:33 discourse.conf

Wie wäre es mit einem Neustart? Von hier aus

Dieses Update erfordert einen Neustart des Docker.

Ja, Ihr Discourse wird offline sein, während Sie ‘./launcher rebuild app’ in der Befehlszeile ausführen.

Alles wird zu 100 % in Ordnung sein, sobald der Neuaufbau abgeschlossen ist.

@IAmGav Docker scheint zu laufen.

@rmccown ZSm8WzJ7gLigPd08D4tiwt.png)

Ich werde einige der anderen Launcher-Befehle ausprobieren, um zu sehen, ob ich die Dinge zum Laufen bringen kann.

@IAmGav Ran ./discourse-doctor und es wurde auch bestätigt, dass der Docker-Container läuft.

==================== DOCKER INFO ====================
DOCKER VERSION: Docker version 20.10.11, build dea9396

DOCKER PROCESSES (docker ps -a)

CONTAINER ID   IMAGE                 COMMAND        CREATED       STATUS             PORTS                                                                      NAMES
6449ec0061a0   local_discourse/app   “/sbin/boot”   7 weeks ago   Up About an hour   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   app


Discourse container app läuft


@rmccown Habe sowohl start als auch restart ohne Erfolg versucht.

Erhalte immer noch dies unter der URL.

Das erneute Ausführen von sudo ./launcher rebuild app schlägt mit diesen Meldungen fehl (durchsuche gerade die Datei nach früheren Fehlermeldungen).

Wenn alles andere fehlschlägt – haben Sie versucht, es aus- und wieder einzustecken? :wink:

Starten Sie die Instanz neu: reboot now

Bringen Sie die Instanz auf den neuesten Stand: apt-get update und apt-get dist-upgrade

Führen Sie dann das Discourse-Upgrade aus.

1 „Gefällt mir“

@omarfilip Das ist das Erste, was ich versucht habe :wink:

Ich habe gerade einen Neustart versucht (keine Ubuntu 18.04.6-Komponenten, die von einem früheren Upgrade aktualisiert werden könnten).

Gleiche Ergebnisse – 502 Bad Gateway-Fehler unter der URL.

Aber danke für den Vorschlag.

1 „Gefällt mir“

Außerdem habe ich gerade Folgendes vom November 2020 gefunden – Upgrade ends with FAILED TO BOOTSTRAP.

Aber ich muss zugeben, dass ich nicht genau weiß, was es bedeutet, „unserem Standard-Release-Kanal zu folgen“. Ich gehe davon aus, dass ein Upgrade über die Weboberfläche der „Standard-Release-Kanal“ ist.

Das wäre „tests-passed“. Wenn Sie diese Zeile in Ihrer app.yaml-Datei nicht geändert haben, befinden Sie sich auf dem Standard-Release-Kanal:

  ## Welche Git-Revision sollte dieser Container verwenden? (Standard: tests-passed)
  #version: tests-passed

Kannst du den gesamten Log teilen? Das reicht nicht aus, um den eigentlichen Fehler zu sehen.

Ich verwende den Standard-Release-Kanal.

Und mein db_shared_buffers-Wert ist nicht 0 MB (dieses Problem habe ich hier gefunden).

@IAmGav Hier ist ein Gist, der die Ausgabe von ./launcher rebuild app enthält – link

Der einzige Hinweis auf einen FEHLER ist in der folgenden Gruppe von Zeilen (siehe unten).

Sie scheinen sich auf die Datenbank- und Rollenerstellung zu beziehen. Gibt es eine Möglichkeit, diese Aktionen zu umgehen? (was ich denke, dass Sie während eines Upgrades tun möchten, da Sie mit einer bereits vorhandenen Instanz arbeiten)

Zeilen 88-95

2021-11-25 21:21:38.451 UTC [64] postgres@postgres ERROR:  database "discourse" already exists
2021-11-25 21:21:38.451 UTC [64] postgres@postgres STATEMENT:  CREATE DATABASE discourse;
createdb: error: database creation failed: ERROR:  database "discourse" already exists
I, [2021-11-25T21:21:38.454429 #1]  INFO -- :
I, [2021-11-25T21:21:38.454908 #1]  INFO -- : > su postgres -c 'psql discourse -c "create user discourse;"' || true
2021-11-25 21:21:38.531 UTC [68] postgres@discourse ERROR:  role "discourse" already exists
2021-11-25 21:21:38.531 UTC [68] postgres@discourse STATEMENT:  create user discourse;
ERROR:  role "discourse" already exists

Mir ist buchstäblich dasselbe vor einer Weile passiert, ein Update ist mitten in einem Web-UI-Update fehlgeschlagen; sogar die Fehlermeldungen nach einem versuchten Rebuild sind so ziemlich dieselben und es ist immer noch ungelöst; der einzige Unterschied ist, dass ich eine Weile über die Web-UI aktualisieren konnte, außer dass vor ein oder zwei Tagen, nachdem ich zwei Wochen lang nicht aktualisiert hatte, jetzt die Meldung “Sie verwenden eine alte Version des Discourse-Images” angezeigt wird und ich jetzt überhaupt nicht mehr aktualisieren kann. :upside_down_face:

Anscheinend ist das ein Problem mit Redis.

Alle – Ursprünglichen Beitrag mit den im Laufe des Tages gesammelten Informationen aktualisiert. Danke an alle, die bisher gepostet haben.

Nein. Es gibt einen weiteren Fehler. Versuchen Sie, dieses Plugin zu entfernen.

Gem::ConflictError: Unable to activate omniauth-vkontakte-1.7.0, because omniauth-oauth2-1.7.2 conflicts with omniauth-oauth2 (>= 1.5, <= 1.7.1)

3 „Gefällt mir“

Nach Michaels Rat im obigen Beitrag habe ich ein Plugin in der Datei app.yml auskommentiert, das von einem anfänglichen Versuch der SSO-Authentifizierung mit dem VK-Plugin stammte (wir haben diese Implementierung nie umgesetzt, aber offensichtlich vergessen, das Plugin aus der app.yml-Datei zu entfernen).

## Plugins go here
## see https://meta.discourse.org/t/19157 for 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-vk-auth.git

Nachdem ich die obige Zeile auskommentiert hatte, führte ich erneut sudo ./launcher rebuild app aus. Nach dem Rebuild scheint die Forum-Website online und funktionsfähig zu sein (teste gerade).

Vielen Dank nochmals an alle, die sich die Zeit genommen haben, meine Beiträge zu lesen und zu kommentieren. Ihre Hilfe wurde sehr geschätzt (was gibt es Besseres, als hier in den USA den Thanksgiving-Feiertag zu verbringen :wink:).

Bleibt sicher.

4 „Gefällt mir“

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.