Ein Backup über die Kommandozeile wiederherstellen

:bookmark: Dieser Leitfaden erklärt, wie Sie ein Discourse-Backup über die Befehlszeile wiederherstellen, ohne die Discourse-Web-UI zu verwenden.
:person_raising_hand: Erforderliche Benutzerebene: Administrator
:wrench: Konsolenzugriff erforderlich

Hier erfahren Sie, wie Sie ein Discourse-Backup über die Befehlszeile wiederherstellen, ohne jemals die Discourse-Web-UI zu starten. Dies ist nützlich, wenn Sie Server wechseln.

Voraussetzungen

Bevor Sie beginnen, stellen Sie sicher, dass Sie die folgenden Schritte abgeschlossen haben:

  1. Laden Sie die neueste Sicherungsdatei von der Quell-Discourse-Instanz herunter.
  2. Richten Sie die Ziel-Discourse-Instanz ein, indem Sie ./discourse-setup ausführen oder Ihre vorhandene app.yml kopieren.
  3. Stellen Sie sicher, dass die Ziel-Discourse-Instanz auf der neuesten Version ist. Aktualisieren Sie sie bei Bedarf.

Die Sicherung übertragen

  1. Stellen Sie per SSH eine Verbindung zum Zielserver her oder erstellen Sie den Sicherungsordner dort auf andere Weise:

mkdir -p /var/discourse/shared/standalone/backups/default

  1. Laden Sie Ihre Sicherungsdatei auf den Zielserver hoch.

scp /path/to/backup/backup.tar.gz root@192.168.1.1:/var/discourse/shared/standalone/backups/default

Stellen Sie sicher, dass Sie die Pfade, Dateinamen und Servernamen durch die von Ihnen verwendeten ersetzen – aber Sie möchten, dass die Sicherungsdatei hier landet:

/var/discourse/shared/standalone/backups/default

:mega: Sie können Ihre Discourse-Sicherungsdatei auch von beliebten Web-Speicherseiten wie Google Drive, Dropbox, OneDrive usw. hoch- und herunterladen – Sie müssen die spezifischen Befehlszeilenanweisungen basierend auf Ihrem bevorzugten Web-Speicheranbieter nachschlagen.

:warning: ÄNDERN SIE DEN DATEINAMEN DER SICHERUNG NICHT! Discourse behandelt den Dateinamen der Sicherung als Metadaten. Wenn Sie den Dateinamen ändern, funktioniert die Wiederherstellung nicht. Behalten Sie den ursprünglichen Dateinamen bei.

Ersetzen Sie /path/to/backup/discourse-xyz.tar.gz durch den lokalen Pfad Ihrer Sicherungsdatei und ersetzen Sie \u003cserver_ip_address\u003e durch die IP-Adresse des Zielservers.

:bulb: Wenn Nginx als Reverse-Proxy verwendet wird, stellen Sie sicher, dass alle Pfade zur Sicherung vom Container lesbar sind und Nginx die .sock-Datei lesen kann.

Die Sicherung wiederherstellen

  1. Greifen Sie auf Ihren Zielserver zu und navigieren Sie zum Discourse-Ordner:
cd /var/discourse
  1. Rufen Sie den Discourse Docker App-Container auf:
./launcher enter app
  1. Aktivieren Sie die Wiederherstellungsfunktion:
discourse enable_restore
  1. Stellen Sie die Sicherungsdatei wieder her:
discourse restore sitename-2019-02-03-042252-v20190130013015.tar.gz

:bulb: Tipp: Wenn Sie discourse restore ohne Dateinamen ausführen, werden alle verfügbaren Sicherungsdateien aufgelistet.

:warning: Wenn die Einstellung backup_location Ihrer Website so konfiguriert ist, dass S3 verwendet wird, Sie die Sicherungsdatei aber manuell in das lokale Dateisystem hochgeladen haben, müssen Sie --location local angeben:

discourse restore --location local sitename-2019-02-03-042252-v20190130013015.tar.gz

Verwenden Sie auf ähnliche Weise --location s3, um die Wiederherstellung direkt aus einer S3-Sicherung vorzunehmen, ohne sie vorher herunterzuladen.

  1. Beenden Sie den Discourse Docker App-Container:
exit

Erneut erstellen (Rebuild)

Nachdem Sie die Sicherung wiederhergestellt haben, können Sie die Zielinstanz erneut erstellen, um sicherzustellen, dass alle Einstellungen und Konfigurationen korrekt angewendet werden.

:mega: Jetzt ist ein guter Zeitpunkt, um /var/discourse/containers/app.yml mit vollständigem HTTPS, zusätzlichen Plugins oder CDN-Konfigurationen zu aktualisieren. Vergleichen Sie die app.yml-Konfiguration beider Instanzen, um sicherzugehen!

cd /var/discourse
./launcher rebuild app

E-Mail aktivieren

