Contao mit Ansible verwalten - Teil 3
von Kirsten Roschanski
Backup der Datenbank und lokale Sicherung
Grundlage
Die Grundsteine sind bereits gelegt. Auf dieser Basis setze ich heute weiter auf und möchte ein Datenbank Backup machen.
Vorbereitung
In meine Struktur füge ich nun einen weiteren Ordner für Backups ein sowie das neue Playbook. Damit sieht meine Struktur nun wie folgt aus:
contao-ansible // Verzeichnis für Ansible-Playbooks
customers // Verzeichnis für Installationen
kirsten-roschanski.de.yml // Konfig meiner Webseite
templates // Verzeichnis für Templates
composer.j2
contao-manager-config.j2
contao-manager-user.j2
localconfig.php.j2
parameters.sh.j2
backups // Verzeichnis für Datenbankbackups
ansible.cfg
update_base.yml
install_base.yml
datenbank_backup.yml
datenbank_backup.yml
---
- hosts: all
tasks:
- name: Dump of Databse
shell: "mysqldump -u {{ database_user }} --password={{ database_password }} -h {{ database_host }} {{ database_name }} > {{ websitePath }}/system/tmp/dump.sql"
args:
chdir: "{{ websitePath }}"
- name: Copy from remote to local
ansible.builtin.fetch:
src: "{{ websitePath }}/system/tmp/dump.sql"
dest: "./backups/{{ ansible_date_time.date }}-{{ inventory_hostname }}.sql"
flat: yes
Was macht dieses Playbook?
Es werden nur 2 Tasks abgearbeitet:
- Es wird ein Datenbankbackup in system/tmp erstellt.
- Der Datenbankdump wird auf die lokale Festplatte kopiert.
Information
Sicherlich kann man überlegen das Ansible Modul für Datenbanken zu nutzen. Ich habe mich bewusst dagegen entschieden.
- Das Python-Modul steht nicht bei allen meiner Kundenservern zur Verfügung.
- Ob das Passwort nun in der Konsole ist oder nicht macht keinen zusätzlichen Sicherheitsgewinn, da es eh im Klartext in der Datei steht.
Wie führe ich das nun aus?
Wenn ich nur eine Installation aktualisieren möchte, dann nutze ich folgenden Befehl:
ansible-playbook -i customers/kirsten-roschanski.de.yml datenbank_backup.yml
dieses kann ich nur machen, da mein SSH-Key auf dem Server hinterlegt ist. Wenn ich das Passwort eingeben muss, dann rufe ich das mit der Option -k auf:
ansible-playbook -i customers/kirsten-roschanski.de.yml -k datenbank_backup.yml
Da ich aber mehre Installationen mit einem mal aktualisieren möchte, lasse ich die Angabe für die Installation weg:
ansible-playbook datenbank_backup.yml
Das geht nur weil wir in der ansible.cfg den Ordner angegeben haben. Wenn man nun verschiedene Kundengruppen macht, dann kann mit -i Ordnername auch diese Gruppe angesprochen werden.
Wie geht es weiter?
Das Upgrade von Contao 4.10 auf 4.11 steht noch aus, sowie ein vollständiges Backup mit allen relevanten Daten (files und templates).