· 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:

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. Das ist ein DSGVO-Verstoß.

Ö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 entsprechend Datenschutzerklärung anzupassen und einen Auftragsverarbeitungsvertrag (AVV) mit Nightwatch abzuschließen.

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.