Zum Inhalt springen

Docker Deployment

Vollständiger Leitfaden für Docker-basiertes Hosting — von Build bis Production.

Terminal-Fenster
git clone https://github.com/JoKerIsCraZy/tocco-mate.git
cd tocco-mate
cp .env.example .env
# .env editieren: MS_EMAIL, MS_PASSWORD (Pflicht), API_TOKEN (optional)
docker compose up -d
docker compose logs -f tocco-mate

Stoppen: docker compose down.

Terminal-Fenster
docker build -t tocco-mate .
  1. base — Playwright + Node-Runtime (mcr.microsoft.com/playwright:v1.50.0-jammy)
  2. depsnpm ci --omit=dev
  3. runtime — Copy deps + app, läuft als Non-Root-User app

Vorteile: schnellere Rebuilds, kleineres Final-Image, Non-Root-User.

Mount data/ für Persistenz:

volumes:
- ./data:/app/data

Inhalt von data/:

  • tocco.db — SQLite-Datenbank (auto-erzeugt)
  • settings.json — Persistente Settings + verschlüsselte Credentials
  • .api-token — Auto-generiertes Token (falls API_TOKEN nicht in .env)
  • .master-key — AES-256-GCM Master-Key für Settings-Encryption (Mode 0600)
  • vapid.json — Web-Push VAPID-Keys
Terminal-Fenster
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.

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"
  • .env mit Production-Secrets befüllt
  • .env ist in .gitignore (nie committen!)
  • data/ existiert und ist beschreibbar
  • Reverse-Proxy mit TLS davor (Caddy / Traefik / nginx)
  • TRUST_PROXY korrekt gesetzt
  • Backup-Strategie für data/ definiert
Terminal-Fenster
# Image pullen (wenn Registry-basiert)
docker compose pull
# Oder lokal rebuilden
docker compose build
# Restart mit Zero-Downtime
docker compose up -d --no-deps --build tocco-mate
Terminal-Fenster
# SQLite-Snapshot (die DB ist klein, das geht zur Laufzeit)
tar -czf data-backup-$(date +%Y%m%d).tar.gz ./data
# Restore
tar -xzf data-backup-20260424.tar.gz
docker compose restart

Für richtig sichere Backups: restic oder borg mit Verschlüsselung — siehe Sicherheit.

Wenn du im Log siehst: The Chromium sandbox is not available:

Option A — Compose-Cap (sicherer):

security_opt:
- seccomp=unconfined
cap_add:
- SYS_ADMIN

Option B — --no-sandbox (weniger sicher):

Terminal-Fenster
PLAYWRIGHT_CHROMIUM_ARGS=--no-sandbox

Bevorzuge Option A.