SkillSpector Web – Setup-Anleitung
Web-Oberfläche für SkillSpector, gehärtet für den Betrieb auf einem eigenen Server via Portainer.
1. Repository in Gitea anlegen
- Neues Repo z. B. unter
git.obraasch.de/olli1986/skillspector-webanlegen. - Diese vier Dateien hochladen/pushen:
Dockerfile,requirements.txt,app.py,docker-compose.yml. - Nicht committen: Passwörter oder API-Keys – die kommen später als Umgebungsvariablen in Portainer, nie ins Repo.
2. Stack in Portainer anlegen
- Stacks → Add stack
- Build method: Repository
- Repository URL:
https://git.obraasch.de/olli1986/skillspector-web - Reference:
refs/heads/main - Compose path:
docker-compose.yml
- Repository URL:
- Environment variables (im Portainer-UI, nicht im Repo):
WEBUI_USER= z. B.adminWEBUI_PASSWORD= ein starkes Passwort- optional
ANTHROPIC_API_KEY, falls du später LLM-Analyse willst
- Deploy the stack
Ohne gesetztes WEBUI_PASSWORD verweigert die WebUI jeden Zugriff (Absicherung
gegen offen erreichbare Instanzen).
3. Automatische Updates einrichten
Der Trick: Im Dockerfile ist SkillSpector ohne Versions-Pin installiert
(git+https://github.com/NVIDIA/skillspector.git). Jeder Rebuild des Images holt
also automatisch den aktuellen main-Branch. Damit das regelmäßig passiert, ohne
dass du selbst etwas anfassen musst:
-
Stack öffnen → Abschnitt GitOps updates
-
Enable GitOps updates aktivieren
-
Mechanismus: Polling, Intervall z. B.
24h -
Force redeployment UND Re-pull image / rebuild aktivieren
→ Auch wenn sich in deinem Repo nichts ändert, baut Portainer das Image alle 24h neu und zieht damit automatisch die neueste SkillSpector-Version.
-
Speichern.
Falls deine Portainer-Version "Force redeployment" beim reinen Repository-Build nicht anbietet: alternativ einfach den Stack alle paar Wochen manuell über "Pull and redeploy" neu bauen – dauert 10 Sekunden und holt ebenfalls die neueste Version.
4. Öffentlich erreichbar machen (optional)
Der Container bindet bewusst nur an 127.0.0.1:8000, ist also von außen gar nicht
erreichbar. Wenn du ihn z. B. unter skillspector.obraasch.de nutzen willst,
richte in CloudPanel einen Reverse Proxy auf 127.0.0.1:8000 ein – mit TLS
(Let's Encrypt) und idealerweise IP-Beschränkung, da die App zusätzlich zur
Basic-Auth Angriffsfläche für einen Web-Client darstellt (auch wenn sie selbst
sehr klein ist).
5. Warum das deinen Server nicht gefährden kann
- Kein Docker-Socket-Mount – der Container kann keine anderen Container oder den Host steuern.
read_only: true– das Root-Dateisystem im Container ist unveränderlich, nur/tmpund das Scan-Verzeichnis sind (flüchtiger) RAM-Speicher (tmpfs).cap_drop: ALLundno-new-privileges– keine erweiterten Linux-Rechte.- Ressourcenlimits (
mem_limit,cpus) – ein hängender oder böswilliger Scan kann den restlichen Server nicht in die Knie zwingen. - SkillSpector führt den gescannten Skill nie aus – nur statische Analyse (Regex/AST/YARA) plus optionale LLM-Bewertung von Dateiinhalten.
--no-llmist Standard – ohne dein explizites Häkchen verlässt kein gescannter Dateiinhalt den Container.- Jeder Scan läuft in einem eigenen Temp-Ordner, der danach gelöscht wird.
Nutzung
WebUI öffnen (z. B. http://<server>:8000 lokal oder deine Subdomain), Basic-Auth
eingeben, Git-URL des Skills eintragen oder ZIP hochladen, "Scan starten" klicken.
Das Ergebnis zeigt Risk Score, Severity und Empfehlung (SAFE / CAUTION /
DO_NOT_INSTALL) sowie den vollständigen JSON-Report.