---
title: Laravel Nightwatch im Docker Swarm und Datenschutz-Hinweise
canonical: "https://pascalebeier.de/laravel-nightwatch-im-docker-swarm-anleitung-und-datenschutz"
pubDate: "2025-06-18T07:00:00.000Z"
author: Pascale Beier
description: "Eine praxisnahe Anleitung, wie du Laravel Nightwatch in einem Docker Swarm Cluster zum Laufen bringst. Schritt für Schritt, inklusive der wichtigen DSGVO-Einstellungen."
tags: [laravel, docker, docker swarm, nightwatch, monitoring, dsgvo]
categories: [Laravel]
---

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:

```bash
composer require laravel/nightwatch
```

Öffne danach deine `.env`-Datei und trage den Token ein, den du im vorigen Schritt kopiert hast:

```ini
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:

```ini
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.

```yaml
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:

```bash
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.

```bash
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:

```php
// 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](/kompetenzen/) und zu [Quellen, Prüfung und Korrekturen](/redaktionelle-richtlinien/) findest du auf den verlinkten Übersichtsseiten.
