Backup-Diskussionen über die Befehlszeile

:bookmark: This guide covers how to back up and restore your Discourse site using command line tools, specifically designed for self-hosted environments.

:person_raising_hand: Required user level: Administrator

:information_source: You can use the below placeholders to automatically fill out the command line prompts in this guide:

Backing up

To create a backup of your Discourse site, follow these steps:

  1. Enter the container:
./launcher enter app
  1. Run the backup:
discourse backup
exit

This will print out the final filename of your backup. Download the backup and container configuration (if needed) to your local machine:

scp =USER=@=HOST=:/var/discourse/shared/standalone/backups/default/=FILENAME= .
scp =USER=@=HOST=:/var/discourse/containers/app.yml .

Restoring

To restore a Discourse backup, follow these steps:

  1. Install a Discourse site on the server you are restoring to.

If you’re testing this procedure multiple times, you can wipe the data on your test server.

Wipe Discourse data (optional)
./launcher stop app
./launcher destroy app
rm -r /var/discourse/shared/standalone/
mkdir -p /var/discourse/shared/standalone/backups/default/

  1. Upload the backup file:
scp =FILENAME= =USER=@=HOST=:/var/discourse/shared/standalone/backups/default/
  1. Enter the container and start the restore:
./launcher enter app
discourse enable_restore
discourse restore =FILENAME=

If you happen to forget what the filename was, run the “discourse restore” command by itself to get a list of available backup files.

:information_source: For a two-container setup, use ./launcher enter web_only and replace standalone with web-only in the path to backups.

For additional information about restoring Discourse backups, see Restore a backup from the command line.

Last edited by @SaraDev 2024-08-23T20:50:17Z

Check documentPerform check on document:
40 „Gefällt mir“

Wo soll ich diesen Befehl ausführen? Auf meinem Cloud-Server-Terminal oder auf meiner lokalen Maschine?
Obwohl beides eine Fehlermeldung “Permission denied” ergibt

Auf Ihrem lokalen Computer.

Verwenden Sie einen SSH-Schlüssel für die Verbindung? Der Fehler hängt damit zusammen.

Der Befehl sollte dann lauten:

scp -i /pfad/zu/ihrem_schlüssel/ihr_schlüssel.pem root@147.43.15.199:/var/discourse/shared/standalone/backups/default/discourse-2024-12-25-033740-v20241211222608.tar.gz .

Ich habe ein Szenario, in dem ich die Discourse-Installation auf einen komplett neuen Server migrieren möchte.
Mein Plan war:

  1. Eine neue, leere Discourse-Installation erstellen
  2. Das alte Discourse sichern, das Backup auf den neuen Server kopieren (scp) und wiederherstellen
  3. Alle S3-Daten (Bilder usw.) auf ein neues S3-Konto kopieren

Der Wiederherstellungsprozess verläuft gut, bis er versucht, auf S3 zuzugreifen, und dann wegen fehlenden Zugriffs fehlschlägt. Ich glaube, er versucht, auf denselben S3-Bucket-Namen wie im alten Discourse zuzugreifen, aber dieser existiert im neuen nicht und ich kann ihn nicht erstellen.

Gibt es eine empfohlene Lösung?

Ich dachte, ich könnte versuchen, den S3-Bucket-Namen im alten Discourse zu ändern (bevor ich das Backup durchführe) und dann würde er bei der Wiederherstellung den neuen S3-Bucket erwarten. Aber ich befürchte, was mit dem alten Discourse passieren wird, wenn ich ihn einfach auf einen nicht existierenden Bucket umstelle.

Es gibt eine versteckte Einstellung, die die S3-Dateien herunterlädt und sie in das Backup einfügt.

Sie müssen S3 in der YML-Datei konfigurieren, wie unter Konfigurieren eines S3-kompatiblen Objektspeichers für Uploads beschrieben.

Wenn Sie dann das Backup wiederherstellen, werden die Uploads in den neuen Bucket verschoben.

1 „Gefällt mir“

Hast du das jemals herausgefunden?

