Zum Inhalt springen

Betrieb

Das Backend läuft als Docker-Compose-Stack auf einem zentralen Server (VPS oder Cloud-Instanz):

Terminal-Fenster
cd locker-backend
docker compose -f docker-compose.prod.yml up -d

Standardmäßig wird der latest-Tag verwendet. Für Produktion das Image auf einen unveränderlichen Tag pinnen — per Commit-SHA oder Release-Tag in locker-backend/.env:

Terminal-Fenster
BACKEND_IMAGE_TAG=<github_sha>
Terminal-Fenster
docker compose -f docker-compose.prod.yml pull
docker compose -f docker-compose.prod.yml up -d --force-recreate

Die laufende Version ist über GET /api/identify als version abfragbar.

Der Mosquitto-Broker authentifiziert Clients gegen die Laravel-API (mosquitto-go-auth). Die Konfiguration wird aus dem Template erzeugt:

Terminal-Fenster
just setup-mqtt

Ohne just: mosquitto.conf aus dem Beispiel kopieren und in den Webhook-URIs mosq_secret=<MOSQ_HTTP_PASS> eintragen, dann den Mosquitto-Container neu starten.

Auf allen Backend-Instanzen muss derselbe gültige Laravel-APP_KEY gesetzt sein. Das Backend leitet daraus einen domain-separierten HMAC-Subkey für Provisionierungs-Tokens ab; ein zusätzliches Provisionierungsgeheimnis ist nicht erforderlich. Eine APP_KEY-Rotation invalidiert offene, noch nicht verbrauchte Provisionierungs-Tokens, für die anschließend neue Tokens ausgestellt werden müssen. Bereits provisionierte Geräte verwenden ihre MQTT-Zugangsdaten weiter.

Terminal-Fenster
docker compose exec app php artisan filament:user

Das Admin-Panel ist unter https://<deine-domain>/admin erreichbar.

  • Health-Endpoint: GET /up (Laravel)
  • MQTT-Listener: meldet Liveness per Heartbeat im Cache; php artisan mqtt:health ist der Docker-Healthcheck des mqtt-listener-Containers. Ein autoheal-Sidecar startet unhealthy Container automatisch neu. Hinweis: autoheal nutzt die Docker-Restart-API — Restarts erscheinen in den autoheal-Logs, nicht im RestartCount.
  • Status-Polling: php artisan locker:poll-status überwacht die Schließfach-Status kontinuierlich (separater Container)

Der Locker Client läuft als Docker-Container auf einem Raspberry Pi (3/4/5 oder Zero 2 W, Raspberry Pi OS Lite 64-bit):

  • Image: ghcr.io/open-locker/locker-client:latest
  • Benötigt config/locker-config.yml und eine .env mit PROVISIONING_TOKEN
  • Verbindet sich per MQTT mit dem Backend und steuert die Schlösser per Modbus (TCP oder RTU)

Die Provisionierung im Admin-Panel ausstellen oder neu starten, das Token aus dem einmaligen Dialog direkt in die .env des Clients kopieren, bei einem Client-Austausch veralteten lokalen Provisionierungszustand löschen und den Client neu starten. Das Token kann nicht erneut angezeigt werden; bei Verlust muss ein neues ausgestellt werden.

Empfohlene Hardware: siehe Stückliste.

  • Self-Hosting: alles selbst betreiben — volle Kontrolle, keine Softwarekosten
  • Gehostetes Backend: wer nicht selbst hosten möchte, kann das zentrale Backend hosten lassen — siehe Angebot auf der Website