Die WordPress Instanz ist jetzt grundsätzlich einsatzfähig: Sie ist über das Internet verfügbar gemacht, ist an die Corporate Identity angepasst und wir schreiben auch schon munter Artikel – aber Achtung: Zwar sind die Basiskonfiguration, sowie die Plugin- und Theme-Folder im Git versioniert und daher gesichert, für die Datenbank gilt dies aber noch nicht. Das müssen wir jetzt dringend nachholen!
Backup-Script erstellen
Unser Backup-Konzept sieht wie folgt aus: Wir implementieren ein Script, das im MYSQL-Container laufen soll und die lokale Datenbank per mysqldump sichert. Es wird in den Container gemounted, ist so von der Versionsverwaltung erfasst und schreibt Backups nach /var/backups:
#!/bin/bash
datetime=`date +"%Y%m%d%H%M%S"`
dir=/var/backups
target=$dir/$MYSQL_DATABASE-$datetime.sql.gz
mkdir -p "$dir"
mysqldump \
--user=$MYSQL_USER \
--password=$MYSQL_PASSWORD \
--max-allowed-packet=1G \
--triggers \
--routines \
--quick \
--add-drop-database \
--default-character-set=utf8 \
--host=localhost \
--databases "$MYSQL_DATABASE" | gzip -9 > $target
Datensicherung auf NFS Share
Wir haben einen NFS Server, auf dem die Backups abgelegt werden sollen. Der vom Server exportierte Folder wiederum wird über Dropbox in die Cloud synchronisiert. Daher müssen wir das /var/backups Volume nur auf den NFS Share mounten: Dazu wird im Docker-Compose das Mapping in der Servicedefinition für db erweitert und in der Volume-Konfiguration der NFS-Zugriff konfiguriert:
...
services:
db:
...
volumes:
- ./volumes/mysql/mysqlbackup.sh:/usr/local/bin/mysqlbackup.sh:ro
- nas1_backup:/var/backups
...
volumes:
db_data: {}
nas1_backup:
driver: local
driver_opts:
type: "nfs"
o: "addr=ip-des-nfs-servers,rsize=65536,wsize=65536,timeo=14,tcp,rw,noatime"
device: ":/export-und-zielpfad-zum-backup-folder"
Dazu muss der NFS-Client auf der VM installiert sein. Unter Ubuntu geht das beispielhaft über das folgende Kommando:
sudo apt install nfs-common
Nach dem Neustart des Containers kann die Sicherung nun von außen über das folgende Kommando angestoßen werden:
docker exec -it docker_wordpress_db_1 /bin/bash -c "chmod +x /usr/local/bin/mysqlbackup.sh; /usr/local/bin/mysqlbackup.sh"
Sicherung einrichten
Das ginge z.B. über einen Cron-Job auf der VM. Allerdings wollen wir Konfigurationen auf der VM vermeiden, um etwa bei einem Ausfall schnell auf eine andere beliebige VM mit dem Container umziehen zu können. Daher benutzen wir Jenkins und fügen dort einen täglich laufenden Freestyle-Job ein, der das folgende Script ausführt:
ssh -tt -l jenkins 192.168.1.24 -o StrictHostKeyChecking=no "\
docker exec -it docker_wordpress_db_1 \
/bin/bash -c \"chmod +x /usr/local/bin/mysqlbackup.sh; /usr/local/bin/mysqlbackup.sh\""
Desaster Recovery proben
TBD
Schreibe einen Kommentar