SSH-Befehle um ein (Contao-)Webprojekt zu sichern und wieder einzuspielen (Backup)

Autorin:
Rechtliches:
Impressum

Das ist ein Archivbeitrag. Er wird nicht aktualisiert, bleibt aber in der Originalfassung online.

Eine typische Contao 4-Installation liegt z.B. in:

/home/demoprojekt/ (darunter liegt dann nochmal der web-Ordner, auf den die Domain des Projekts zeigen sollte und in dem sich die die contao-manager.phar.php befindet).

Wechsle per SSH in das Verzeichnis das eine Ebene über Contao liegt um dort die nachfolgend beschriebenen SSH-Befehle auszuführen. Im genannten Beispiel also in den Ordner:

/home/

SSH-Befehl um die Dateien von Contao auf dem Webspace sichern

Mit diesem Befehl erstellst du eine gepackte Dateisicherung der Ordner und Dateien deines Contao-Projekts.
Wichtig: Du musst zusätzlich noch die Datenbank sichern (Befehl dafür weiter unten)!

Schauen wir uns mal den prinzipiellen Befehl an, den du noch an deine Situation anpassen musst:

tar -vczpf backup-demoprojekt-files_$(date +"%Y-%m-%d_%H-%M").tar.gz ./demoprojekt

Was bedeuten die einzelnen Bestandteile des Befehls?

tar weist den Server an, dass er das bekannte Programm tape archiver nutzen soll um die nachfolgenden Aktionen durchzuführen. Der Vorteil dieses Programms gegenüber zip ist, dass man hier auch die eingestellten Benutzerrechte für Ordner und Dateien mitsichern kann, so dass diese beim Entpacken wieder korrekt eingestellt sind. Das klappt aber nur dann, wenn der Server auf dem die Datei wieder entpackt wird UNIX-Dateirechte unterstützt.

-vczpf ist eine Abfolge von Optionen, die im Rahmen des Befehls umgesetzt werden sollen. Aufgeschlüsselt lautet die Vorgabe:

  • v = Aktiviere die ausführliche Anzeige der „Arbeiten“ die tar durchführt. Diese Option könnte man auch weglassen, aber ich sehe ganz gerne, wenn das Programm sein Werk tut. Wichtig ist, dass diese Option möglichst weit am Anfang der Optionen steht.
  • c = erstell ein Archiv
  • z = komprimiere das Archiv zusätzlich mit gzip, damit es noch weniger Platz verbraucht
  • p = Merke dir die Zugriffsrechte, damit du sie beim Extrahieren wieder ausgeben kannst
  • f = schreibe das Archiv in die nachfolgend genannte Datei. Diese Option muss zwingend als letzte Option in dieser Reihenfolge stehen, da es sonst Fehler gibt!

Wenn du dich noch mehr für die möglichen Optionen interessierst, findest du eine schöne Aufschlüsselung im Ubuntuusers-Wiki.

Die Anweisung backup-demoprojekt-files_$(date +"%Y-%m-%d_%H-%M").tar.gz legt fest, wie die Sicherungsdatei benannt sein soll. Den Begriff demoprojekt ersetzt du mit dem Namen deines Projekts (ohne Umlaute/Sonderzeichen). So ist sichergestellt, dass du bei deinen Sicherungsdateien später noch weißt, zu welchen Projekten sie gehören. Die nachfolgende Anweisung sorgt dafür, dass der Server eigenständig das aktuelle Datum mit Uhrzeit in den Dateinamen schreibt. .tar.gz ist die Dateiendung, die man bei einer tar-Datei mit zusätzlicher gzip-Komprimierung benötigt.

Die abschließende Anweisung ./demoprojekt gibt ab, welcher Ordner (samt Unterordner und Dateien) gesichert werden soll (davon ausgehend, dass du in der Struktur gerade eine Ebene über dem Projektordner bist). Ersetze den Begriff demoprojekt mit dem echten Namen deines Projektordners.

Wenn du im Befehl den Ordernamen und den Projektordner korrekt eingegeben hast, kannst du den gesamten Befehl in der Konsole eingeben und bestätigen. Der Server erstellt nun die gewünschte Dateisicherung, was je nach Größe des Projekts sehr unterschiedlich lange dauert. Warte einfach ab, bis die Arbeiten abgeschlossen sind und die Konsole dir anzeigt, dass sie zur Eingabe neuer Befehle bereit ist.

Nun musst du noch die Datenbank sichern…


SSH-Befehl um die Datenbank von Contao auf dem Webspace sichern

