**Neue Features:** 1. Container-Level Blocking: Admin kann einzelne Container blockieren/entsperren 2. User-Block Cascading: Wenn User gesperrt wird, werden automatisch alle seine Container blockiert 3. Launch-Protection: Blockierte Container können vom User nicht gestartet werden 4. Container-Verwaltungs-Tab im Admin-Dashboard mit Block/Unblock UI 5. Blocked-Status auf User-Dashboard mit visueller Markierung (rot) 6. Bulk-Operations für Container (Block/Unblock) **Backend-Änderungen (admin_api.py):** - GET /api/admin/users: Liefert nun auch Container-Liste mit is_blocked Status - POST /api/admin/containers/<id>/block: Blockiert einzelnen Container - POST /api/admin/containers/<id>/unblock: Entsperrt einzelnen Container - POST /api/admin/containers/bulk-block: Blockiert mehrere Container - POST /api/admin/containers/bulk-unblock: Entsperrt mehrere Container - POST /api/admin/users/<id>/block: Cascade-Blockade aller Container (Phase 7) **Backend-Änderungen (api.py):** - GET /api/user/containers: Liefert is_blocked und blocked_at Felder - POST /api/container/launch/<type>: Launch-Protection prüft is_blocked Flag **Database-Änderungen (models.py):** - UserContainer: Füge is_blocked, blocked_at, blocked_by Spalten hinzu - Relationships für Blocker-Admin **Frontend-Änderungen:** - Admin-Dashboard: Neuer "Container-Verwaltung" Tab mit Grid-View - Admin-Dashboard: Block/Unblock Buttons pro Container - Admin-Dashboard: Bulk-Operations für Container-Selection - User-Dashboard: Blocked-Badge und Blocked-Beschreibung in Container-Cards - User-Dashboard: Disabled Button wenn Container blockiert - User-Dashboard: Toast-Benachrichtigung bei Launch-Protection **Migration:** - Neue Datei: migrate_container_blocking.py für Database-Setup Verwendung: python migrate_container_blocking.py **Sicherheit:** - Blockierte Container werden mit stop_container() gestoppt - Lazy-Init des ContainerManager für robuste Error-Handling - Separate Admin-Endpoints mit @admin_required() Decorator - Audit-Logging aller Block/Unblock-Operationen **Testing-Punkte:** - User-Block blockiert alle Container? ✓ Cascading - Container-Block wird auf User-Dashboard angezeigt? ✓ is_blocked prüfen - Launch-Protection funktioniert? ✓ 403 Error bei is_blocked - Admin-Container-Tab funktioniert? ✓ Grid-View mit Search - Bulk-Operations funktionieren? ✓ Multiple Selection + Confirm Fixes: #0 (Phase 7 Implementation) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> |
||
|---|---|---|
| docs | ||
| frontend | ||
| user-template-01 | ||
| user-template-02 | ||
| 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 | ||
| migrate_container_blocking.py | ||
| models.py | ||
| 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