什么是 Labeler
Labeler 是在 AT Protocol(Bluesky)上给内容打 label 的服务。可用于内容审核、内容分类、自定义过滤等场景。 在动手之前,需要先理解 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()
返回 label 的定义。skyware starter kit 中的常量定义可作为参考。subscribeLabels()
在 WebSocket 建立连接后立即被调用。以迭代器的形式返回SubscribeLabelResponse。
emitEvent()
当收到添加或删除 label 的请求时被调用。以迭代器的形式返回UnsignedLabel。
saveLabel()
将已签名的 label 保存到数据库。返回SavedLabel。
createReport()
当用户发送申诉等报告时被调用。queryLabels()
作为 WebSocket 的替代,通过 HTTP API 查询 label。Bluesky 官方不使用,主要由第三方调用。不需要时返回空数组即可。在 AppServiceProvider 中注册
将创建好的 Labeler 类注册到AppServiceProvider::boot()。
账号初始化
将账号初始化为 Labeler 账号。声明 label 定义
将 label 定义注册到 Labeler 账号。其他命令
删除 label 定义:在 Laravel Forge 上运行
在启用 SSL 之后,使用以下配置启动 Labeler 服务器。nginx 配置
在 Forge 的 nginx 配置中添加 3 个location 块。
部署脚本
部署时停止 Labeler 服务器,Supervisor 会在停止后自动重启。后台进程(守护进程)配置
在 Forge 的后台进程配置界面中,选择 Custom 标签页,而不是 Queue Worker 标签页。 命令:bluesky:ws 或 bluesky:firehose 命令同时执行。
添加 label
具体如何打 label 完全取决于你的应用实现。示例中使用 Laravel 的事件机制,在 “被关注时” 添加 label。Source: docs/labeler.md
Sample: invokable/laralabeler