code-server needs to know its base path for correct asset loading.
The Traefik StripPrefix middleware removes the path before requests
reach the container, so assets were loading from wrong URLs.
Solution:
- Entrypoint script reads BASE_PATH env var and passes to code-server
- container_manager.py sets BASE_PATH=/{slug_with_suffix} for vcoder
- code-server now loads assets from correct relative paths
This fixes 404 errors on workbench.css, nls.messages.js, etc.
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