Add full support for 2 container types (development and production):
Backend Changes:
- New UserContainer model with unique constraint on (user_id, container_type)
- Removed single-container fields from User model (container_id, container_port)
- Added CONTAINER_TEMPLATES config with dev and prod templates
- Implemented spawn_multi_container() method in ContainerManager
- Added 2 new API endpoints:
* GET /api/user/containers - list all containers with status
* POST /api/container/launch/<type> - on-demand container creation
- Multi-container container names and Traefik routing with type suffix
Frontend Changes:
- New Container, ContainersResponse, LaunchResponse types
- Implemented getUserContainers() and launchContainer() API functions
- Completely redesigned dashboard with 2 container cards
- Status display with icons for each container type
- "Create & Open" and "Open Service" buttons based on container status
- Responsive grid layout
Templates:
- user-template-next already configured with Tailwind CSS and Shadcn/UI
Documentation:
- Added IMPLEMENTATION_SUMMARY.md with complete feature list
- Added TEST_VERIFICATION.md with detailed testing guide
- Updated .env.example with USER_TEMPLATE_IMAGE_DEV/PROD variables
This MVP allows each user to manage 2 distinct containers with:
- On-demand lazy creation
- Status tracking per container
- Unique URLs: /{slug}-dev and /{slug}-prod
- Proper Traefik routing with StripPrefix middleware
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
||
|---|---|---|
| docs | ||
| frontend | ||
| user-template | ||
| user-template-next | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| 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.md | ||
| IMPLEMENTATION-GUIDE.md | ||
| install.sh | ||
| models.py | ||
| README.md | ||
| requirements.txt | ||
| 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