Skip to content

Docker Setup

developeregrem edited this page Aug 15, 2019 · 27 revisions

Inhaltsübersicht

Mit pve-dockerized steht ein vorkunfiguriertes docker-compose setup bereit, was alles beinhaltet, um die Pensionsverwaltung in der aktuell stabilen Version laufen zu lassen. Dies beinhaltet einen Webserver, Datenbankserver, PHP und das Tool selbst.

Auf dieser seite wird beschrieben, wie die Pensionsverwaltung mithilfe von Docker und docker-compose verwendet werden kann.

Docker und docker-compose installieren

Im folgenden wird exemplarisch gezeigt, wie Docker und docker-compose unter Debian 10 (buster) auf einem Odroid C2 (arm64) installiert werden. Für andere Plattformen bitte die Docker Dokumentation konsultieren.

  • Sicherstellen, dass alle Abhängigkeiten verfügbar sind

    sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common

  • Dockers GPG Schlüssel hinzufügen

    curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

  • Dockers repository für die arm64 Architektur hinzufügen

    sudo add-apt-repository "deb [arch=arm64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"

  • Docker installieren

    sudo apt update
    sudo apt install docker-ce docker-ce-cli containerd.io
    
  • docker-compose installieren

    sudo apt install python3-pip python3-dev libffi-dev
    pip3 install setuptools wheel
    pip3 install docker-compose
    

pve-dockerized

Installation

  • In das Zielverzeichnis wechseln (empfohlen /opt/) und docker-compose setup herunterladen

    cd /opt
    git clone https://github.com/developeregrem/pve-dockerized.git
    cd pve-dockerized
    

    Falls noch nicht vorhanden, muss git installiert werden: apt install git

Konfiguration

  • die Datei .env.dist kopieren und in .env umbenennen

    cp .env.dist .env

  • .env mit einem Texteditor öffnen und anpassen

    • passe den Hostnamen (HOST_NAME) an (z.B. pve, localhost oder mydomain.tld).

      Unter dem Hostnamen wird später die Anwendung erreichbar sein. Wird die Anwendung im lokalen Netz installiert, kann als Hostname pve beibehalten werden. Später ist die Anwendung dann unter https://pve/ mit dem Webbrowser erreichbar.

      Der Hostname muss ebenfalls in den Dateien /etc/hostname und /etc/hosts eingetragen sein, sofern die Anwendung im lokalen Netzwerk installiert wird. Wer Armbian als Betriebssystem einsetzt kann dies mit dem build-in tool armbian-config machen.

    • erzeuge und setze zufällige Passwörter für MySQL: MYSQL_ROOT_PASSWORD, MYSQL_PASSWORD, MYSQL_BACKUP_PASSWORD

      Passwort generieren z.B. mit openssl rand -base64 32

    • für den verschlüsselten Zugriff mit dem Browser mittels https stehen zwei Möglichkeiten Bereit:

      • Selbst signiertes Zertifikat, falls die Anwendung nicht über eine öffentliche IP Adresse aufgerufen werden kann.

        setze: LETSENCRYPT=false und SELF_SIGNED=true

      • Letsencrypt Zertifikat, falls die Anwendung über eine öffentliche IP aufgerufen werden kann.

        setze: LETSENCRYPT=true und SELF_SIGNED=false

    • Pensionsverwaltungs spezifische Einstellungen

      • erzeuge und setze einen zufälligen Wert für APP_SECRET

        z.B. mittels openssl rand 23 | sha1sum

      • unter DATABASE_URL hier den Wert db_password mit dem Wert des Parameters MYSQL_PASSWORD ersetzen.

      • Um aus der Anwendung heraus Mails senden zu können, muss ein externer Mail Anbieter existieren. Die Zugangsdaten hierfür werden in den Parameter MAILER_URL eingetragen.

        z.B.: MAILER_URL=smtp://domain.tld:587?encryption=tls&auth_mode=login&username=<username>&password=<password>

      • die restlichen Mail Parameter entsprechend der Beispiele in der Datei anpassen

Anwendung starten

  • im Ordner von pve-dockerized (/opt/pve-dockerized/) die Anwendung starten

    docker-compose up -d

    mit -d wird auch sichergestellt, dass die Anwendung bei einem Neustart des Betriebssystems automatisch mitgestartet wird.

  • SSL Zertifikat für den verschlüsselten Zugriff mit https erzeugen lassen

    docker-compose exec acme /bin/sh -c "./run.sh"

    Abhängig von der eingesetzten Hardware kann dies (einmalig) sehr lange dauern.

  • prüfen, ob alle Dienste laufen

    docker ps

    Die Ausgabe sollte ähnlich der im Bild sein. Unter Status müssen alle als "Up" gelistet sein

    docker ps

    Falls einer der Dienste nicht korrekt gestartet ist kann man z.B. mittels docker-compose logs web auf Logs des Containers zugreifen und sehen wo das Problem liegt. (gültige Containernamen hierbei sind: web, php, db, acme, redis)

Pensionsverwaltung initialisieren

  • mittels

    docker-compose exec --user www-data php /bin/sh -c "php pve/bin/console app:first-run"

  • Zuletzt mit einem Webbrowser auf die Anwendung zugreifen (hier im Beispiel mit)

    https://pve

    Wenn in der .env Datei SELF_SIGNED=true gewählt wurde, wird beim ersten Besuch eine Sicherheitswarnung des Browsers angezeigt. Diese muss akzeptiert werden, anschließend gelangt man zum Login.

  • Um die Anwendung zu nutzen, bitte die Anleitung Erste Schritte beachten.

Updates

In dem Ordner pve-dockerized existiert ein Script, mit dem die Anwendung vollautomatisch aktualisiert werden kann. Hierfür die folgenden Befehle ausführen:

chmod +x update-docker.sh
./update-docker.sh

Der letzte Befehl aktualisiert alle eingesetzten Images und lädt die neueste (stabile) Version der Pensionsverwaltung herunter.

Datenbank Backups

In dem Ordner pve-dockerized existiert ein Script, mit dem eine vollautomatische Sicherung der Datenbank angelegt werden kann.

  • Hierfür empfiehlt es sich einen separaten Datenbank Nutzer anzulegen.

    Der Name und das Passwort wurden initial bereits bei der Konfiguration der .env Datei definiert: MYSQL_BACKUP_USER und MYSQL_BACKUP_PASSWORD

      docker-compose exec db /bin/sh
      mysql -uroot -p
    

    gib das MySQL root-Passwort aus der .env Datei ein (MYSQL_ROOT_PASSWORD) und führe den folgenden SQL Befehl aus.

      GRANT LOCK TABLES, SELECT ON *.* TO '<backupuser>'@'%' IDENTIFIED BY '<pw>';
    

    Die Werte für <backupuser> und <pw> müssen durch die Werte aus der .env Datei ersetzt werden (MYSQL_BACKUP_USER und MYSQL_BACKUP_PASSWORD).

  • Anschließend zweimal Strg + D drücken, um sich aus der Datenbank abzumelden und wieder zurück in den pve-dockerized Ordner zu gelangen.

  • Anschließend das Backupscript ausführen

      chmod +x backup-db.sh
      ./backup-db.sh
    

    Die Datanbank-Backups sind im Ordner ../dbbackup zu finden.