Contao mit Ansible verwalten - Teil 4

von Kirsten Roschanski

Upgrade von Contao

Grundlage

Die Grundsteine sind bereits gelegt. Auf dieser Basis setze ich heute weiter auf und möchte ein Contao Upgrade von Version 4.10.7 auf 4.11.0 durchführen.

Vorbereitung

In meine Struktur füge ich nun das neue Playbook ein. 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
  upgrade_base.yml

upgrade_base.yml

---
- hosts: all
  tasks:
  - name: 'Show Contao Version'
    command: "{{ php_path }} {{ websitePath }}/vendor/bin/contao-console contao:version"
    register: version
  - debug:
     var: version.stdout_lines

  - name: 'Edit Composer JSON'
    replace:
      path: "{{ websitePath }}/composer.json"
      regexp: 'contao/(.*):.*\d\.\d+.*(".*)$'
      replace: 'contao/\1: "{{contao_version}}.*\2'
      backup: yes

  - name: 'Contao-Manager Update'
    shell: "{{ php_path }} -d memory_limit=-1 web/contao-manager.phar.php self-update"
    args:
      chdir: '{{ websitePath }}'
    register: update
  - debug:
     var: update.stdout_lines

  - name: 'Update Contao'
    shell: "{{ php_path }} -d memory_limit=-1 web/contao-manager.phar.php composer update"
    args:
      chdir: '{{ websitePath }}'
    register: update
  - debug:
     var: update.stdout_lines

  - name: 'Datenbankupdate for Contao'
    command: "{{ php_path }} -d memory_limit=-1 {{ websitePath }}/vendor/bin/contao-console contao:migrate"
    register: dbupdate
  - debug:
     var: dbupdate.stdout_lines

  - name: 'Show Contao Version'
    command: "{{ php_path }} {{ websitePath }}/vendor/bin/contao-console contao:version"
    register: version
  - debug:
      var: version.stdout_lines

Was macht dieses Playbook?

Es werden folgende 6 Tasks abgearbeitet:

  1. Anzeige der aktuellen Contao Version
  2. Verändern der compser.json und anlegen einer Kopie
  3. ContaoManager noch mal prüfen und ggf. aktualisieren
  4. Contao Update durchführen
  5. Datenbank aktualisieren
  6. Neue Contao-Version ausgeben
Information

Die zu installierende Version muss im Config-File angegeben werden.

contao_version: "4.10"

wird zu

contao_version: "4.11"

Danach kann man das Playbook nutzen.

Wie führe ich das nun aus?

Wie auch schon bei der Installation, wähle ich hier bewusst eine Installation aus und lasse das nicht über alle laufen, auch wenn ich das könnte.

ansible-playbook -i customers/kirsten-roschanski.de.yml upgrade_base.yml

Ohne Passwort kann ich das 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 upgrade_base.yml
Warnung

Auch wenn ich damit beliebig die Contao-Versionen rauf und runter gegangen bin, so empfehle ich doch vorher ein Backup zu machen. Denn meine Installation zum Testen ist da nicht so wichtig.

Wie geht es weiter?

Eigentlich wollte ich gestern zeigen wie man ein vollständiges Backup macht, allerdings gibt es da noch Unstimmigkeiten was man alles Sichern sollte. Ich hatte euch auch schon auf Twitter gefragt. Allerdings ist das zu einer heißen Disskusion gestern geworden.

Aktueller Stand: Vergiss was der Installation gemacht wurde, nur was zentral liegt ist gültig. Wenn was geändert werden soll, dann bitte in der Konfiguration. So kann man die Änderungen auch mit git dokumentieren.
Demnach würden die Ordner files und templates sowie ein Datenbank-Dump reichen. Aber wir sind damit noch nicht am Ende ;-)

Heute haben wurden dann die ersten Themes vollständig automatisch installieren, so das man diese dann direkt nutzen kann:

  • Isotope-Demo installiert in 6 Minuten
  • Conato-Demo installiert in 4 Minuten
  • Optimist installiert in 3 Minuten
  • Basis-Theme installiert in 2 Minuten

Stoff ist also genug da.

Projektdateien

Wer sich das nicht kopieren möchte kann auch gerne das GitRepro nutzen. Änderungen, Ideen und auch Feedback sind jederzeit gerne willkommen.