- 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).
159 lines
6.0 KiB
Plaintext
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
|