Server aktualisieren und Backups
Aktualisieren
ℹ️ Dieser Weg gilt für den eigenen Server. Betreibt ihr jotti per Windows-Doppelklick, folgt stattdessen Aktualisieren (Standardweg).
Tragt in der .env unter JOTTI_VERSION die gewünschte Release-Version ein und
führt make prod-update aus. Die aktuelle Nummer steht auf der
GitHub-Releases-Seite.
Das Skript sichert die Datenbank automatisch, bevor es die neuen Images zieht und die Migrationen ausführt. Danach prüft es die Gesundheit. Bleibt der Stack ungesund, bricht es ab und zeigt, wie ihr mit dem eben erstellten Backup zurückkehrt.
🔁 Nur vorwärts, kein Downgrade. Updates verändern die Datenbank und lassen sich nicht zurücknehmen; eine ältere Version kann mit den neuen Daten nicht mehr starten. Wollt ihr zurück, spielt ein Backup ein (
make prod-restore).
Backups
jotti speichert alle Daten in einem Docker-Volume. Macht regelmäßige Backups, schon wegen der gesetzlichen 10-Jahre-Aufbewahrung.
-
Sichern:
make prod-backupzieht einen komprimiertenpg_dumpin den OrdnerBACKUP_DIR(Standard./backups) und behält die neuestenBACKUP_KEEPStück. -
Wiederherstellen:
make prod-restorefragt eine Bestätigung ab und spielt das neueste Backup zurück. Das überschreibt die aktuelle Datenbank. Einen bestimmten Dump stellt ihr per Argument wieder her:./scripts/prod-restore.sh <datei>. Die Bestätigung nennt Dump und Compose-Datei; standardmäßigdocker-compose.prod.yml, überCOMPOSE_FILEauf einen anderen Stack umstellbar (gilt ebenso fürmake prod-backup). -
Prüfen (gelegentlich):
make prod-backup-verifyspielt das neueste Backup in einen Wegwerf-Postgres ein und meldet die Zahl der Kassenjournal-Einträge. Ein leeres Kassenjournal gilt als Fehler. So wisst ihr, dass ein Backup wirklich wiederherstellbar ist, ohne den laufenden Betrieb anzufassen. Einen bestimmten Dump prüft ihr per Argument:./scripts/prod-backup-verify.sh <datei>. -
Täglich automatisch: Für einen täglichen Dump liegen Vorlagen im Repository (systemd-Timer unter
packaging/systemd/oder cron unterpackaging/cron/). Die Installationsschritte stehen als Kommentar in den Dateien. -
Überwachung (optional): Tragt unter
BACKUP_PING_URLdie URL eines Überwachungsdienstes ein (z. B. healthchecks.io). Nach jedem erfolgreichen Backup ruft das Skript sie einmal auf. Bleibt der Aufruf aus, schlägt der Dienst Alarm (Dead-Man-Switch). So merkt ihr, wenn ein automatischer Lauf still ausfällt. Welchen Dienst ihr nutzt, ist frei wählbar; ein Fehlschlag des Aufrufs gefährdet das Backup nicht. -
Extern kopieren: Holt die Dumps auf einen anderen Rechner, damit sie einen Serverausfall überstehen. Ein Einzeiler dafür, vom Zielrechner aus (Pfad und Zugang anpassen):
Terminal-Fenster rsync -avz admin@SERVER:/pfad/zu/jotti/backups/ ./jotti-backups/
💾 Backups außer Haus kopieren. Ein Backup, das nur auf demselben Server liegt, hilft bei dessen Ausfall nicht. Kopiert die Dumps regelmäßig weg.
Laufender Betrieb
- Erreichbarkeit: Lasst einen Überwachungsdienst (z. B. Better Stack oder
UptimeRobot)
https://<eure-domain>/api/healthabrufen. Er schlägt Alarm, wenn jotti nicht antwortet. Schaltet dort auch die Warnung vor dem Ablauf des Zertifikats ein. - Speicherplatz: Prüft vor jeder Veranstaltung mit
df -h, dass die Platte nicht vollläuft. Alte jotti-Images räumtmake prod-updatenach jedem erfolgreichen Update selbst weg. Es behält nur die neue und die vorherige Version, die ihr für ein Zurückrollen braucht. - Neustart nach Kernel-Updates: Die automatischen Updates starten den Server
nicht neu. Liegt die Datei
/var/run/reboot-requiredvor, startet ihn außerhalb einer Veranstaltung mitsudo rebootneu. jotti läuft danach von selbst wieder an.