# data/ – persistente Nutzdaten Alles in diesem Verzeichnis ist **Nutzdatenbestand**, nicht Code. Es überlebt Updates, `git pull`, `git clean` und Container-Neubauten und gehört in die Datensicherung. Der Inhalt ist per `.gitignore` (`data/*`) vom Repo ausgenommen – nur diese README ist eingecheckt. | Verzeichnis | Inhalt | Gemountet in | |---|---|---| | `data/mariadb/` | Datenbank (MariaDB-Datendateien) | nur `db`-Container: `/var/lib/mysql` | | `data/belege/` | Hochgeladene Belegdateien, nach Jahr/Belegnummer | `web`: `/var/www/html/data/belege` | | `data/logo/` | Firmenlogo (`logo.png` oder `logo.jpg`) | `web`: `/var/www/html/data/logo` | ## Warum außerhalb des Web-Roots `data/belege` und `data/logo` liegen bewusst **nicht** unter `public/`. Beide werden ausschließlich über die Anwendung ausgeliefert, die vorher Anmeldung und Dateityp prüft: - Belege über `/belege/{id}/file` (`BelegController::serveFile`) - Logo über `/settings/logo/file` (`SettingsController::serveLogo`) Ein direkter Abruf per URL ist damit nicht möglich. In der Datenbank steht jeweils nur der Pfad **relativ** zum zugehörigen Verzeichnis (`belege.storage_path`, `company_settings.logo_path`) – kein Web-Pfad und kein absoluter Serverpfad. Der `web`-Container sieht `data/mariadb` nicht; die Datenbankdateien sind ausschließlich in den `db`-Container gemountet. ## Datensicherung ```bash # Datenbank docker compose exec -T db mariadb-dump -usteuerkram -psteuerkram steuerkram > backup.sql # Dateien tar czf backup-dateien.tar.gz data/belege data/logo ``` Ein Backup ist nur zusammen vollständig: Ohne `data/belege` verweisen die Beleg-Datensätze der Datenbank ins Leere.