Wenn eine Sicherung wiederhergestellt wird, wird der ausgehende Mailverkehr für Nicht-Mitarbeiter deaktiviert. Sie möchten nicht, dass Ihr Testserver, neuer Server oder ein Server, für den Sie aus einem anderen Grund eine Sicherung wiederhergestellt haben, anfängt, Ihre Benutzer anzuschreiben! Ändern Sie die Website-Einstellung disable_emails auf „no“, um E-Mails wieder zu aktivieren.

:tada: Das war’s. Ihr Discourse-Server wurde erfolgreich wiederhergestellt.

78 „Gefällt mir“
Move your Discourse Instance to a Different Server
Any other way to take backup and restore?
How easy is it to move to another server?
HELP! My Discourse just deleted everything?
Restore backup is broken
How to migrate Discourse from one server to another with the same DNS name
Best Practices for Backups
Problem upgrading Discourse
Upgrading v2.2.0.beta4 forum with unknown local changes
Set up file and image uploads to S3
Quick question about site backups
My install broke after updating, how can I fix it?
Is there any way to restore your site from backup in the terminal?
Migrating Discourse from one DigitalOcean droplet to another without downtime
Restore backup right away after installing Discourse
Unable to migrate to S3, therefore unable to restore from backup
Restore Failure - S3 (compatible) backup
"EXCEPTION: psql failed: DETAIL: Key (post_id)=(36946) is duplicated."
Migrate from another forum to Discourse
My install is 16,359 commits behind! Advice?
Trying to recover an installation
Migration failed: relation "user_required_fields_versions" already exists
How can I manually verify via the CLI and bypass the Congratulations, you installed Discourse! screen?
Configuring automatic backups
Migrating to a new server that has a new DB and new S3 buckets for backup and uploads
Intended path to migrate S3 to local
Problem when updating Discourse Forum
Failed to restore from the backup
Steps involved to downgrade from 2GB to 1GB on DO?
Forum offline: Restore is not working through web
Forum offline: Restore is not working through web
Testing Restore - not working
Entire site is a blank page after upgrade
"discourse: command not found" when trying to restore a backup from the command line
Stuck with 500 error after weird bugs and a rebuild
Plesk server migration
"Key is stored in legacy trusted.gpg keyring" warning
"Key is stored in legacy trusted.gpg keyring" warning
Discourse broken after moving servers
Stuck and lost updating forum, problems with PG migration
How to manually migrate s3 files to local?
Index_users_on_username_lower error during database restore: import failed
How can I get the current version information from my backup?
Backup Prod -> Snap -> Build Test -> Change Address
How to properly package discourse as an image
2FA with OTP broken after restoring from Backup
I'm trying to migrate an old discourse by creating a new discourse, but I'm having trouble
Recover from filesystem backup: can't rebuild nor start
Error: Can't notify admin while restoring backup during a migration to a fresh install
MKJ's Opinionated Discourse Deployment Configuration
Migrate from AWS to Digital Ocean with 2 containers, spaces and 2 CDNs
Cannot restore database: sql key is duplicated
Finding UI generated backup and restoring site
Backup discourse from the command line
Migration to a Self-Hosted solution from Kubernetes
How to download the backup file without SMTP function?
Redis Problems? (Forum broken after upgrade)
Can't upload backup
Can't upload backup
Can't upload backup
Rate limiter issues when uploading a backup file / can't disable rate limiter
Help restoring - system hung at midnight
Help restoring - system hung at midnight
Uploads missing after restore
My install is 16,359 commits behind! Advice?
Issues Rebuilding After Upgrade to Ubuntu 22.04

Diese Anweisungen funktionierten für uns, um aus einem Backup wiederherzustellen, aber wir mussten den Befehl discourse restore wie folgt ändern:

discourse restore --location local sitename-2019-02-03-042252-v20190130013015.tar.gz

(mein Beispiel verwendet den Dateinamen aus dem obigen Beispiel), damit die Wiederherstellung die Backups finden konnte, die wir im Verzeichnis /var/discourse/shared/standalone/backups/default abgelegt hatten (im Gegensatz zu Backups, die auf S3 gespeichert waren).

2 „Gefällt mir“

Ist der Wiederaufbau nach der Wiederherstellung notwendig?

Außerdem habe ich auf einem neuen Server wiederhergestellt, auf dem sich ein NGINX-Reverse-Proxy befindet, der dann an den Upstream-Discourse weiterleitet. Daher habe ich SSL auf Discourse deaktiviert, aber ich habe bemerkt, dass während der Wiederherstellung:

Remapping 'https://example.com' to 'http://example.com'

Werden dadurch alle internen Links neu zugeordnet? Ist es so einfach, dies rückgängig zu machen, wie discourse remap http://example.com https://example.com?

Nein.

Sieht so aus. Ja, du kannst sie neu zuordnen.

Du solltest die Variable force_https setzen.

1 „Gefällt mir“

