· Laravel · 3 min Lesezeit
Laravel Nightwatch im Docker Swarm und Datenschutz-Hinweise
Eine praxisnahe Anleitung, wie du Laravel Nightwatch in einem Docker Swarm Cluster zum Laufen bringst. Schritt für Schritt, inklusive der wichtigen DSGVO-Einstellungen.
Wenn du Laravel Nightwatch in einem Docker Swarm Cluster betreiben willst, merkst du schnell: die Standard-Anleitung reicht nicht. Der Agent-Container ist für deine App per default wahrscheinlich nicht erreichbar, und die Daten kommen nicht an.
1. Vorbereitung: Dein Nightwatch Account & die DSGVO
Im Nightwatch Dashboard:
Wähle den Server-Standort Frankfurt Wenn du eine neue Anwendung in Nightwatch anlegst, ist der erste und wichtigste Schritt die Wahl der Storage Region. Um die DSGVO einzuhalten, müssen die Daten deiner europäischen Nutzer auch in Europa bleiben. Wähle hier unbedingt “Frankfurt” aus.
Hast du das erledigt, kopiere dein NIGHTWATCH_TOKEN
nach der Anleitung.
2. Installation im Laravel-Projekt
Füge Nightwatch wie gewohnt über Composer zu deinem Projekt hinzu:
composer require laravel/nightwatch
Öffne danach deine .env
-Datei und trage den Token ein, den du im vorigen Schritt kopiert hast:
NIGHTWATCH_TOKEN=dein-api-key-von-nightwatch
3. Die Docker Swarm Konfiguration
Das ist der Kern des Problems und der Lösung. In einem Docker Swarm sind dein laravel
-Container und dein nightwatch
-Container getrennt. Der nightwatch:agent
lauscht standardmäßig nur auf localhost
und ist damit für deine App unsichtbar.
Wir lösen das mit zwei Anpassungen:
A) Der Nightwatch-Agent muss im Netzwerk lauschen Wir müssen dem Agenten sagen, dass er Verbindungen aus dem gesamten internen Docker-Netzwerk annehmen soll. Das geht über den Parameter --listen-on=0.0.0.0:2407
.
B) Deine App muss wissen, wo der Agent ist Wir teilen der Laravel-Anwendung mit, unter welcher Adresse sie Daten senden soll. Dank Docker-DNS ist das ganz einfach der Service-Name. Füge dazu diese Zeile in deine .env
-Datei ein:
NIGHTWATCH_INGEST_URL="http://nightwatch:2407"
4. Die docker-compose.yml
anpassen
Hier fügen wir alles zusammen. Die command
-Anweisung im nightwatch
-Service ist der entscheidende Punkt.
services: laravel: environment: NIGHTWATCH_SERVER: nightwatch NIGHTWATCH_INGEST_URL: nightwatch:2407 # ...
# Optional: Queue-Worker oder Scheduler, Reverb, ... brauchen das ebenfalls reverb: environment: NIGHTWATCH_SERVER: nightwatch NIGHTWATCH_INGEST_URL: nightwatch:2407 command: ["php", "/var/www/html/artisan", "reverb:start"] # ...
# Nightwatch - Der wichtige Teil nightwatch: environment: NIGHTWATCH_TOKEN: xyz command: [ "php", "/var/www/html/artisan", "nightwatch:agent", "--listen-on", "0.0.0.0:2407", "-vvv" ] # ...# ... Rest deiner Konfiguration
5. Deployment
Spiele deine Änderungen mit docker stack deploy
ein. Um zu sehen, ob alles geklappt hat, schau dir die Logs des Nightwatch-Containers an:
docker service logs dein-stack-name_nightwatch
Wenn alles korrekt ist, solltest du eine Ausgabe wie diese sehen. Achte auf Listening on [0.0.0.0:2407]
und die Ingest successful
Meldungen.
2025-06-18 07:10:15 [INFO] Nightwatch agent initiated: Listening on [0.0.0.0:2407]2025-06-18 07:10:16 [INFO] Authentication successful [1.024s]2025-06-18 07:10:22 [INFO] Ingest successful [0.112s]
6. Datenschutz (PII)
Dein Setup läuft, aber wir sind noch nicht ganz fertig. Standardmäßig könnte Nightwatch personenbezogene Daten (PII) wie Namen oder E-Mail-Adressen eingeloggter Nutzer erfassen. Das ist ein DSGVO-Verstoß.
Öffne deinen AppServiceProvider.php
und füge in der boot()
-Methode folgenden Code hinzu:
use Illuminate\Contracts\Auth\Authenticatable;use Laravel\Nightwatch\Nightwatch;
public function boot(): void{ // ...
// Verhindert das Senden von Nutzerdaten an Nightwatch. Nightwatch::user(fn (Authenticatable $user) => []);}
Das sorgt dafür, dass statt der Nutzerdaten nur ein leeres Array gesendet wird. Deine Nutzer bleiben anonym, du bist auf der sicheren Seite.
Vergiss nicht, deine entsprechend Datenschutzerklärung anzupassen und einen Auftragsverarbeitungsvertrag (AVV) mit Nightwatch abzuschließen.