Files
SkillSpector-Web/README.md
T

82 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# SkillSpector Web – Setup-Anleitung
Web-Oberfläche für [SkillSpector](https://github.com/NVIDIA/SkillSpector), gehärtet für
den Betrieb auf einem eigenen Server via Portainer.
## 1. Repository in Gitea anlegen
1. Neues Repo z. B. unter `git.obraasch.de/olli1986/skillspector-web` anlegen.
2. Diese vier Dateien hochladen/pushen: `Dockerfile`, `requirements.txt`, `app.py`,
`docker-compose.yml`.
3. **Nicht committen:** Passwörter oder API-Keys – die kommen später als
Umgebungsvariablen in Portainer, nie ins Repo.
## 2. Stack in Portainer anlegen
1. **Stacks → Add stack**
2. **Build method: Repository**
- Repository URL: `https://git.obraasch.de/olli1986/skillspector-web`
- Reference: `refs/heads/main`
- Compose path: `docker-compose.yml`
3. **Environment variables** (im Portainer-UI, nicht im Repo):
- `WEBUI_USER` = z. B. `admin`
- `WEBUI_PASSWORD` = ein starkes Passwort
- optional `ANTHROPIC_API_KEY`, falls du später LLM-Analyse willst
4. **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:
1. Stack öffnen → Abschnitt **GitOps updates**
2. **Enable GitOps updates** aktivieren
3. Mechanismus: **Polling**, Intervall z. B. `24h`
4. **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.
5. 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 `/tmp` und das Scan-Verzeichnis sind (flüchtiger) RAM-Speicher (`tmpfs`).
- **`cap_drop: ALL`** und **`no-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-llm` ist 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.