Backup Export und Import - GeoMatDigital/django-geomat GitHub Wiki

Einführung

Ein vollständiges Backup der Datenbank lässt sich am zuverlässigsten mit Hilfe der eingebauten dumpdata Funktion von manage.py erledigen. Dafür müssen ein paar Schritte erledigt werden.

Export

Sobald man sich per ssh mit der VM verbunden hat, kann man mit Hilfe von dokku eine Shell-Umgebung innerhalb des laufenden App Containers starten. Die Produktions-App von GeoMat ist bei Dokku als geomat eingespeichert.

dokku enter geomat

Danach befindet man sich im Ordner /app innerhalb des Docker Containers. Hier liegen alle Dateien, welche in dieser GitHub Repository zu finden sind.

herokuishuser@587451e3ea93:~$ pwd
/app
herokuishuser@587451e3ea93:~$ ls
bin	 CONTRIBUTORS.txt    docs     locale	 pytest.ini    requirements.txt  staticfiles
compose  dev.yml	     geomat   manage.py  README.md     runtime.txt	 utility
config	 docker-compose.yml  LICENSE  Procfile	 requirements  setup.cfg

Da mit Hilfe von dokku enter alle nötigen Umgebungsvariablen automatisch exportiert wurden, hat man innerhalb dieser Shell Sitzung Zugriff auf die Datenbank. Einen Export aller Django Daten vollführt man nun mit folgendem Befehl durch.

python manage.py dumpdata --indent 4 --exclude auth --exclude contenttypes > $(date +"%Y%m%d")_geomat_full_dump.json

Gibt man keine explizite App an, werden alle Daten exportiert. Dabei exkludieren wir auth und contenttypes, da beim anschließenden Import Probleme auftreten können. Es wird eine Datei mit dem aktuellen Datum erstellt, wie z.B. 20170417_geomat_full_dump.json.

Diese Datei muss jetzt nur noch aus dem Docker Container auf das Host-System kopiert werden. Zu erst beendet man also die Shell Sitzung mit exit, damit man erneut in der Shell des Host-Systems ist.

docker cp 587451e3ea93:/app/20170417_geomat_full_dump.json .

Import

Nachdem eine neue Dokku App erstellt, mit der Datenbank verbunden und die App- und Domaineinstellungen getätigt wurden, kann man mit dem Import der Daten beginnen. Zu erst kopiert man die eben exportierte JSON-Datei in den neuen Container.

docker cp 20170417_geomat_full_dump.json <NEUER-CONTAINER-ID>:/app/.

Erneut stellt man mit Hilfe von Dokku eine Verbindung zum Container her.

dokku enter geomat-neu

Hier sollte nun die exportierte JSON-Datei vorhanden sein. Falls noch nicht erledigt, müssen vor dem Import noch die Datenbank-Migrationen durch Django erledigt werden.

python manage.py migrate

Ist dies ohne Fehler abgeschlossen, kann der Dump importiert werden.

python manage.py loaddata 20170417_geomat_full_dump.json

Danach sollte das Backup wiederhergestellt sein und die App sich im vorherigen Zustand befinden.