Mit diesem Befehl erstellst du eine gepackte Dateisicherung der MySQL-Datenbank deines Contao-Projekts. Falls du die Zugangsdaten der Datenbank nicht zur Hand hast, findest du sie im Contao-Projekt an dieser Stelle /app/config/parameters.yml. Die parameters.yml kannst du mit einem gängigen Editor öffnen und findest darin die für Contao hinterlegten Datenbank-Zugangsdaten.
Wichtig: Du musst zusätzlich noch die Daten vom Webspace sichern, falls du das noch nicht getan hast (Befehl dafür siehe oben)!

Der Befehl zur Sicherung der Datenbank ist strukturell wie folgt aufgebaut und muss noch an deine Situation angepasst werden:

mysqldump -h DBHOST -u DBUSER -p DBNAME -r backup-demoprojekt-database_$(date +"%Y-%m-%d_%H-%M").sql

Was bedeuten die einzelnen Bestandteile des Befehls?

mysqldump weist den Server an, dass er das üblicherweise verfügbare Programm mysqldump nutzen soll um ein sogenanntes logisches Backup der Datenbank zu erstellen.
Wichtig: Damit die Datenbank konsistent ist, sperrt der Befehl mysqldump die Datenbank für den Zeitpunkt der Sicherungserstellung. In dieser Zeit sind also keine Zugriffe auf die Datenbank möglich. Bei einer sehr großen Datenbank und der damit einhergehenden längeren Sperrzeit für die Erstellung der Sicherung, ist es daher ratsam, die Datensicherung zu einem Zeitpunkt zu machen, an dem gerade möglichst keine oder nur wenige Nutzer*innenzugriffe auf die Website erwartet werden.

  • -h DBHOST gibt an, an welcher Stelle der Server nach der Datenbank suchen soll. Ersetze DBHOST mit der Adresse des Datenbankservers. Bei vielen Servern ist das localhost, also der Datenbankserver befindet sich auf dem selben Server. Dann würde der Abschnitt -h localhost heißen. Bei anderen Anbietern ist der Datenbankserver separat untergebracht, so dass du hier eine Adresse wie z.B. beispiel.deinanbieter.de oder eine IP-Adresse eingibst und der Abschnitt nach diesem Beispiel -h beispiel.deinanbieter.de heißen würde.
  • -u DBUSER gibt an, wie der Datenbank-Nutzer heißt. Ersetze DBUSER mit dem entspchenden Nutzernamen aus den Zugangsdaten für die Datenbank. Wenn der Nutzer z.B. demoprojekt1 heißt, änderst du den Abschnitt in -u demoprojekt1 ab.
  • -p steht für das Passwort. Du gibst das Passwort aber nicht hier sichtbar an, sondern teilst dem Server mit, dass er dich aus Sicherheitsgründen später separat danach fragen soll.
  • DBNAME gibt an, welche Datenbank du wählen möchtest. Ersetze DBNAME daher mit dem Namen der Datenbank aus den Zugangsdaten. Wenn die Datenbank z.B. demoprojektdb heißt, änderst du den Abschnitt des Befehls in demoprojektdb ab.

Die Anweisung backup-demoprojekt-database_$(date +"%Y-%m-%d_%H-%M").sql legt fest, wie die Sicherungsdatei der Datenbank benannt sein soll. Den Begriff demoprojekt ersetzt du mit dem Namen deines Projekts (ohne Umlaute/Sonderzeichen). So ist sichergestellt, dass du bei deinen Sicherungsdateien später noch weißt, zu welchen Projekten sie gehören. Die nachfolgende Anweisung sorgt dafür, dass der Server eigenständig das aktuelle Datum mit Uhrzeit in den Dateinamen schreibt. .sql ist die Dateiendung, die man bei SQL-Datenbank benötigt.

Wenn du den gesamten Befehl nun in die Konsole eingibst und bestätigst, fragt die Konsole dich noch nach dem Passwort („Enter password“). Tippe das Passwort ein und bestätige mit der Enter-Taste. Das Passwort wird dir dabei aus Sicherheitsgründen nicht angezeigt, ebenso wenig wie die Länge des Passworts.

Sobald du das korrekte Passwort eingegeben und bestätigt hast, fängt der Server mit der Datenbanksicherung an. Wie lange das dauert, hängt von der Größe der Datenbank ab. Bei kleinen Webprojekten ist das oft binnen weniger Sekunden erledigt, bei großen Projekten kann es schon mal eine ganze Weile dauern. Deshalb sollten insbesondere Datensicherungen von großen Datenbanken zu Zeiten stattfinden, an denen möglichst keine Nutzer auf der Website sind, da die Datenbank während der Sicherung gesperrt ist.

Wenn du beide Sicherungen gemacht hast, kannst du sie dir wie gewohnt z.B. per FTP vom Server herunterladen.


SSH-Befehl um die Datensicherung von Contao auf dem Webspace zu entpacken

