Big-Worldサーバー立てたい
# PDSを立てる際の注意事項
BGSはアカウント情報の取得に https://{handle}/.well-known/atproto-did をGETするので、PDSをホストしているドメインの *.{domain} 例えば *.boobee.blue がPDSに繋がるようにしておく必要がある
# 検索サーバーについて
# 鯖立てに必要な環境変数
code:env
DATABASE_URL: nullable, sqliteかpostgresqlのURL。デフォルトだと "sqlite://./data/bigsky/bgs.sqlite", postgresqlのときは "postgres://user:pass@host:port/bgs" のように書く
CARSTORE_DATABASE_URL: nullable, carstore(ipfs-car contentの格納先) databaseのURL。sqliteとpostgresqlに対応。デフォルトで "sqlite://./data/bigsky/carstore.sqlite"
DATA_DIR: nullable, CARファイルとその他のファイルの保存先。デフォルトでdata/bigsky
# その他 cmd/bigsky/main.goで設定されている値
code: main.go
jaeger: opentelemetryのトレーサーライブラリのjaegerの使用の有無。boolean, defaultでfalse
db-tracing: DBのトレーシングの有無。boolean, defaultでfalse
crawl-insecure-ws: boolean, PDSに接続する際に "wss://" のかわりに "ws://"を用いる(sslじゃない)。defaultでfalse
aggregation: 収集したレコードをDBに記録するかどうか。boolean, defaultでtrue
api-listen: string, ポート番号っぽい。defaultで ":2470"
debug-listen: string, debug用のホストURL, defaultで "localhost:2471"
disk-blob-store: string, defaultでnull
# postgresqlの場合は事前作業が必要。例えば下記のようなコマンドを事前に打っておく必要がある
code: sql
CREATE DATABASE bgs;
CREATE DATABASE carstore;
CREATE USER ${username} WITH PASSWORD '${password}';
GRANT ALL PRIVILEGES ON DATABASE bgs TO ${username};
GRANT ALL PRIVILEGES ON DATABASE carstore TO ${username};
# 下記のようなdocker-compose.ymlと上記コマンドが入った postgres/init/01_initialize.sql を用意するとローカルで docker compose up -d で動かせる
code:docker-compose.yml
version: "3"
services:
bigsky:
build:
context: .
dockerfile: ./cmd/bigsky/Dockerfile
links:
- db
depends_on:
db:
condition: service_healthy
ports:
- "2470:2470"
- "2471:2471"
volumes:
- bgs-data:/data/bigsky
environment:
DATABASE_URL: postgres://admin:password@db:5432/bgs
CARSTORE_DATABASE_URL: postgres://admin:password@db:5432/carstore
db:
image: postgres:14.6
container_name: postgres
ports:
- 5432:5432
volumes:
- db-store:/var/lib/postgresql/data
- ./postgres/init:/docker-entrypoint-initdb.d # この行を追加しただけ
environment:
POSTGRES_USER: admin
POSTGRES_PASSWORD: password
healthcheck:
test: "pg_isready -U admin -d bgs"
interval: 5s
retries: 20
volumes:
bgs-data:
db-store:
# クローラーの実行
curl http://localhost:2470/xrpc/com.atproto.sync.requestCrawl?hostname=
注意: 一度起動すると再起動後も全投稿を取得するまでクロールし続ける, 何故か指定していない bsky.socialもクロールする
# インデクサーの動き
POSTの中身はIPFSのCARファイルに変換されて、bgsデータベースの feed_postsテーブルにはCIDのみが記録される。CARファイルはcarstoreデータベースに保存される
# 検索時のレスポンス
現在staging?で動いているPOST検索機能のレスポンスは以下のようになっている
code:res.json
{
cid: string, CID,
post: {
$type: string, e.g. "app.bsky.feed.post",
createdAt: string, timestamp,
entities: [
{
index: {
end: number,
start: number
},
type: string, e.g. "link",
},
text: string, 本文,
...
],
tid: string, e.g. "app.bsky.feed.post/${ID}",
user: {
did: string, DID,
handle: string, e.g. "" # 相対的なhandle?
}
}
}
# 全文検索エンジンの導入
meiliseachはindigo標準のsqlite, postgresqlとは互換性が無いので、indigoにmeilisearch用のindexerを用意する必要がある
別に用意するよりmeilisearchをenableに設定したときだけpostgresqlと同期するようにした方がスマートでよさそう?
1. crawlerがindexerを発火したタイミングでmeilisearchにもadd documentする
2. bgsで検索が叩かれたときだけmeilisearchを使う
エンドポイントは /search/posts?q=だけどmainブランチでは未実装
responseは