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:
moneyfy
2026-09-09 17:14:44 +02:00
co-authored by Claude Opus 5
parent 54c59c9f71
commit 87bee9b72a
17 changed files with 1184 additions and 10 deletions
+14 -3
View File
@@ -1,8 +1,11 @@
# Lokale Entwicklung: Hot Reload und offene Ports.
# Lokale Entwicklung: aus dem Quellcode bauen, Hot Reload, offene Ports.
# Kopieren nach `docker-compose.override.yml` die Datei wird nicht eingecheckt.
#
# Compose liest sie automatisch zusätzlich zu docker-compose.yml.
services:
moneyfy-db:
# Datenbank direkt erreichbar, z. B. für psql oder einen SQL-Client.
# Datenbank direkt erreichbar, etwa für psql oder einen SQL-Client.
ports:
- "127.0.0.1:5432:5432"
@@ -16,7 +19,9 @@ services:
ENVIRONMENT: development
DEBUG: "true"
COOKIE_SECURE: "false"
# Im Entwicklungsbetrieb sollen keine Mails hinausgehen.
SCHEDULER_ENABLED: "false"
# Der Vite-Server läuft auf einem anderen Port und braucht daher CORS.
CORS_ORIGINS: http://localhost:5173
volumes:
# Quellcode einblenden, damit --reload greift.
@@ -32,10 +37,16 @@ services:
image: moneyfy-frontend:dev
command: ["npm", "run", "dev", "--", "--host", "0.0.0.0", "--port", "5173"]
environment:
VITE_API_BASE_URL: http://localhost:8000
# Vite reicht /api an das Backend weiter, siehe vite.config.ts.
VITE_API_PROXY: http://moneyfy-backend:8000
volumes:
- ./frontend/src:/app/src
- ./frontend/public:/app/public
- ./frontend/index.html:/app/index.html:ro
- ./frontend/vite.config.ts:/app/vite.config.ts:ro
- ./frontend/tailwind.config.js:/app/tailwind.config.js:ro
ports:
- "127.0.0.1:5173:5173"
# Der Entwicklungsserver kennt /healthz nicht.
healthcheck:
disable: true