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
+45
View File
@@ -38,6 +38,28 @@ _Platzhalter werden ergänzt, sobald die Oberfläche steht._
| Charts | Recharts |
| Tests | pytest + httpx, vitest + testing-library |
## Schnellstart (Betrieb)
Voraussetzungen: Docker mit Compose-Plugin und ein externes Netz `proxy`.
```bash
mkdir -p /opt/moneyfy && cd /opt/moneyfy
curl -fsSLO https://git.menzel.center/menzeljonas/moneyfy/raw/branch/main/docker-compose.yml
curl -fsSLO https://git.menzel.center/menzeljonas/moneyfy/raw/branch/main/.env.example
cp .env.example .env
# Mindestens setzen: POSTGRES_PASSWORD, SECRET_KEY, MONEYFY_ADMIN_PASSWORD
$EDITOR .env
docker login git.menzel.center
docker compose up -d
```
Das Backend wartet auf die Datenbank, spielt die Migrationen ein und legt beim
allerersten Start den Kategoriebaum an. Danach läuft die Oberfläche auf
`http://127.0.0.1:8087`. Die vollständige Einrichtung samt Reverse Proxy und
Sicherung steht in [docs/deployment.md](docs/deployment.md).
## Schnellstart (lokale Entwicklung)
Voraussetzungen: Python 3.12, [uv](https://docs.astral.sh/uv/), Node 20+,
@@ -146,6 +168,29 @@ docs/ Betriebs- und Runner-Dokumentation
.gitea/ Gitea-Actions-Workflows
```
Alternativ lässt sich alles aus dem Quellcode bauen:
```bash
cp docker-compose.override.yml.example docker-compose.override.yml
docker compose up -d --build
```
Die Override-Datei baut beide Images lokal, bindet den Quellcode ein und öffnet
die Ports für Backend (8000) und Vite (5173).
## Bauen und Ausrollen
Zwei Gitea-Workflows unter `.gitea/workflows/`:
- **`ci.yml`** läuft bei jedem Push und Pull Request: `ruff`, `pytest`,
`tsc --noEmit`, `eslint`, `vitest` und der Bundle-Bau.
- **`build.yml`** läuft auf `main` und bei Tags `v*` und lädt beide Images für
`linux/amd64` in die Gitea-Registry. Push auf `main` erzeugt `:main` und
`:sha-<kurz>`, ein Tag `v1.2.3` zusätzlich `:1.2.3`, `:1.2` und `:latest`.
Ausgerollt wird **nicht** automatisch. Die Einrichtung des Runners beschreibt
[docs/runner.md](docs/runner.md), das Ausrollen [docs/deployment.md](docs/deployment.md).
## Lizenz
[MIT](LICENSE)