Docker Deployment
Vollständiger Leitfaden für Docker-basiertes Hosting — von Build bis Production.
Quick-Start: Compose
Abschnitt betitelt „Quick-Start: Compose“git clone https://github.com/JoKerIsCraZy/tocco-mate.gitcd tocco-mate
cp .env.example .env# .env editieren: MS_EMAIL, MS_PASSWORD (Pflicht), API_TOKEN (optional)
docker compose up -ddocker compose logs -f tocco-mateStoppen: docker compose down.
Image bauen (statt pullen)
Abschnitt betitelt „Image bauen (statt pullen)“docker build -t tocco-mate .Multi-Stage Build
Abschnitt betitelt „Multi-Stage Build“- base — Playwright + Node-Runtime (
mcr.microsoft.com/playwright:v1.50.0-jammy) - deps —
npm ci --omit=dev - runtime — Copy deps + app, läuft als Non-Root-User
app
Vorteile: schnellere Rebuilds, kleineres Final-Image, Non-Root-User.
Volumes
Abschnitt betitelt „Volumes“Mount data/ für Persistenz:
volumes: - ./data:/app/dataInhalt von data/:
tocco.db— SQLite-Datenbank (auto-erzeugt)settings.json— Persistente Settings + verschlüsselte Credentials.api-token— Auto-generiertes Token (fallsAPI_TOKENnicht in.env).master-key— AES-256-GCM Master-Key für Settings-Encryption (Mode 0600)vapid.json— Web-Push VAPID-Keys
Health-Checks
Abschnitt betitelt „Health-Checks“docker ps # STATUS = healthy / unhealthy
# Manuell:docker exec tocco-mate node -e "require('http').get('http://127.0.0.1:3000/healthz', r => console.log(r.statusCode))"Mit restart: unless-stopped startet der Container automatisch neu wenn Health-Check fehlschlägt.
Networking
Abschnitt betitelt „Networking“Default — LAN-offen
Abschnitt betitelt „Default — LAN-offen“ports: - "3000:3000"Localhost-only (empfohlen für Reverse-Proxy davor)
Abschnitt betitelt „Localhost-only (empfohlen für Reverse-Proxy davor)“ports: - "127.0.0.1:3000:3000"Production-Checkliste
Abschnitt betitelt „Production-Checkliste“-
.envmit Production-Secrets befüllt -
.envist in.gitignore(nie committen!) -
data/existiert und ist beschreibbar - Reverse-Proxy mit TLS davor (Caddy / Traefik / nginx)
-
TRUST_PROXYkorrekt gesetzt - Backup-Strategie für
data/definiert
Updates
Abschnitt betitelt „Updates“# Image pullen (wenn Registry-basiert)docker compose pull
# Oder lokal rebuildendocker compose build
# Restart mit Zero-Downtimedocker compose up -d --no-deps --build tocco-mateBackups
Abschnitt betitelt „Backups“# SQLite-Snapshot (die DB ist klein, das geht zur Laufzeit)tar -czf data-backup-$(date +%Y%m%d).tar.gz ./data
# Restoretar -xzf data-backup-20260424.tar.gzdocker compose restartFür richtig sichere Backups: restic oder borg mit Verschlüsselung — siehe Sicherheit.
Chromium-Sandbox-Probleme
Abschnitt betitelt „Chromium-Sandbox-Probleme“Wenn du im Log siehst: The Chromium sandbox is not available:
Option A — Compose-Cap (sicherer):
security_opt: - seccomp=unconfinedcap_add: - SYS_ADMINOption B — --no-sandbox (weniger sicher):
PLAYWRIGHT_CHROMIUM_ARGS=--no-sandboxBevorzuge Option A.