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:

  1. Es wird ein Datenbankbackup in system/tmp erstellt.
  2. 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.

  1. Das Python-Modul steht nicht bei allen meiner Kundenservern zur Verfügung.
  2. 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).