什麼是 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 類別。檔案可放於任意位置。
範例實作:ArtisanLabeler.php
labels()
回傳標籤定義。skyware starter kit 的常數定義可供參考。subscribeLabels()
於 WebSocket 連線成功後立即被呼叫。以 iterator 回傳SubscribeLabelResponse。
emitEvent()
當有要求新增或刪除標籤時被呼叫。以 iterator 回傳UnsignedLabel。
saveLabel()
將已簽章的標籤儲存至資料庫。回傳SavedLabel。
createReport()
當使用者提出申訴等時被呼叫。queryLabels()
透過 HTTP API 取代 WebSocket 查詢標籤。Bluesky 官方並未使用,主要由第三方使用。若不需要可回傳空陣列。註冊至 AppServiceProvider
將所建立的 Labeler 類別註冊於AppServiceProvider::boot()。
帳號初始化
將帳號初始化為 Labeler 帳號。宣告標籤定義
於 Labeler 帳號註冊標籤定義。其他指令
刪除標籤定義:在 Laravel Forge 上執行
啟用 SSL 後,以下列設定啟動 Labeler 伺服器。nginx 設定
於 Forge 的 nginx 設定新增 3 個location 區塊。
部署腳本
於部署時停止 Labeler 伺服器。停止後 Supervisor 會自動重啟。背景程序(daemon)設定
在 Forge 的背景程序設定畫面,選擇 Custom 頁籤而非 Queue Worker 頁籤。 指令:bluesky:ws 或 bluesky:firehose 指令同時執行。
附加標籤
如何附加標籤取決於應用程式的實作。範例中利用 Laravel 的事件功能,在「被追蹤時」附加標籤。Source:docs/labeler.md
Sample:invokable/laralabeler