Sie müssen S3 in Umgebungsvariablen konfigurieren, wie in Konfigurieren eines S3-kompatiblen Objektspeichers für Uploads beschrieben.

Dies gilt insbesondere, wenn die S3-Einstellungen auf dem neuen Server anders sind. Das Speichern der S3-Werte in der Datenbank kann viele Probleme verursachen.

Aber es gibt einen Schalter für den Wiederherstellungsbefehl, der ihn zwischen den verschiedenen Teilen pausieren lässt. Das kann helfen.

Kann ich kurz überprüfen, ob die Datei, die du hier erhältst, dieselbe ist wie die, die du beim Sichern über die Forum-Website bekommst?

Ich baue immer über die Kommandozeile neu auf, aber zuerst sichere ich über die Website ab. Diesmal habe ich das Sichern vergessen! Ich denke, wenn ich für beides die Kommandozeile verwende, könnte das mir helfen :slight_smile: Viel Glück!

Das Backup-Skript meldete:

Abgeschlossen!
[ERFOLG]
Backup durchgeführt.
Ausgabedatei befindet sich unter: /var/www/discourse/public/backups/default/DATEINAME.tar.gz

Zunächst habe ich versucht, diese herunterzuladen, was jedoch einen falschen Pfad enthält. Ich habe die Datei an anderer Stelle gefunden und erst dann bemerkt, dass die Befehle in diesem Thema korrekt sind…

Hi! Ich möchte nur darauf hinweisen, dass du für ein Backup ohne Uploads den folgenden Befehl verwendest:

discourse backup --sql-only

1 „Gefällt mir“

Guter Hinweis – wir sollten das (und ein paar andere kleine Ergänzungen) zum Eröffnungsposting hinzufügen.

2 „Gefällt mir“

Hey @supermathie ! Schön, dich zu “sehen”. Weiß nicht, ob du dich noch an mich erinnerst? Wir hatten vor einiger Zeit ein Interview.

Außerdem wäre es nett, wenn der --help-Parameter nach discourse backup funktionieren würde. Stattdessen heißt das Backup am Ende “–helpXXX”. :lolsob:

Cheers!

Mit Hilfe einiger KI-Tools haben wir eine umfassende Liste der Unterbefehle für den discourse-Befehl erstellt.
Die discourse-CLI (implementiert über script/discourse mit dem Thor-Gem) bietet 13 Kern-Unterbefehle, die in Backups & Wiederherstellungen, Site-Verwaltung & Modi, Datenbank-Utilities und Datenmigration (Import/Export) unterteilt sind.


Schnelle Befehlsreferenz

Kategorie Unterbefehl Hauptfunktion
Backup & Wiederherstellung backup Erstellt ein vollständiges oder nur datenbankbasiertes Backup-Archiv.
restore Stellt eine .tar.gz-Backup-Datei in der Instanz wieder her.
enable_restore Gewährt die Berechtigung, Wiederherstellungsbefehle auszuführen.
disable_restore Entzieht die Berechtigung zur Durchführung von Wiederherstellungen.
rollback Setzt den Datenbankstatus nach einer fehlgeschlagenen Wiederherstellung zurück.
Site-Modi enable_readonly Schaltet den temporären Nur-Lese-Modus für die gesamte Site um.
disable_readonly Entfernt den Nur-Lese-Modus, um normale Schreibvorgänge auf der Site wieder zu ermöglichen.
request_refresh Löst bei allen aktiven, verbundenen Clients einen Aufforderung zum Browser-Neuladen aus.
Datenbank-Operationen remap Führt eine globale Textsuche und -ersetzung über alle Datenbanktabellen hinweg durch.
Datenmigration export_category Exportiert eine einzelne Kategorie, ihre Themen und zugehörige Benutzer.
import_category Importiert ein Kategorie-Archiv in das aktuelle Forum.
export_topics Exportiert spezifische Themen nach ID sowie die Konten ihrer Autoren und Antwortenden.
import_topics Importiert ein Themen-Archiv in das aktuelle Forum.

Detaillierte Dokumentation der Unterbefehle

