# Update & Backup ## Backup ```bash bash scripts/backup.sh ``` Das Skript erstellt einen Dump der Datenbank sowie ein Archiv der Uploads im Verzeichnis `backups/`. Die Rotation erfolgt nach folgendem Schema: - 7 Tages-Backups - 4 Wochen-Backups - 12 Monats-Backups Ein `flock`-Lock verhindert parallele Läufe bei Verzögerungen. ### Manuelles Backup ```bash docker compose exec db mariadb-dump -u steuerkram -psteuerkram steuerkram \ > ~/steuerkram_backup_$(date +%Y%m%d_%H%M).sql ``` --- ## Datenpersistenz | Pfad | Inhalt | |---|---| | `./data/mariadb/` | MariaDB-Datenbankdateien | | Docker Volume `uploads` | Hochgeladene Belege | Beide Pfade liegen außerhalb des Containers und bleiben bei `docker compose down` erhalten. --- ## Update Datenbankmigrationen werden **automatisch** beim nächsten Container-Start eingespielt. Das Script `scripts/migrate.php` prüft beim Start, welche Migrations-Dateien noch nicht angewendet wurden, und führt sie der Reihe nach aus. ### Vollständige Update-Anleitung #### Schritt 1 – Datenbank sichern ```bash bash scripts/backup.sh ``` #### Schritt 2 – Aktuellen Code holen ```bash git pull ``` #### Schritt 3 – Container neu bauen und starten ```bash docker compose up -d --build ``` Dieser Befehl baut das PHP-Image neu (falls sich `Dockerfile` oder `composer.json` geändert haben) und startet alle Container. Der Web-Container führt beim Start automatisch `scripts/migrate.php` aus. #### Schritt 4 – Migrationen prüfen ```bash docker compose logs web | grep migrate ``` Erwartete Ausgabe: ``` [migrate] Starte Migrations-Prüfung... [migrate] Führe aus: NNN_beschreibung.sql [migrate] N Migration(en) erfolgreich angewendet. ``` Falls ein Fehler auftritt, das Backup aus Schritt 1 einspielen: ```bash docker compose exec -T db mariadb -u steuerkram -psteuerkram steuerkram \ < ~/steuerkram_backup_YYYYMMDD_HHMM.sql ``` #### Schritt 5 – Anwendung prüfen ```bash docker compose ps # alle Container müssen "running" sein docker compose logs web # keine PHP-Fehler oder Exceptions ``` --- ### Kurzform ohne Systemd ```bash bash scripts/backup.sh && git pull && docker compose up -d --build docker compose logs web | grep migrate ``` ### Kurzform mit Systemd ```bash bash scripts/backup.sh && git pull && docker compose build sudo systemctl restart steuerkram journalctl -u steuerkram | grep migrate ```