SQL and Seed into App
This commit is contained in:
1 parent
4ed102afe7
commit
8587265155
9 files changed
+90
-291
No files matched your search
@@ -103,7 +103,8 @@ pnpm install
|
||||
docker compose up -d db
|
||||
|
||||
pnpm db:migrate # erstellt Tabellen (Prisma Migrate)
|
||||
pnpm db:seed # legt 2 Beispiel-Ernten/Chargen/Produkte + das Admin-Konto (ADMIN_EMAIL/ADMIN_PASSWORD) an
|
||||
pnpm db:seed # legt/erneuert nur das Admin-Konto (ADMIN_EMAIL/ADMIN_PASSWORD) an
|
||||
pnpm db:seed:demo # optional: 2 Beispiel-Ernten/Chargen/Produkte zum Ausprobieren (nicht im Docker-Image, siehe unten)
|
||||
|
||||
pnpm dev # http://localhost:3000
|
||||
```
|
||||
@@ -128,7 +129,8 @@ Nach einer Änderung von `DATABASE_PROVIDER` (z.B. lokal):
|
||||
docker compose --profile mysql up -d db-mysql
|
||||
|
||||
pnpm db:push # legt Tabellen beim gewaehlten Provider an (schreibt kurzzeitig die passende provider-Zeile in schema.prisma, siehe unten)
|
||||
pnpm db:seed # Beispieldaten + Admin-Konto
|
||||
pnpm db:seed # Admin-Konto
|
||||
pnpm db:seed:demo # optional: Beispieldaten
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
@@ -194,14 +196,15 @@ cp .env.example .env
|
||||
|
||||
docker compose up -d --build
|
||||
docker compose exec app pnpm db:deploy
|
||||
docker compose exec app pnpm db:seed # Beispieldaten + legt/befördert das Admin-Konto (ADMIN_EMAIL/ADMIN_PASSWORD)
|
||||
docker compose exec app pnpm db:seed # legt/befördert das Admin-Konto (ADMIN_EMAIL/ADMIN_PASSWORD)
|
||||
docker compose exec app pnpm db:seed:demo # optional: Beispieldaten zum Ausprobieren
|
||||
```
|
||||
|
||||
Die App läuft danach hinter [Caddy](https://caddyserver.com/) unter `http://localhost`, PostgreSQL unter Port `5432`. `app` selbst ist **nicht** direkt vom Host aus erreichbar (kein `ports:`-Mapping mehr, nur `expose`) — Caddy ist bewusst der einzige nach außen offene Dienst, weil er die tatsächliche Client-Verbindung terminiert und `X-Forwarded-For` dabei neu setzt statt einen vom Client selbst mitgeschickten Wert zu übernehmen. Ohne diesen Proxy davor ließe sich jedes IP-basierte Rate-Limit (Login, 2FA-Code, Checkout, Registrierung, siehe `lib/rate-limit.ts`) durch einen gefälschten Header umgehen. Für eine echte Domain mit automatischem HTTPS `SITE_ADDRESS` in `.env` setzen und Port `443` in `docker-compose.yml` freigeben (siehe Kommentar dort und in der `Caddyfile`).
|
||||
|
||||
## Kubernetes / Gitea CI
|
||||
|
||||
`.gitea/workflows/docker-build.yml` baut bei jedem Push auf `main` automatisch zwei Docker-Image-Tags (schlankes Laufzeit-Image + ein `:migrate-*`-Tag mit Prisma-CLI für Migrationen) und veröffentlicht sie in der Gitea-eigenen Container-Registry. `k8s/` enthält vollständige, rohe Kubernetes-Manifeste (Namespace, ConfigMap, Secret-Vorlage, Postgres/MySQL-StatefulSet, Migrations-Job, App-Deployment, Ingress) für den Betrieb dieser Images im Cluster — Einrichtung und Deployment-Ablauf stehen in [`k8s/README.md`](k8s/README.md).
|
||||
`.gitea/workflows/docker-build.yml` baut bei jedem Push auf `main` automatisch ein Docker-Image und veröffentlicht es in der Gitea-eigenen Container-Registry. Der Container migriert/seedet die Datenbank beim Start selbst (idempotent), kein separates Migrations-Image oder -Job nötig. `k8s/` enthält vollständige, rohe Kubernetes-Manifeste (Namespace, ConfigMap, Secret-Vorlage, Postgres/MySQL-StatefulSet, App-Deployment, Ingress) für den Betrieb dieses Images im Cluster — Einrichtung und Deployment-Ablauf stehen in [`k8s/README.md`](k8s/README.md).
|
||||
|
||||
Ein einzelnes Image unterstützt beide Datenbank-Provider gleichzeitig (siehe „Datenbank-Provider wechseln" oben) — welcher tatsächlich läuft, entscheidet allein `DATABASE_PROVIDER`/`DATABASE_URL` zur Laufzeit, kein separater Image-Build nötig.
|
||||
|
||||
|
||||
Reference in new issue
Block a user