Skip to main content
Labeler ist ein Feature für fortgeschrittene Anwender. Da er dauerhaft als Server laufen muss, richtet es sich an Nutzer, die Laravel Forge einsetzen oder eigenständig einen Server aufsetzen können. Für Laravel-Einsteiger nicht empfohlen. Kein Support.Laravel Cloud wird nicht unterstützt. Labeler muss durchgehend als WebSocket-Server laufen und benötigt Anpassungen der nginx-Konfiguration. Da Laravel Cloud keine Änderungen an der nginx-Konfiguration erlaubt, kann Labeler dort nicht betrieben werden.

Was ist Labeler?

Labeler ist ein Dienst, der Inhalten auf dem AT Protocol (Bluesky) Labels zuweist. Er lässt sich für Moderation, Content-Klassifikation, benutzerdefinierte Filterung usw. verwenden. Ein Vorabverständnis des Labeler-Konzepts ist erforderlich. Auch Starter-Kits für andere Sprachen sind hilfreich. Beispielimplementierung:

Vorbereitung

Zum Betrieb eines Labelers benötigen Sie:
  • Einen neuen, ausschließlich für den Labeler bestimmten Bluesky-Account (nicht Ihren persönlichen Account verwenden).
  • Ein neues, ausschließlich für den Labeler bestimmtes Laravel-Projekt (getrennte Projekte werden empfohlen).
  • Eine (Sub-)Domain
  • Einen produktiven Linux-Server (VPS, AWS EC2 o. Ä.) (Laravel Cloud, Laravel Vapor und Vercel sind nicht möglich).
Wenn Sie nur Shared Hosting einsetzen können, ist der Betrieb eines Labelers schwierig.

Installation zusätzlicher Pakete

Konfiguration

Erzeugen Sie zunächst einen privaten Schlüssel.
Fügen Sie den erzeugten privaten Schlüssel und die zugehörigen Werte in .env hinzu.

Labeler-Klasse erstellen

Erstellen Sie eine eigene Labeler-Klasse, die von AbstractLabeler erbt. Die Datei kann beliebig abgelegt werden.
Da das Paket den Großteil der Labeler-Verarbeitung übernimmt, implementieren Sie nur die Teile, die Sie anpassen möchten.
Beispielimplementierung: ArtisanLabeler.php

labels()

Gibt die Label-Definitionen zurück. Die Konstanten-Definitionen des skyware-Starter-Kits sind eine gute Referenz.

subscribeLabels()

Wird unmittelbar nach der WebSocket-Verbindung aufgerufen. Gibt SubscribeLabelResponse als Iterator zurück.

emitEvent()

Wird aufgerufen, wenn ein Request zum Hinzufügen oder Entfernen eines Labels eingeht. Gibt UnsignedLabel als Iterator zurück.

saveLabel()

Speichert signierte Labels in der Datenbank. Gibt ein SavedLabel zurück.
Für Migration und Eloquent-Modell finden Sie Beispiele im Paket.

createReport()

Wird aufgerufen, wenn Nutzer beispielsweise einen Widerspruch (Appeal) einreichen.

queryLabels()

Fragt Labels statt über WebSocket über die HTTP-API ab. Wird vom offiziellen Bluesky nicht verwendet, aber von Drittanbietern genutzt. Wenn nicht erforderlich, geben Sie ein leeres Array zurück.

Registrierung im AppServiceProvider

Registrieren Sie die erstellte Labeler-Klasse in AppServiceProvider::boot().

Account-Setup

Initialisieren Sie den Account als Labeler.
Bei diesem Kommando geben Sie nicht das App Password ein, sondern das tatsächliche Account-Passwort. Während der Ausführung erhalten Sie eine Bestätigungs-E-Mail „PLC Update Operation Requested” – folgen Sie den Anweisungen des Kommandos.
Wenn die Endpoint-URL korrekt gesetzt ist, kann dieses Kommando auch aus der lokalen Umgebung ausgeführt werden.

Label-Definitionen deklarieren

Registrieren Sie die Label-Definitionen am Labeler-Account.
Auch dieses Kommando kann lokal ausgeführt werden.

Weitere Kommandos

Label-Definitionen löschen:
Labeler-Account in einen normalen Account zurückwandeln:

Ausführung auf Laravel Forge

Aktivieren Sie SSL und starten Sie den Labeler-Server mit folgender Konfiguration.

nginx-Konfiguration

Fügen Sie der nginx-Konfiguration von Forge drei location-Blöcke hinzu.

Deploy-Skript

Stoppen Sie den Labeler-Server beim Deployment. Danach startet Supervisor ihn automatisch neu.

Hintergrundprozess (Daemon) konfigurieren

Wählen Sie in Forges Konfigurationsmaske für Hintergrundprozesse nicht den Reiter „Queue Worker”, sondern Custom. Kommando:
Wenn Sie ihn gemeinsam mit Jetstream oder Firehose starten möchten, geben Sie Optionen an. Ein gleichzeitiges Ausführen mit den Kommandos bluesky:ws oder bluesky:firehose ist nicht möglich.

Labels vergeben

Wie Labels vergeben werden, hängt von der Anwendung ab. Das Beispiel nutzt die Event-Funktion von Laravel und vergibt ein Label bei „einer neuen Follower-Beziehung”.
Zur Absicherung gegen verlorene Events wird empfohlen, das Labeling zusätzlich per Task-Scheduling auszuführen.
Zuletzt geändert am 13. Juli 2026