- Adapter-Pattern mit drei Kanaelen: E-Mail (SMTP per Env, TLS starttls/ssl, Dev-Fallback: Protokoll), Telegram (Bot-API, Token per Env, Chat-ID pro Benutzer), In-App (persistente Nachrichten mit Unread-Counter und 'Alle als gelesen markieren') - Pro Benutzer Kanal-Praeferenzen (Einstellungsseite, mehrere Kanaele gleichzeitig) plus eigene Kontakt-Tabelle (E-Mail-Adresse, Chat-ID); Kern und users-Tabelle unveraendert - Oeffentliche Plugin-API: await send_notification(user, titel, text, kategorie) - andere Plugins holen das Plugin ueber app.state.registry - Eigene Migration (0001_tabellen), eigene Routen/Templates, deutsche UI - Tests: Adapter-Auswahl nach Praeferenz, In-App-Persistenz, Dev-Log- Adapter, SMTP-Versand (gemockt), Telegram-API-Aufruf, Einstellungsseite - README: Plugin-Doku + neue Env-Variablen; docker-compose: Platzhalter
32 lines
1.2 KiB
YAML
32 lines
1.2 KiB
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}
|
|
# Benachrichtigungen (optional): ohne SMTP-Host/Bot-Token wird nur protokolliert
|
|
#- SPIELE_SMTP_HOST=smtp.example.org
|
|
#- SPIELE_SMTP_PORT=587
|
|
#- SPIELE_SMTP_BENUTZER=bot@example.org
|
|
#- SPIELE_SMTP_PASSWORT=geheim
|
|
#- SPIELE_SMTP_ABSENDER=redaktion@example.org
|
|
#- SPIELE_TELEGRAM_BOT_TOKEN=123456:ABC-DEF
|
|
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
|