build: Docker-Images, Compose-Setup und Gitea-Workflows
- Mehrstufige Dockerfiles je Dienst mit Stufen für Entwicklung und Betrieb, beide Images laufen als unprivilegierter Benutzer - Backend-Entrypoint wartet auf die Datenbank, migriert und seedt nur bei leerem Kategoriebaum (neues Flag --if-empty) - docker-compose.yml mit Netz-Trennung, Healthchecks und benannten Volumes; die Datenbank ist ausschließlich im internen Netz erreichbar - nginx liefert das Bundle aus und reicht /api weiter; index.html ungecacht, gehashte Assets ein Jahr - Gitea-Workflows: ci.yml für Lint, Tests und Bundle-Bau, build.yml für die Images nach linux/amd64 ohne Deploy-Schritt - docs/runner.md und docs/deployment.md, .dockerignore je Dienst Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014e7t8UpmoVNMtWivY5LiSH
This commit is contained in:
@@ -111,6 +111,21 @@ die Versionierung folgt [Semantic Versioning](https://semver.org/lang/de/).
|
||||
- Benachrichtigungen sind in den Einstellungen pflegbar, samt Einrichtungsstand
|
||||
der Kanäle und Versandprotokoll.
|
||||
|
||||
- Mehrstufige Dockerfiles für Backend und Frontend, beide mit einer Stufe für
|
||||
die Entwicklung und einer für den Betrieb; beide Images laufen unprivilegiert.
|
||||
- Entrypoint des Backends wartet auf die Datenbank, spielt die Migrationen ein
|
||||
und legt die Stammdaten nur beim leeren Kategoriebaum an.
|
||||
- `docker-compose.yml` mit Netz-Trennung (die Datenbank ist ausschließlich
|
||||
intern erreichbar), Healthchecks und benannten Volumes für Datenbank und
|
||||
Logo-Cache.
|
||||
- nginx liefert das Bundle aus und reicht `/api` weiter; `index.html` bleibt
|
||||
ungecacht, die gehashten Assets ein Jahr.
|
||||
- Gitea-Workflows `ci.yml` (Lint, Tests, Bundle-Bau) und `build.yml` (Images für
|
||||
linux/amd64 in die Gitea-Registry, ohne Deploy-Schritt).
|
||||
- `docs/runner.md` zur Einrichtung des act_runners samt Fehlersuche und
|
||||
`docs/deployment.md` zu NPMplus, Aktualisierung und Sicherung.
|
||||
- `python -m app.scripts.seed --if-empty` seedt nur bei leerem Kategoriebaum.
|
||||
|
||||
### Geändert
|
||||
|
||||
- `SECRET_KEY` muss mindestens 32 Zeichen lang sein (Vorgabe von HS256); in
|
||||
|
||||
Reference in New Issue
Block a user