1. Backup- und Wiederherstellungsbefehle

discourse backup [DATEINAME]

  • Beschreibung: Erstellt ein vollständiges Backup der Forendatenbank und der Assets.

  • Flags:

  • --sql-only: (Boolean, Standard: false) Sichert nur die PostgreSQL-Datenbank und überspringt lokale Upload-Dateien.

  • --s3-uploads: (Boolean, Standard: false) Erzwingt die Aufnahme von in S3 gespeicherten Assets in das Backup-Archiv (wird ignoriert, wenn --sql-only gesetzt ist).

  • Beispiel:

discourse backup
discourse backup --sql-only

discourse restore [DATEINAME]

  • Beschreibung: Stellt ein Forum-Backup aus einem lokalen .tar.gz-Archiv im Verzeichnis /var/www/discourse/public/backups/default wieder her.
  • Voraussetzung: Erfordert die vorherige Ausführung von discourse enable_restore.
  • Beispiel:
discourse restore discourse-2026-07-22-120000-v2026xxxx.tar.gz

discourse enable_restore & discourse disable_restore

  • Beschreibung: Schaltet den Anwendungsflag um, der console- oder webbasierte Wiederherstellungsaufgaben erlaubt oder einschränkt.
  • Nutzungsabfolge:
discourse enable_restore
discourse restore <dateiname>
discourse disable_restore

discourse rollback

  • Beschreibung: Rollt das Datenbankschema und den Status auf den Zustand vor einer fehlgeschlagenen Wiederherstellung zurück.

2. Site-Status und Client-Steuerungen

discourse enable_readonly & discourse disable_readonly

  • Beschreibung: Setzt oder löscht den READONLY_MODE_KEY in Redis.
  • Details:
  • Sperrt Datenbank-Schreibvorgänge, während die Site für Benutzer weiterhin lesbar bleibt.
  • Verwendet eine kurze Time-to-Live (TTL)-Schleife, die während der Aktivität aktualisiert wird, um zu verhindern, dass die Site dauerhaft gesperrt bleibt, falls eine Terminal-Sitzung abstürzt.

discourse request_refresh

  • Beschreibung: Sendet eine Systemnachricht über MessageBus, die alle aktiven Web-Sitzungen anweist, die Webseite neu zu laden. Nützlich nach dem Bereitstellen von Asset-Updates oder globalen Theme-Änderungen.

3. Datenbank-Remapping

discourse remap [OPTIONEN] VON NACH

  • Beschreibung: Führt eine direkte String-Suche und -Ersetzung in Textspalten der Datenbank durch. Entscheidend bei der Aktualisierung von Domainnamen, CDN-Pfaden oder Image-Upload-Präfixen.

  • Flags:

  • --global: (Boolean) Durchsucht und remappt alle Tabellen statt nur der Standard-Inhaltstabellen.

  • --regex: (Boolean) Bewertet den VON-Parameter als regulären Ausdruck statt als literalen String.

  • Beispiel:

discourse remap "old-domain.com" "new-domain.com"
discourse remap --global "/uploads/default/" "/cdn-uploads/"

4. Selektiver Daten-Import und -Export

discourse export_category [KATEGORIE_ID]

  • Beschreibung: Serialisiert eine einzelne Kategorie, einschließlich aller verschachtelten Themen, Beiträge und beteiligten Benutzerprofile, in eine JSON-Archivdatei.

discourse import_category [DATEI_PFAD]

  • Beschreibung: Liest ein von export_category erstelltes Archiv und fügt die Kategoriedaten in die Zielinstanz ein.

discourse export_topics [THEMEN_IDS...]

  • Beschreibung: Nimmt eine oder mehrere durch Leerzeichen getrennte Themen-IDs und exportiert die Themen, Beiträge und relevanten Benutzerkonten.
  • Beispiel:
discourse export_topics 102 105 210

discourse import_topics [DATEI_PFAD]

  • Beschreibung: Importiert ein von export_topics erstelltes JSON-Archiv in die Ziel-Discourse-Instanz.
1 „Gefällt mir“