Labeler란
Labeler는 AT Protocol(Bluesky)에서 콘텐츠에 라벨을 붙이는 서비스입니다. 모더레이션, 콘텐츠 분류, 커스텀 필터링 등에 활용할 수 있습니다. Labeler의 개념을 사전에 이해해 두는 것이 필요합니다. 다른 언어용 스타터 키트도 참고가 됩니다. 샘플 구현:준비
Labeler를 운영하려면 다음이 필요합니다.- Labeler 전용 신규 Bluesky 계정(일상적으로 쓰는 계정은 사용하지 말 것)
- Labeler 전용 신규 Laravel 프로젝트(프로젝트는 분리 권장)
- (서브)도메인
- VPS나 AWS EC2 등의 프로덕션 Linux 서버(Laravel Cloud·Laravel Vapor·Vercel은 불가)
공유 서버만 사용할 수 있는 경우에는 Labeler 운영이 어렵습니다.
추가 패키지 설치
설정
먼저 비밀 키를 생성합니다..env에 추가합니다.
Labeler 클래스 생성
AbstractLabeler를 상속한 자체 Labeler 클래스를 생성합니다. 파일은 원하는 위치에 둘 수 있습니다.
샘플 구현: ArtisanLabeler.php
labels()
라벨 정의를 반환합니다. skyware 스타터 키트의 상수 정의가 참고가 됩니다.subscribeLabels()
WebSocket 접속 직후에 호출됩니다.SubscribeLabelResponse를 이터레이터로 반환합니다.
emitEvent()
라벨을 추가하거나 삭제하는 요청이 왔을 때 호출됩니다.UnsignedLabel을 이터레이터로 반환합니다.
saveLabel()
서명된 라벨을 데이터베이스에 저장합니다.SavedLabel을 반환합니다.
createReport()
사용자로부터 이의 제기 등이 전송되어 왔을 때 호출됩니다.queryLabels()
WebSocket 대신 HTTP API를 통해 라벨을 쿼리합니다. Bluesky 공식에서는 사용되지 않으며, 서드파티가 사용합니다. 필요하지 않은 경우에는 빈 배열을 반환합니다.AppServiceProvider에 등록
작성한 Labeler 클래스를AppServiceProvider::boot()에 등록합니다.
계정 셋업
Labeler 계정으로 초기화합니다.라벨 정의 선언
Labeler 계정에 라벨 정의를 등록합니다.그 외 명령어
라벨 정의 삭제:Laravel Forge에서 실행
SSL을 활성화한 뒤, 다음 설정으로 Labeler 서버를 기동합니다.nginx 설정
Forge의 nginx 설정에 3개의location 블록을 추가합니다.
배포 스크립트
배포 시에 Labeler 서버를 정지합니다. 정지 후에는 Supervisor가 자동으로 재기동합니다.백그라운드 프로세스(데몬) 설정
Forge의 백그라운드 프로세스 설정 화면에서 Queue Worker 탭이 아닌 Custom 탭을 선택합니다. 명령어:bluesky:ws나 bluesky:firehose 명령어와의 동시 실행은 할 수 없습니다.
라벨 부여
어떻게 라벨을 부여할지는 애플리케이션의 구현에 달렸습니다. 샘플에서는 Laravel 이벤트 기능을 사용해 “팔로우되었을 때” 라벨을 부여하고 있습니다.Source: docs/labeler.md
Sample: invokable/laralabeler