Legt das Fundament der Lern-Bar an: - Next.js 15 (App Router), React 19, TypeScript, ESLint, Vitest - SQLite ueber Drizzle hinter einer Repository-Schicht - Eigener Migrationslauf mit Pruefsummen, beim Start angewendet - Argon2id, serverseitige Sitzungen, HttpOnly-Cookie, SameSite=Lax - Rollen Ausbilder und Azubi, Rechteregeln als reine Funktionen - Verwaltung: Azubikonto und Ausbildung anlegen, Passwort, Sperren - Gestaltung Petrol/Bernstein, helle und dunkle Darstellung - Dockerfile, docker-compose, Lebenszeichen, update.sh mit Rueckfall - Sicherung und Wiederherstellung als Shell-Skripte - 29 Tests fuer Rechte, Zeitrechnung und Migrationslauf Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
35 lines
907 B
YAML
35 lines
907 B
YAML
# Lern-Bar – ein Dienst, ein Volume, mehr braucht es nicht.
|
||
# Vor einem TLS-beendenden Reverse Proxy betreiben (nginx, Caddy, Traefik).
|
||
|
||
services:
|
||
lernbar:
|
||
build:
|
||
context: .
|
||
dockerfile: Dockerfile
|
||
image: lernbar:lokal
|
||
container_name: lernbar
|
||
restart: unless-stopped
|
||
environment:
|
||
TZ: Europe/Berlin
|
||
PORT: "3000"
|
||
# Hinter einem Proxy, der TLS beendet, bleibt das hier http.
|
||
NODE_ENV: production
|
||
ports:
|
||
# Nur auf der Schleife lauschen – nach außen geht der Reverse Proxy.
|
||
- "127.0.0.1:3000:3000"
|
||
volumes:
|
||
- lernbar-daten:/daten
|
||
healthcheck:
|
||
test:
|
||
- CMD
|
||
- node
|
||
- -e
|
||
- "fetch('http://127.0.0.1:3000/api/gesundheit').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"
|
||
interval: 30s
|
||
timeout: 5s
|
||
retries: 3
|
||
start_period: 20s
|
||
|
||
volumes:
|
||
lernbar-daten:
|