Ich geh davon aus, dass du die Datensicherung wie oben beschrieben gemacht hast.
Lade die Datei auf den Webspace auf dem du sie installieren möchtest. Beachte bitte, dass du sie möglichst auf eine Ebene lädst, die nicht von außerhalb erreichbar ist, da sonst Unbefugte Zugriff auf die Datei erhalten könnten.

Der Befehl zum Entpacken der Datensicherung ist wie folgt aufgebaut:

tar -xzf ./dateiname.tar.gz -C ./

Was bedeuten die einzelnen Bestandteile des Befehls?

Ich geh jetzt nicht mehr auf alle Details ein, da es auf derselben Logik aufbaut, die schon beim Packen der Dateisicherung relevant war.

Die Optionen -xzf bedeuten:

  • x = Die Daten sollen aus der Datensicherung extrahiert werden,
  • z = Da die Datensicherung per GZIP komprimiert wurde, muss sie jetzt wieder per GZIP zusätzlich dekomprimiert werden.
  • f = Die Daten sollen aus der angegebenen Datensicherungsdatei herausgelesen werden. Diese Option muss als letzte benannt sein, damit es keinen Fehler gibt.

Die Angabe ./dateiname.tar.gz gibt an, wo die Datei – ausgehend von deinem aktuellen Standpunkt am Server – liegt und wie sie heißt. Im Beispiel liegt sie also in dem Verzeichnis in dem du gerade bist (./) und heißt dateiname.tar.gz

-C ./ bedeutet, dass der tar archiever beim Entpacken der Datei in das nachfolgend angegebene Dateiverzeichnis wechseln und die Datensicherung dort entpacken soll. Im konkreten Beispiel würde die Datensicherung also in dem Verzeichnis entpackt werden, in dem wir uns gerade befinden.

Wichtig: Denk dran, die .tar.gz-Datei nach der erfolgreichen Entpackung wieder vom Server zu löschen.


SSH-Befehl um die Datenbank-Sicherung von Contao in die Datenbank einzuspielen

Ich geh davon aus, dass du die Datensicherung wie oben beschrieben gemacht hast.
Lade die Datenbank-Sicherung auf den Webspace auf dem du sie installieren möchtest. Beachte bitte, dass du sie möglichst auf eine Ebene lädst, die nicht von außerhalb erreichbar ist, da sonst Unbefugte Zugriff auf die Datei erhalten könnten.

Der Befehl zum Entpacken der Datenbank-Sicherung ist wie folgt aufgebaut:

mysql -hDBHOST -uDBUSER -p DBNAME < dateiname.sql

Was bedeuten die einzelnen Bestandteile des Befehls?

Ich geh jetzt nicht mehr auf alle Details ein, da es auf derselben Logik aufbaut, die schon beim Erstellen der Datenbanksicherung relevant war.
Du benötigst auch hier wieder die vollen Zugangsdaten für die Datenbank in die die Datenbanksicherung importiert werden soll.

  • Ersetze DBHOST durch die Adresse der Datenbank, DBUSER mit dem Datenbank-Nutzer und DBNAME mit dem Datenbank-Namen.
  • Ersetze dateiname.sql mit der korrekten Bezeichnung der Datenbanksicherung.
  • Bei Bedarf kannst du auch hier Pfadangaben machen, wenn beispielsweise die .sql-Datei in einem anderen Verzeichnis liegt.
  • Nach dem Absenden des Befehls wird auch hier wieder das Passwort der Datenbank abgefragt.

Wichtig: Denk dran, die .sql-Datei nach der erfolgreichen Entpackung wieder vom Server zu löschen.


Sonstige Empfehlungen zum Entpacken/Importieren von Contao-Datensicherungen

Ein paar Aktionen, die ich unmittelbar nach dem Entpacken und Importieren empfehle:

  1. Öffne in app/config/ die Datei parameters.yml und prüfe, ob die dort hinterlegten Datenbank-Zugangsdaten korrekt sind. Es wäre fatal, wenn du dich irrtümlich mit der falschen Datenbank verbindest und so z.B. ein Live-Projekt überschreibst.
  2. Schau nach, ob in system/config/ in der localconfig.php noch veraltete Angaben hinterlegt sind und korrigiere diese ggf.
  3. Lösche am besten unter var/cache den kompletten prod- und dev-Ordner, da es sonst passieren könnte, dass Contao daraus noch veraltete Daten nutzt (ebenfalls mit fatalen Ergebnissen).
  4. Öffne den Contao Manager, prüfe ob hier alle Pakete laufen.
  5. Öffne die Contao Install, ob hier alles ok ist.
  6. Log dich ins Contao-Backend ein, geh in die Systemwartung und lass hier nochmal alles ordentlich bereinigen (insbesondere Symlinks etc.).

Die Sache mit den Symlinks etc. kann man auch über die Konsole machen, aber das beschreibe ich ggf. mal in einem anderen Beitrag.

Zur Übersicht aller Artikel