spawner/.env.example
XPS\Micro 915c28a4e5 feat: Retry-Logik und Timeout für Verifizierung implementieren
- Neue .env Variable: CONTAINER_CREATE_TIMEOUT=10 (Sekunden)
- Frontend: Automatische Retries bei fehlgeschlagener Verifizierung
  - Max 5 Versuche mit 2 Sekunden Delay zwischen Versuchen
  - Gesamtzeit begrenzt auf 10 Sekunden (CONTAINER_CREATE_TIMEOUT)
  - Bessere Fehlermeldungen für Timeout-Situation

Behebt Problem dass Verifizierung multiple 400-Fehler zeigt bevor sie funktioniert.
Dies passiert weil Container beim Spawn noch nicht bereit ist.
Mit Retries warten wir jetzt automatisch bis Container ready ist (max 10 Sek).
2026-02-03 16:17:42 +01:00

159 lines
6.0 KiB
Plaintext

# Container Spawner Konfiguration
# Kopiere diese Datei nach .env und passe die Werte an
# cp .env.example .env
# ============================================================
# PFLICHT - Diese Werte MUESSEN angepasst werden
# ============================================================
# Flask Session Secret - Generiere mit:
# python3 -c "import secrets; print(secrets.token_hex(32))"
SECRET_KEY=HIER_DEINEN_GEHEIMEN_SCHLUESSEL_EINTRAGEN
# Deine Domain (z.B. example.com, wieland.org)
BASE_DOMAIN=example.com
# Subdomain fuer den Spawner (z.B. coder -> coder.example.com)
SPAWNER_SUBDOMAIN=coder
# Name des Traefik-Netzwerks (muss existieren oder wird erstellt)
TRAEFIK_NETWORK=web
# ============================================================
# TRAEFIK - Anpassen an deine Traefik-Konfiguration
# ============================================================
# Name des Traefik Certificate Resolvers (aus deiner traefik.yml)
# Typische Namen: lets-encrypt, letsencrypt, hetzner, cloudflare, default
TRAEFIK_CERTRESOLVER=lets-encrypt
# Traefik Entrypoint fuer HTTPS (Standard: websecure)
TRAEFIK_ENTRYPOINT=websecure
# ============================================================
# DOCKER - Template-Konfiguration (Dynamisches System)
# ============================================================
# Docker Socket Pfad (Standard fuer Linux)
# Fuer Windows: npipe:////./pipe/docker_engine
# Fuer TCP: tcp://localhost:2375
DOCKER_HOST=unix:///var/run/docker.sock
# LEGACY Variable (wird noch für alte spawn_container() verwendet)
# Nutze diese nur für Fallback, nutze stattdessen USER_TEMPLATE_IMAGES
USER_TEMPLATE_IMAGE=user-template-01:latest
# Dynamische Template-Liste (Semikolon-getrennt)
# Format: image1:tag;image2:tag;image3:tag
#
# WICHTIG: Diese Variable steuert, welche Templates beim 'bash install.sh' gebaut werden!
# - Nur hier definierte Templates werden gebaut
# - Entsprechende Verzeichnisse (user-template-01/, etc.) müssen existieren
# - Die Template-Metadaten (Namen, Beschreibungen) werden aus templates.json geladen
#
# Verfügbare Templates (Beispiele):
# - user-template-01:latest (Nginx Basic - Verzeichnis: user-template-01/)
# - user-template-02:latest (Nginx Advanced - Verzeichnis: user-template-02/)
# - user-template-next:latest (Next.js Production - Verzeichnis: user-template-next/)
#
# Tipps:
# - Container-Typen werden automatisch aus Image-Namen extrahiert
# Beispiel: user-template-01:latest → Typ: template-01
# - ANFÜHRUNGSZEICHEN WICHTIG: Variable muss quoted sein!
# - Falls .env fehlt, nutzt install.sh .env.example als Fallback
#
# Beispiele für Anpassungen:
# - Nur Nginx: "user-template-01:latest"
# - Mit Next.js: "user-template-01:latest;user-template-next:latest"
# - Alle: "user-template-01:latest;user-template-02:latest;user-template-next:latest"
USER_TEMPLATE_IMAGES="user-template-01:latest;user-template-02:latest;user-template-next:latest"
# ============================================================
# RESSOURCEN - Container-Limits
# ============================================================
# RAM-Limit pro User-Container
DEFAULT_MEMORY_LIMIT=512m
# CPU-Quota (50000 = 0.5 CPU, 100000 = 1 CPU)
DEFAULT_CPU_QUOTA=50000
# ============================================================
# JWT - Authentifizierung
# ============================================================
# JWT Secret (verwendet SECRET_KEY wenn nicht gesetzt)
# JWT_SECRET_KEY=
# JWT Token Gueltigkeitsdauer in Sekunden (Standard: 1 Stunde)
JWT_ACCESS_TOKEN_EXPIRES=3600
# ============================================================
# CORS - Cross-Origin Resource Sharing
# ============================================================
# CORS erlaubte Origins (kommasepariert)
# WICHTIG: Wird automatisch aus SPAWNER_SUBDOMAIN und BASE_DOMAIN generiert
# Nur setzen wenn du zusaetzliche Origins brauchst
# CORS_ORIGINS=https://coder.example.com,http://localhost:3000
# ============================================================
# OPTIONAL - Logging und Debugging
# ============================================================
# Spawner-Port (intern, nur fuer direkten Zugriff)
SPAWNER_PORT=5000
# Log-Level (DEBUG, INFO, WARNING, ERROR)
LOG_LEVEL=INFO
# Container-Timeout in Sekunden (fuer Auto-Shutdown, noch nicht implementiert)
CONTAINER_IDLE_TIMEOUT=3600
# Container-Erstellungs-Timeout in Sekunden
# Wie lange wartet das Frontend beim Verifizieren auf erfolgreichen Container-Spawn?
# (Standard: 10 Sekunden, dann Error-Message zeigen)
CONTAINER_CREATE_TIMEOUT=10
# ============================================================
# PASSWORDLESS AUTH - Magic Links
# ============================================================
# Gueltigkeitsdauer von Magic Link Tokens in Sekunden (Standard: 15 Minuten)
MAGIC_LINK_TOKEN_EXPIRY=900
# Max. Anzahl Magic Links pro Email-Adresse pro Stunde (Rate Limiting)
MAGIC_LINK_RATE_LIMIT=3
# ============================================================
# EMAIL - Magic Links und Benachrichtigungen
# ============================================================
# SMTP-Server Konfiguration
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_USER=noreply@example.com
SMTP_PASSWORD=your-smtp-password
SMTP_FROM=noreply@example.com
SMTP_USE_TLS=true
# Frontend-URL fuer Email-Links (Magic Links, etc.)
# WICHTIG: Muss die URL sein, unter der das Frontend erreichbar ist
FRONTEND_URL=https://coder.example.com
# ============================================================
# DEBUG & ADMINISTRATION
# ============================================================
# Debug-Token fuer Admin-API (view-logs, delete-email, etc.)
# Generiere mit: python3 -c "import secrets; print(secrets.token_hex(32))"
# Nutze via: curl -H "X-Debug-Token: xxx" http://localhost:5000/api/admin/debug?action=view-logs
DEBUG_TOKEN=
# ============================================================
# PRODUKTION - Erweiterte Einstellungen
# ============================================================
# PostgreSQL statt SQLite (empfohlen fuer Produktion)
# DATABASE_URL=postgresql://spawner:password@postgres:5432/spawner