# Docker-Deployment Dieses Compose-Rezept baut sowohl das Backend als auch den Banner-Generator mit Nuitka direkt aus dem aktuellen Checkout. Es wird kein vorcompiliertes Drivers-Hub-Binary heruntergeladen. Das fertige Runtime-Image enthält weder den Compiler noch eine Python-Laufzeitumgebung. Der Stack umfasst Drivers Hub, Banner-Generator, MariaDB 10.11 und Valkey 8. Die Datenbank wird vor dem ersten Backend-Start durch den einmaligen Dienst `db-init` initialisiert. ## Konfiguration Zuerst werden die Deployment- und Anwendungskonfiguration angelegt: ```bash cp .env.example .env cp upstream/HubBackend/config_sample.json config/config.json ``` In `.env` müssen sichere Passwörter für MariaDB eingetragen werden. Anschließend wird `config/config.json` mindestens wie folgt angepasst: ```json { "abbr": "drivershub", "name": "Drivers Hub", "domain": "localhost", "prefix": "/api", "server_host": "0.0.0.0", "server_port": 7777, "db_host": "mariadb", "db_user": "drivershub", "db_password": "dasselbe Passwort wie DB_PASSWORD in .env", "db_name": "drivershub", "db_data_directory": "/var/lib/mysqlext/", "redis_host": "valkey", "redis_port": 6379 } ``` Die gezeigten Schlüssel sind nur die zu ändernden Werte. Alle übrigen Schlüssel aus `config_sample.json` müssen erhalten bleiben. `config/config.json` ist die echte, persistente Anwendungskonfiguration und kann im laufenden Betrieb weiter bearbeitet werden. Ein Image-Neubau ist für Konfigurationsänderungen nicht nötig; anschließend genügt ein Neustart des Backends. Das Datenbankpasswort muss in `.env` und `config/config.json` übereinstimmen, da sowohl der MariaDB-Container als auch Drivers Hub es unabhängig voneinander beim Start benötigen. Alle rein fachlichen Einstellungen werden ausschließlich in `config/config.json` gepflegt. ## Start ```bash docker compose build docker compose up -d docker compose ps ``` Standardmäßig ist die API unter `http://localhost:7777/api` und Swagger UI unter `http://localhost:7777/api/doc` erreichbar. ## Persistente Daten Alle persistenten Daten liegen im Projektverzeichnis: ```text data/ ├── mariadb/ ├── mariadb-external/ └── valkey/ ``` Die Verzeichnisse entstehen beim ersten Start automatisch. Alternativ können die drei Host-Pfade in `compose.yaml` beispielsweise nach `../drivershub-data/` geändert werden. MariaDB und Valkey veröffentlichen keine Ports am Host. `docker compose down` entfernt Container und Netzwerk, lässt `config/` und `data/` aber unangetastet. Diese Verzeichnisse müssen bewusst separat gesichert oder gelöscht werden. ## Upstream aktualisieren `upstream/HubBackend` ist ein normaler, eigenständiger Git-Clone und bleibt inhaltlich unverändert. Ein Update und anschließender Neubau erfolgen mit: ```bash git -C upstream/HubBackend pull --ff-only docker compose build docker compose up -d ``` ## Betrieb ```bash # Logs anzeigen docker compose logs -f backend # Nach Änderungen an config/config.json docker compose restart backend # Benutzer mit dem compilierten Programm anlegen docker compose run --rm backend \ drivershub --config /app/config/config.json setup create-user user@example.com # Nach Änderungen am Quellcode neu bauen docker compose build docker compose up -d ``` MariaDB erhält für den festen Benutzer `drivershub` das globale `FILE`-Recht, weil das Projekt Tabellen mit `DATA DIRECTORY` anlegt. Eine Änderung dieses Benutzernamens muss sowohl in `compose.yaml`, `config/config.json` als auch in `docker/mariadb-init.sql` nachvollzogen werden.