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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user