-
Notifications
You must be signed in to change notification settings - Fork 0
Installation
Diese Anleitung führt dich von null bis zu einer laufenden Vakt-Instanz.
| Minimum | Empfohlen | Mit KI (Minimum) | Mit KI (Empfohlen) | |
|---|---|---|---|---|
| CPU | 2 vCPU | 4 vCPU | 4 vCPU | 4 vCPU |
| RAM | 2 GB | 4 GB | 8 GB | 16 GB |
| Disk | 20 GB SSD | 40 GB SSD | 40 GB SSD (+5 GB für das Modell) | 40 GB SSD (+5 GB für das Modell) |
| Docker Engine | 24+ | 24+ | 24+ | 24+ |
| Docker Compose | v2 | v2 | v2 | v2 |
| Betriebssystem | Linux (empfohlen), macOS, Windows (WSL2) | Linux | Linux | Linux |
Der KI-Berater läuft standardmäßig lokal über einen Ollama-Container — rein auf CPU, kein GPU, kein Cloud-API-Key erforderlich. Das Default-Modell qwen2.5:7b (~4.5 GB RAM, Apache 2.0) wird beim ersten docker compose up automatisch gezogen; kein manueller Schritt nötig. Wer ihn nicht braucht, kann ihn mit VAKT_AI_PROVIDER=disabled abschalten — zusätzlich sollten ollama und ollama-init gestoppt werden (docker compose stop ollama ollama-init), damit der RAM-Footprint entfällt.
git clone https://github.com/norvik-ops/vatk
cd vatkcp .env.example .envDann den Master-Key setzen — einmalig, nicht mehr ändern nach dem ersten Start:
sed -i 's/VAKT_SECRET_KEY=.*/VAKT_SECRET_KEY='"$(openssl rand -hex 32)"'/' .envOder manuell in .env eintragen:
VAKT_SECRET_KEY=<Ausgabe von: openssl rand -hex 32>docker compose up -dVakt startet und ist nach ca. 30–60 Sekunden unter http://localhost erreichbar. Datenbankmigrationen laufen automatisch beim ersten Start.
Beim ersten Aufruf erscheint der Setup-Wizard. Dort legst du die Organisation und den ersten Admin-Account an. Danach ist der Setup-Wizard dauerhaft deaktiviert.
Die vollständige Referenz aller Variablen findest du in der Konfigurationsreferenz. Für den Start sind folgende Variablen relevant:
| Variable | Beschreibung |
|---|---|
VAKT_DB_URL |
PostgreSQL-Verbindungsstring |
VAKT_REDIS_URL |
Redis-Verbindungsstring |
VAKT_SECRET_KEY |
32-Byte Hex-Master-Key (AES-256-GCM) — niemals nach erstem Start ändern |
| Variable | Standard | Beschreibung |
|---|---|---|
VAKT_MODULES_ENABLED |
alle | Kommagetrennte Liste aktiver Module |
AUTO_MIGRATE |
false |
Migrationen automatisch beim Start ausführen |
VAKT_FRONTEND_URL |
http://localhost:5173 |
Öffentliche URL des Frontends (für E-Mail-Links) |
VAKT_AI_PROVIDER |
openai |
KI-Provider (openai oder disabled) |
VAKT_AI_BASE_URL |
http://ollama:11434/v1 |
API-Endpunkt des KI-Providers |
VAKT_AI_MODEL |
qwen2.5:3b |
Modellname (Default; Apache 2.0; ~1.9 GB RAM) |
| Variable | Standard | Beschreibung |
|---|---|---|
VAKT_SMTP_HOST |
localhost |
SMTP-Server |
VAKT_SMTP_PORT |
1025 |
SMTP-Port |
VAKT_SMTP_USER |
— | Benutzername (erforderlich für Port 587/465) |
VAKT_SMTP_PASS |
— | Passwort (erforderlich für Port 587/465) |
VAKT_SMTP_FROM |
vaktaware@vakt.local |
Absenderadresse |
Der Ollama-Container ist bereits in docker-compose.yml enthalten und startet automatisch mit docker compose up. Der ollama-init-Container zieht das Default-Modell qwen2.5:7b beim ersten Start automatisch (~4.5 GB, einmalig). Kein manueller Schritt nötig — nach dem Download steht die KI offline zur Verfügung.
Modell wechseln (optional):
# Anderes Modell ziehen
docker compose exec ollama ollama pull phi3.5:mini
# In .env anpassen
VAKT_AI_MODEL=phi3.5:mini
# API neu starten
docker compose restart api workerVAKT_AI_PROVIDER=openai
VAKT_AI_BASE_URL=https://api.mistral.ai/v1
VAKT_AI_API_KEY=sk-...
VAKT_AI_MODEL=mistral-small-latestMistral AI nutzt EU-Server und ist DSGVO-freundlich. Kosten: ca. €0,001 pro Bericht.
Alle OpenAI-kompatiblen Endpunkte funktionieren: OpenAI, Mistral, Groq, Ollama, LM Studio, vLLM.
VAKT_AI_PROVIDER=disabledDamit werden die KI-Buttons im UI ausgeblendet. Um auch den RAM-Footprint zu entfernen, Ollama-Container stoppen:
docker compose stop ollama ollama-initAlternativ die Services ollama und ollama-init aus der docker-compose.yml entfernen (empfohlen für dauerhaft kleine VMs mit < 8 GB RAM).
Vakt läuft standardmäßig auf HTTP (Port 80). Für die meisten internen Installationen ist das ausreichend — die VM ist typischerweise nicht direkt aus dem Internet erreichbar, und TLS wird durch einen vorgelagerten Load-Balancer oder Reverse-Proxy der eigenen Infrastruktur terminiert.
Das Repository enthält ein HTTPS-Overlay und ein Skript zur Zertifikatserstellung:
# Zertifikat erzeugen (nutzt mkcert wenn vorhanden, sonst openssl)
./scripts/gen-local-cert.sh
# Stack mit HTTPS starten
docker compose -f docker-compose.yml -f docker-compose.tls.yml up -dDas Skript legt nginx/certs/localhost.crt und nginx/certs/localhost.key an. Mit einem Zertifikat des eigenen internen CA einfach die Dateien direkt dort ablegen — das Skript überschreibt nichts, wenn die Dateien bereits existieren.
Anschließend VAKT_FRONTEND_URL auf die HTTPS-URL setzen:
VAKT_FRONTEND_URL=https://vakt.intranet.meine-firma.deWenn Vakt auf einem Server mit öffentlichem DNS läuft, übernimmt Caddy TLS-Zertifikate vollautomatisch via Let's Encrypt — kein Certbot, keine Cronjobs, keine manuelle Erneuerung.
# Caddy auf dem Host installieren (Ubuntu/Debian)
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | \
sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | \
sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update && sudo apt install caddy/etc/caddy/Caddyfile:
deine-domain.de {
reverse_proxy localhost:80
}Der Docker-Stack bleibt unverändert auf Port 80. Caddy übernimmt Port 80/443, holt das Zertifikat automatisch und erneuert es ohne Eingriff.
Vakt kann Benutzerkonten aus einem LDAP/AD synchronisieren:
VAKT_LDAP_URL=ldap://dc.meine-firma.local:389
VAKT_LDAP_BIND_DN=CN=vakt-service,OU=ServiceAccounts,DC=meine-firma,DC=local
VAKT_LDAP_BIND_PASS=geheimes-passwort
VAKT_LDAP_BASE_DN=OU=Users,DC=meine-firma,DC=local
VAKT_LDAP_USER_FILTER=(objectClass=person)
VAKT_LDAP_GROUP_FILTER=(objectClass=group)
VAKT_LDAP_TLS=falseSSO wird über Casdoor als Proxy unterstützt. Damit lassen sich Azure AD, Okta, Keycloak und Google Workspace einbinden:
CASDOOR_URL=https://auth.meine-firma.de
CASDOOR_CLIENT_ID=vakt-app
CASDOOR_CLIENT_SECRET=geheimes-secretgit pull
docker compose pull
docker compose up -dVakt prüft nicht automatisch auf neue Versionen. Wenn du informiert werden möchtest, wenn eine neue Version verfügbar ist, gibt es zwei Möglichkeiten:
Option 1 — In-App-Banner: Setze VAKT_UPDATE_CHECK=true in deiner .env. Vakt prüft dann einmal täglich die GitHub Releases API und zeigt Administratoren einen Hinweis-Banner in der Oberfläche. Es werden dabei keine Daten gesendet.
Option 2 — Watchtower: Für automatische Container-Updates siehe die Deployment-Dokumentation.
Migrationen laufen automatisch beim Start (wenn AUTO_MIGRATE=true gesetzt ist). Bei kritischen Produktionssystemen empfiehlt sich der manuelle Ablauf:
# 1. Backup anlegen
# 2. Migration testen
docker compose exec api /api migrate
# 3. Anwendung starten
docker compose up -dEin Helm Chart liegt unter helm/vakt/. Grundlegender Aufruf:
helm install vakt ./helm/vakt \
--set secret.key=$(openssl rand -hex 32) \
--set postgresql.postgresqlPassword=sicher \
--set ingress.enabled=true \
--set ingress.hostname=vakt.meine-firma.de- Organisation konfigurieren — Sector und Bundesland setzen (wichtig für automatische Behördenauswahl in Vakt Comply).
- Frameworks aktivieren — In Vakt Comply die relevanten Standards aktivieren (NIS2, ISO 27001, BSI-Grundschutz o. a.).
- Benutzer einladen — Über Einstellungen → Benutzerverwaltung weitere Teammitglieder einladen.
- 2FA aktivieren — Für Admin-Accounts TOTP einrichten (Einstellungen → Sicherheit).
- SMTP konfigurieren — Für Benachrichtigungen und Vakt-Aware-Kampagnen einen SMTP-Server eintragen.
-
KI-Modell laden — Falls Ollama genutzt wird:
docker compose exec ollama ollama pull qwen2.5:3b. - Ersten Scan starten — In Vakt Scan ein Asset anlegen und einen Trivy-Scan auslösen.
# Liveness
curl http://localhost/health
# Readiness (prüft DB und Redis)
curl http://localhost/health/readyBeide Endpunkte antworten mit HTTP 200 wenn alles läuft.
Vakt speichert alle Daten in PostgreSQL. Eine einfache Backup-Strategie:
docker compose exec postgres pg_dump -U vakt vakt > backup-$(date +%Y%m%d).sqlHochgeladene Dateien (Evidence-Anhänge) liegen im Volume ./data/uploads und müssen separat gesichert werden.