Ich habe etwas gelernt, das anderen helfen könnte.
Hintergrund: Wie anderswo detailliert beschrieben, wurde meine Discourse-Installation auf einem VPS gehostet, dessen Festplatte zu klein war, um ein Upgrade abzuschließen. Zuerst klickte ich im Admin-Kontrollfeld auf „Upgrade“. Das Upgrade schlug fehl und die GUI funktionierte nie wieder. Danach meldete ich mich an der Konsole meines VPS an und gab den berühmten Befehl ./launcher rebuild app ein. Auch dieser wurde nie vollständig ausgeführt: Mir ging der Festplattenspeicher entscheidend aus. Um mehr Speicherplatz zu erhalten und im Budget zu bleiben, beschloss ich, mein gesamtes Setup auf einen neuen VPS bei einem anderen Hosting-Unternehmen zu verschieben. Die Sicherung der wertvollen Website-Daten hatte hohe Priorität.
Fehler: Die beiden offensichtlichsten Methoden zur Sicherung funktionierten nicht:
- Mein ursprünglicher Versuch, das Upgrade durchzuführen, beschädigte die webbasierte GUI, sodass es keine Möglichkeit gab, auf das Admin-Kontrollfeld zuzugreifen und von dort aus eine Sicherung zu initiieren.
- Der Versuch, in den Docker-Container zu gelangen und ihm einige Shell-Befehle zu geben, funktionierte ebenfalls nicht. Der empfohlene Befehl dafür ist
/var/discourse/launcher enter app. Aber zumindest in meinem Fall versuchte daslauncher-Skript, die App neu zu erstellen, bevor es mir erlaubte, sie zu betreten, und die Neuerstellungen schlugen durchweg fehl, sodass dieser Befehl mir nie einen Container verschaffte, geschweige denn eine Shell darin.
Erfolg: Ich wollte schon aufgeben, als ich eine angenehme Überraschung erlebte. Als ich auf der Kommandozeile meiner kleinen VM arbeitete, gab ich docker ps ein und stellte fest, dass ein aktiver Container namens app vorhanden war. Und Docker hat eine direkte Möglichkeit, in einen laufenden Container zu gelangen: Der Befehl lautet docker exec -it app bash.
Innerhalb des Containers konnte ich Fortschritte machen: Ich gab den Befehl discourse backup ein, wartete ein paar Minuten und kopierte dann die Datei <backup>.tar.gz an einen sicheren neuen Ort. Mit einer aktuellen Sicherung war es möglich, die Migration meines Setups an seinen neuen Standort abzuschließen. (Es gibt andere Threads in diesen Foren, die zeigen, wie das geht.)
Der entscheidende Punkt hier ist, dass der obige docker-Befehl zum Betreten des Containers funktionierte, auch wenn der Discourse-spezifische ./launcher-Befehl dies nicht tat.
Vielen Dank an die Erfinder und Betreuer dieses hervorragenden Produkts.