Wenn das Backup 15 GB beträgt, wie viel Speicherplatz wird dann für die Wiederherstellung benötigt?

1 „Gefällt mir“

Ist das nur die Datenbank oder auch Uploads?

Wahrscheinlich 3-5x so viel.

1 „Gefällt mir“

Es ist Datenbank+Upload 15 GB, ich habe 20 GB Speicher auf einer 60 GB Festplatte, aber die Wiederherstellung schlägt jedes Mal fehl. Ich benötige mindestens 50-60 GB Speicher für die Wiederherstellung?

1 „Gefällt mir“

Sie benötigen genügend Speicherplatz für das Backup, die Uploads und die unkomprimierte Datenbank.

Sie könnten versuchen, zuerst nur ein Datenbank-Backup wiederherzustellen und dann die Uploads manuell mit rsync zu kopieren.

2 „Gefällt mir“

Ich habe mein Admin-Konto auf Self-Host verifiziert und ein .sql.gz-Backup hochgeladen, kein .tar.gz.

Die Wiederherstellung über die Benutzeroberfläche ist nicht erfolgreich, daher habe ich den Prozess über die Befehlszeile mit „Backup wiederherstellen“ durchgeführt. Am Ende des discourse restore-Prozesses kam die Meldung [FAILED]. Könnte die Eingabedatei von einem offiziellen Hoster, die .tar.gz ist, den Prozess zum Erfolg führen?

Mein offizieller Hoster ist ein paar Tage alt, und mein Self-Host funktionierte heute nach dem Ändern der SMTP-Werte in container.yml wieder richtig.

1 „Gefällt mir“

Sie müssen den Fehler angeben, den Sie erhalten haben. Der Dateiname enthält Versionsinformationen. Wenn Sie die Datei umbenannt haben, müssen Sie sie wahrscheinlich zurückbenennen und nur die Wörter am Anfang des Dateinamens ändern.

1 „Gefällt mir“

Gibt es irgendwo eine Dokumentation für discourse restore? Da es anscheinend einen --location local-Schalter gibt, nehme ich an, es gäbe auch einen für S3?

Ich möchte von auf S3 gespeicherten Backups wiederherstellen und vermeiden, sie vorher manuell herunterzuladen.

BEARBEITUNG: NVMD. Ich habe gerade herausgefunden, dass discourse restore --location s3 $filename scheinbar ganz gut funktioniert.

2 „Gefällt mir“

Da ich S3 in app.yml aktiviert habe, hat ein reines discourse restore <Dateiname> einwandfrei funktioniert.

Ich denke, wenn Sie nach backup restore s3 suchen, finden Sie den richtigen Beitrag.

2 „Gefällt mir“

Hallo, ich habe diesen Prozess mit s3(-cli) als mein scp und einer Änderung des ausgehenden Mail-Anbieters von MailGun zu Brevo abgeschlossen

Seit der Wiederherstellung kann ich das Banner nicht mehr entfernen?

Der einfachste Weg, das Banner zu entfernen, ist die Aktivierung von E-Mails in den Website-Einstellungen

3 „Gefällt mir“

[quote=“Moin, post:71, topic:108034”]Der einfachste Weg, das Banner zu entfernen, ist, E-Mails in den Website-Einstellungen zu aktivieren.
[/quote]

Stimmt. Man könnte es auch mit CSS ausblenden! :joy:

1 „Gefällt mir“

Wahr. Ich war etwas vorsichtig, dies zu empfehlen, weil ich an Air theme hides "outgoing email disabled" warning denken musste

1 „Gefällt mir“

Jedes Mal, wenn Sie ein Backup wiederherstellen, werden E-Mails für Nicht-Mitarbeiter automatisch deaktiviert. Ich stelle mir vor, dass dies ein paar Mal in den Code aufgenommen wurde, nachdem ein Backup auf einem Testserver wiederhergestellt wurde, der begann, seine Benutzer mit Benachrichtigungen für einen Server zu überfluten, von dem sie nichts wissen sollten.

Ich habe den OP entsprechend aktualisiert:

2 „Gefällt mir“

Hinweis für die Anleitung:

Wenn Sie regelmäßig Backups zu Testzwecken wiederherstellen und Ihr Testserver richtig konfiguriert ist, um E-Mails an einen Debugging-E-Mail-Dienst (wie GitHub - maildev/maildev: 📫 SMTP Server + Web Interface for viewing and testing emails during development.) zu senden, möchten Sie möglicherweise E-Mails per Skripting aktivieren:

docker exec -it app /bin/bash --login \
-c "rails runner 'SiteSetting.disable_emails=\"no\";'"

In diesem Fall sollten Sie in Ihrer app.yml DISCOURSE_DISABLE_EMAILS auf nein setzen. (und auch DISCOURSE_ENABLE_RESTORE, um Wiederherstellungen zu erleichtern)

1 „Gefällt mir“