40 lines
1.1 KiB
YAML
40 lines
1.1 KiB
YAML
services:
|
||
skillspector-web:
|
||
build:
|
||
context: .
|
||
dockerfile: Dockerfile
|
||
container_name: skillspector-web
|
||
restart: unless-stopped
|
||
|
||
environment:
|
||
WEBUI_USER: ${WEBUI_USER:-admin}
|
||
WEBUI_PASSWORD: ${WEBUI_PASSWORD}
|
||
SCAN_TIMEOUT_SECONDS: "300"
|
||
# Nur setzen, wenn LLM-Analyse gewünscht ist (optional, siehe README):
|
||
# ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY}
|
||
|
||
# Nur auf localhost binden – Zugriff von außen läuft über deinen
|
||
# bestehenden Reverse Proxy (CloudPanel) mit TLS + eigenem Vhost.
|
||
ports:
|
||
- "127.0.0.1:8000:8000"
|
||
|
||
# Härtung: kein Zugriff auf den Docker-Socket, kein Host-Mount,
|
||
# Root-Dateisystem read-only, keine erweiterten Rechte.
|
||
read_only: true
|
||
tmpfs:
|
||
- /tmp
|
||
- /app/scan-tmp
|
||
cap_drop:
|
||
- ALL
|
||
security_opt:
|
||
- no-new-privileges:true
|
||
|
||
mem_limit: 1g
|
||
cpus: 1.0
|
||
|
||
healthcheck:
|
||
test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/healthz', timeout=3)"]
|
||
interval: 30s
|
||
timeout: 5s
|
||
retries: 3
|