- redaktionskern (src/): schlanker Kern — App-Fabrik, Plugin-Loader (Entry-Points + plugins/-Verzeichnis), Migrations-Laufzeit (schema_migrations pro Plugin, SQLite-/Postgres-portabel), Auth mit Argon2id + Session-Cookies, Rollen admin/redakteur/rezensent, Benutzerverwaltung für Admins - plugins/: 8 ladbare Stubs (neuheiten, dedup, planung, archiv, erinnerung, benachrichtigung, audit-log, export) nach Plugin-Vertrag - Frontend: Jinja2 + Tailwind (CDN) + HTMX + Alpine.js, UI deutsch - Tests: 28 pytest-Fälle (Loader, Lifecycle, Entry-Points, Migrations- Idempotenz, Login/Logout, Rollen-Zugriff, Benutzerverwaltung) - Docker/Podman: Compose (Traefik-Labels) + Dockerfile (uv) - README.md mit Setup-Anleitung
25 lines
885 B
YAML
25 lines
885 B
YAML
services:
|
|
app:
|
|
build: .
|
|
container_name: spiele-redaktion
|
|
restart: unless-stopped
|
|
environment:
|
|
- SPIELE_DATABASE_URL=sqlite:///./data/spiele-redaktion.db
|
|
- SPIELE_SESSION_SECRET=${SPIELE_SESSION_SECRET:-change-me-in-production}
|
|
# Vor dem ersten Start setzen, sonst wird der Admin mit "admin" angelegt:
|
|
- SPIELE_INITIAL_ADMIN_PASSWORD=${SPIELE_INITIAL_ADMIN_PASSWORD:-admin}
|
|
volumes:
|
|
- ./data:/app/data
|
|
networks:
|
|
- traefik_default
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.spiele-redaktion.rule=Host(`swen.henry.insight-it.de`)"
|
|
- "traefik.http.routers.spiele-redaktion.entrypoints=websecure"
|
|
- "traefik.http.routers.spiele-redaktion.tls.certresolver=le"
|
|
- "traefik.http.services.spiele-redaktion.loadbalancer.server.port=8000"
|
|
|
|
networks:
|
|
traefik_default:
|
|
external: true
|