Verwaltung
Wurde MIZDB mithilfe des Scripts erstellt, so steht der Befehl mizdb
zu Verfügung:
Ansonsten kann mizdb.sh
im MIZDB Verzeichnis (standardmäßig ~/.local/share/MIZDB
) auch direkt benutzt werden:
Befehle
Docker Container & Webserver
- Container starten:
mizdb start
- Container stoppen:
mizdb stop
- Container neustarten:
mizdb restart
- Webserver neuladen:
mizdb reload
Mit docker ps docker ps
kann der Zustand der Container
ermittelt werden.
Der Name des Containers der App ist mizdb-app
und der Name des Containers der PostgreSQL Datenbank
ist mizdb-postgres
.
Update
Um die Anwendung zu aktualisieren, benutze:
Achtung: Während des Updates ist die Anwendung für die Benutzer nicht verfügbar!
Datenbank wiederherstellen (pg_restore)
Um die Daten der Datenbank aus einer Backup-Datei wiederherzustellen, benutze:
Backup erstellen (pg_dump)
Um eine Backup-Datei zu erstellen, benutze:
Wird keine Datei als Argument übergeben, so wird eine Backup-Datei im Unterverzeichnis MIZDB/dumps
erstellt.
Backups automatisieren
Cronjob
Mit cronjob kann das Erstellen von Backups automatisiert werden. Dabei wird zu vordefinierten Zeiten ein Skript ausgeführt, dass die Backups erstellt. Ein solches Skript könnte so aussehen:
#!/bin/sh
# This script manages regular backups of the data of the MIZDB database.
#
# Use this in a cronjob (on the host machine of the docker container):
# > crontab -e
# > 51 7,11,16 * * 1-5 /path/to/mizdb_backup.sh
BACKUP_DIR="/var/lib/mizdb/backups"
# Numbers of days you want to keep copies of your database:
number_of_days=30
file="${BACKUP_DIR}/mizdb_$(date +%Y_%m_%d_%H_%M_%S)"
docker exec -i mizdb-postgres /bin/sh -c 'pg_dump --username="$POSTGRES_USER" --host=localhost -Fc "$POSTGRES_DB"' > "$file"
# Delete older backup copies:
find "$BACKUP_DIR" -name "mizdb_*" -type f -mtime +$number_of_days -delete
Dieses Skript, beispielsweise mizdb_backup.sh
genannt, erzeugt ein Backup, legt es in /var/lib/mizdb/backups
ab und
löscht Backups, die älter als 30 Tage sind.
Um es zu aktivieren, zunächst den crontab des root users öffnen:
Und folgenden cronjob hinzufügen:
# Backup der MIZDB Datenbank erstellen (Wochentags, um 7:51, 11:51 und 16:51 Uhr):
51 7,11,16 * * 1-5 /bin/sh /path/to/mizdb_backup.sh
rclone
Mit rclone sync und cronjob kann das Hochladen der Backups auf ein Google Drive automatisiert werden.
- rclone installieren: https://rclone.org/install/
- rclone für Google Drive konfigurieren: https://rclone.org/drive/
- crontab öffnen:
und dann den cronjob definieren, zum Beispiel:
# Backups mit rclone hochladen:
53 7,11,16 * * 1-5 rclone --config=/path/to/rclone.conf sync /var/lib/mizdb/backups <remote_name>:backups
Die Standardkonfiguration erfordert einen Webbrowser. Um rclone ohne Webbrowser (z.B. für einen headless Server) zu konfigurieren: https://rclone.org/remote_setup/
rclone mit Google Service Account
Alternativ kann über einen Service Account auf den Backup-Ordner zugegriffen werden:
https://rclone.org/drive/#service-account-support
Als Beispiel, Upload zum existierenden Backup-Drive auf mizdbbackup@gmail.com:
-
Falls nicht der bereits existierende Service "dbbackup-service" benutzt werden soll, muss vorerst ein Service Account angelegt werden:
- in die Google Cloud Console einloggen: https://console.cloud.google.com
- Service Accounts > Create Service Account
- im Drive Ordner rechts in den Ordnerdetails unter "Zugriff verwalten" den Backup-Ordner für den neuen Service Account freigeben
-
Service Account Key (
credentials.json
) generieren, falls nicht vorhanden:- in die Google Cloud Console einloggen: https://console.cloud.google.com
- Service Accounts > dbbackup-service > KEYS
- Mit "ADD KEY" wird ein neuer Key erzeugt und heruntergeladen
-
Root Folder ID des Backup-Ordners herausfinden:
- In Google Drive einloggen
- Unter "Meine Ablage" den entsprechenden Ordner anklicken
- die ID ist am Ende der URL nach
/folders/
zu finden;
also z.B.https://drive.google.com/drive/u/1/folders/foo1bar
hat die IDfoo1bar
-
rclone Konfigurationsdatei erzeugen: https://rclone.org/drive/#service-account-support
Mit einer solchen rclone.conf, zu finden unter /home/my_user/.config/rclone/
:
[dbbackup]
type = drive
scope = drive
root_folder_id = foo1bar
service_account_file = /pfad/zu/service/account/credentials.json
müsste der cronjob so aussehen:
53 7,11,16 * * 1-5 rclone --config=/home/my_user/.config/rclone/rclone.conf sync /var/lib/mizdb/backups dbbackup:/
Weitere Links:
Webserver Einhängepunkt ändern
Standardmäßig ist die Seite der Datenbank unter http://<ServerName>/miz
erreichbar, d.h. der Einhängepunkt ist /miz
.
Um einen anderen Einhängepunkt festzulegen, muss in der Datei docker-compose.env
der Wert für MOUNT_POINT
geändert
werden. Anschließend müssen die Container gestoppt und neu gestartet werden:
Django Shell & psql
Um den interaktiven Python Interpreter für die MIZDB App zu öffnen:
bash mizdb shell
und dann python manage.py shell
Um das interaktive PostgreSQL Terminal zu öffnen:
bash mizdb dbshell
und dann psql --user=$POSTGRES_USER $POSTGRES_DB