· 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 die Wahl der Storage Region ein wichtiger technischer Datenschutzbaustein. Für europäische Projekte bietet sich „Frankfurt“ an. Der Speicherort allein stellt allerdings keine DSGVO-Konformität her; Rechtsgrundlage, Datenminimierung, Auftragsverarbeitung und deine konkrete Konfiguration müssen ebenfalls passen.

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:

Terminal window
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:

Terminal window
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.

Terminal window
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. Ob und auf welcher Grundlage das zulässig ist, hängt von deinem konkreten Einsatz ab. Für viele Monitoring-Fälle ist es sinnvoller, diese Daten gar nicht erst zu übertragen.

Öffne deinen AppServiceProvider.php und füge in der boot()-Methode folgenden Code hinzu:

app/Providers/AppServiceProvider.php
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 Datenschutzerklärung entsprechend anzupassen, einen Auftragsverarbeitungsvertrag (AVV) zu prüfen und die Konfiguration mit deinen tatsächlichen Datenflüssen abzugleichen. Das ist technische Praxiserfahrung und keine Rechtsberatung.

Mehr zu meinem Ansatz für langfristig betriebene Web-Plattformen und zu Quellen, Prüfung und Korrekturen findest du auf den verlinkten Übersichtsseiten.

Teilen auf
Zurück zum Blog

Weitere Blog-Posts

Alle Blog-Posts anzeigen »

Testgetriebene Entwicklung mit Laravel: Entwicklungsumgebung

Im nachfolgenden ersten Teil einer Beitragsserie möchte ich mit der Erstellung eines Blog-Systems in die Testgetriebene Entwicklung mit Laravel einführen. Dabei kann der ein oder andere bestimmt noch etwas über Laravel lernen :) Im ersten Teil richten wir unsere perfekte Entwicklungsumgebung ein.