After spawning a new container, wait until it's fully started and services are ready before returning to the frontend. This prevents race conditions where the frontend opens the container URL before the service is ready. Solution: Wait loop (max 30s) for container.status == 'running', then additional 2s for service startup (code-server, PlatformIO, etc). This fixes the 404 error when opening a freshly spawned container. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> |
||
|---|---|---|
| backlog | ||
| docs | ||
| frontend | ||
| user-template-01 | ||
| user-template-02 | ||
| user-template-dictionary | ||
| user-template-next | ||
| user-template-vcoder | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| .mcp.json | ||
| admin_api.py | ||
| api.py | ||
| app.py | ||
| auth.py | ||
| config.py | ||
| container_manager.py | ||
| decorators.py | ||
| docker-compose.yml | ||
| Dockerfile | ||
| email_service.py | ||
| IMPLEMENTATION_SUMMARY_PHASE_7.md | ||
| IMPLEMENTATION_SUMMARY.md | ||
| IMPLEMENTATION-GUIDE.md | ||
| install.sh | ||
| migrate_container_blocking.py | ||
| models.py | ||
| package-lock.json | ||
| package.json | ||
| PHASE_7_SUMMARY.md | ||
| README.md | ||
| requirements.txt | ||
| templates.json | ||
| TEST_VERIFICATION.md | ||
Container Spawner
Ein Flask-basierter Service zur automatischen Bereitstellung von isolierten Docker-Containern pro Benutzer mit Traefik-Integration. Benutzer registrieren sich, erhalten einen eigenen Container und eine personalisierte Subdomain.
Features
- User-Management: Registrierung und Login mit sicherer Passwort-Speicherung
- Automatisches Container-Spawning: Jeder User erhaelt einen eigenen Docker-Container
- Dynamisches Routing: Traefik routet automatisch zu den User-Containern via Subdomain
- Resource-Management: CPU- und RAM-Limits pro Container
- Lifecycle-Management: Starten, Stoppen und Neustarten von User-Containern
- Template-basiert: Neue User-Container aus vorgefertigten Images
Schnellstart
# Installation mit einem Befehl
curl -sSL https://gitea.iotxs.de/RainerWieland/spawner/raw/branch/main/install.sh | bash
Nach der Installation .env anpassen und erneut ausfuehren:
cp .env.example .env
nano .env # Werte anpassen
bash install.sh
Voraussetzungen
- Docker 20.10+
- Docker Compose 2.0+
- Traefik 2.x oder 3.x (laufend)
- Bestehendes Docker-Netzwerk fuer Traefik
Dokumentation
| Dokument | Beschreibung |
|---|---|
| Installation | Installationsanleitung und Updates |
| Architektur | Technische Architektur und Komponenten |
| Sicherheit | Sicherheitsrisiken und Massnahmen |
| Versionen | Changelog und Versionierung |
| Bekannte Bugs | Bekannte Probleme und Workarounds |
| Best Practices | Dos and Don'ts |
Projektstruktur
spawner/
├── app.py # Flask-Hauptanwendung
├── auth.py # Authentifizierungs-Blueprint
├── container_manager.py # Docker-Container-Management
├── models.py # SQLAlchemy User-Modell
├── config.py # Konfigurationsklassen
├── templates/ # Jinja2-Templates (Legacy)
├── frontend/ # Next.js Frontend
├── user-template/ # Docker-Template fuer User-Container
└── docs/ # Dokumentation
Konfiguration
Alle Einstellungen erfolgen ueber Umgebungsvariablen in .env:
| Variable | Beschreibung |
|---|---|
SECRET_KEY |
Flask Session Secret (generieren!) |
BASE_DOMAIN |
Haupt-Domain (z.B. example.com) |
SPAWNER_SUBDOMAIN |
Subdomain fuer Spawner-UI |
TRAEFIK_NETWORK |
Docker-Netzwerk fuer Traefik |
USER_TEMPLATE_IMAGE |
Docker-Image fuer User-Container |
Siehe .env.example fuer alle Optionen.
Lizenz
MIT License - siehe Dokumentation fuer Details.
Version: 0.1.0 Repository: https://gitea.iotxs.de/RainerWieland/spawner