93 lines
2.8 KiB
Markdown
93 lines
2.8 KiB
Markdown
# 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
|
||
|
||
Für ein vollständiges Update steht `update.sh` im Projektwurzelverzeichnis bereit. Es führt alle notwendigen Schritte automatisch aus.
|
||
|
||
```bash
|
||
./update.sh
|
||
```
|
||
|
||
Das Script erledigt in dieser Reihenfolge:
|
||
|
||
1. **Voraussetzungen** – Docker, Docker Compose und Git werden geprüft
|
||
2. **Backup** – `scripts/backup.sh` wird vor jeder Änderung aufgerufen
|
||
3. **git pull** – Code wird aktualisiert; geänderte Dateien werden erkannt
|
||
4. **Image-Rebuild** – Das Docker-Image wird neu gebaut, wenn `Dockerfile`, `composer.json`, `composer.lock`, `php/`, `apache/` oder `docker-entrypoint.sh` geändert wurden
|
||
5. **Container-Neustart** – `docker compose down --remove-orphans` + `up -d`
|
||
6. **Healthcheck** – Wartet bis die Datenbank `healthy` meldet (max. 120 s)
|
||
7. **Migrationen** – `scripts/migrate.php` wird explizit ausgeführt (idempotent)
|
||
8. **Tests** – Die Test-Suite wird ausgeführt und das Ergebnis angezeigt
|
||
|
||
### Optionen
|
||
|
||
| Option | Bedeutung |
|
||
|---|---|
|
||
| `--no-backup` | Backup überspringen (z. B. wenn gerade erst gesichert) |
|
||
| `--no-tests` | Tests nicht ausführen (schnellerer Ablauf) |
|
||
| `--force-rebuild` | Docker-Image immer neu bauen, unabhängig von Dateiänderungen |
|
||
|
||
### Migrationen
|
||
|
||
Datenbankmigrationen werden von `scripts/migrate.php` verwaltet. Das Script prüft, welche Migrations-Dateien noch nicht angewendet wurden, und führt sie der Reihe nach aus. Es wird sowohl vom Container-Entrypoint als auch von `update.sh` aufgerufen.
|
||
|
||
```
|
||
[migrate] Starte Migrations-Prüfung...
|
||
[migrate] Führe aus: NNN_beschreibung.sql
|
||
[migrate] N Migration(en) erfolgreich angewendet.
|
||
```
|
||
|
||
Migrationen können auch manuell ausgelöst werden:
|
||
|
||
```bash
|
||
docker compose exec web php scripts/migrate.php
|
||
```
|
||
|
||
### Diagnose bei Fehlern
|
||
|
||
```bash
|
||
docker compose ps # Container-Status
|
||
docker compose logs web # Web-Container-Log (PHP-Fehler, Migrationen)
|
||
docker compose logs db # Datenbank-Log
|
||
```
|
||
|
||
Falls ein Update fehlschlägt und ein Rollback nötig ist, das letzte Backup einspielen:
|
||
|
||
```bash
|
||
docker compose exec -T db mariadb -u steuerkram -psteuerkram steuerkram \
|
||
< backups/steuerkram_db_YYYYMMDD_HHMM.sql
|
||
```
|