Skip to main content
Labeler 是進階功能。因需持續作為伺服器運行,本文件對象為使用 Laravel Forge 或能自行架設伺服器的使用者。不建議 Laravel 初學者使用,且不提供支援。Laravel Cloud 不支援。 Labeler 需以 WebSocket 伺服器常駐並修改 nginx 設定,而 Laravel Cloud 無法設定 nginx,因此無法執行 Labeler。

什麼是 Labeler

Labeler 是在 AT Protocol(Bluesky)上為內容附加標籤的服務。可用於審核、內容分類、自訂過濾等場景。 事先了解 Labeler 的概念相當必要。 其他語言的 starter kit 也可作為參考。 範例實作:

準備

執行 Labeler 需要以下項目。
  • Labeler 專用的新 Bluesky 帳號(不要使用平時的帳號)
  • Labeler 專用的新 Laravel 專案(建議獨立專案)
  • (子)網域
  • VPS 或 AWS EC2 等正式環境的 Linux 伺服器(Laravel Cloud、Laravel Vapor、Vercel 均不可)
若只能使用共享伺服器,運作 Labeler 有相當困難。

安裝額外套件

設定

首先產生私鑰。
將產生的私鑰與相關設定加入 .env

建立 Labeler 類別

建立繼承 AbstractLabeler 的自訂 Labeler 類別。檔案可放於任意位置。
由於套件承擔 Labeler 大部分處理,因此只需實作需要客製化的部分。
範例實作:ArtisanLabeler.php

labels()

回傳標籤定義。skyware starter kit 的常數定義可供參考。

subscribeLabels()

於 WebSocket 連線成功後立即被呼叫。以 iterator 回傳 SubscribeLabelResponse

emitEvent()

當有要求新增或刪除標籤時被呼叫。以 iterator 回傳 UnsignedLabel

saveLabel()

將已簽章的標籤儲存至資料庫。回傳 SavedLabel
Migration 與 Eloquent 模型請參考套件內的範例。

createReport()

當使用者提出申訴等時被呼叫。

queryLabels()

透過 HTTP API 取代 WebSocket 查詢標籤。Bluesky 官方並未使用,主要由第三方使用。若不需要可回傳空陣列。

註冊至 AppServiceProvider

將所建立的 Labeler 類別註冊於 AppServiceProvider::boot()

帳號初始化

將帳號初始化為 Labeler 帳號。
此指令輸入的不是 App Password,而是實際的帳號密碼。過程中會收到一封「PLC Update Operation Requested」的郵件確認信,請依指令的指示輸入。
只要端點 URL 已正確設定,也可以從本機環境執行。

宣告標籤定義

於 Labeler 帳號註冊標籤定義。
此指令亦可從本機環境執行。

其他指令

刪除標籤定義:
將 Labeler 帳號還原為一般帳號:

在 Laravel Forge 上執行

啟用 SSL 後,以下列設定啟動 Labeler 伺服器。

nginx 設定

於 Forge 的 nginx 設定新增 3 個 location 區塊。

部署腳本

於部署時停止 Labeler 伺服器。停止後 Supervisor 會自動重啟。

背景程序(daemon)設定

在 Forge 的背景程序設定畫面,選擇 Custom 頁籤而非 Queue Worker 頁籤。 指令:
若要與 Jetstream 或 Firehose 同時啟動,可指定選項。 無法與 bluesky:wsbluesky:firehose 指令同時執行。

附加標籤

如何附加標籤取決於應用程式的實作。範例中利用 Laravel 的事件功能,在「被追蹤時」附加標籤。
為避免事件遺漏,建議同時透過任務排程進行標籤附加。
最後修改於 2026年8月2日