Site icon image usounds

usoundsの日常や技術的なメモを残すブログです

Starrysky Query Engineセットアップマニュアル

StarryskyはBlueskyのカスタムフィードサーバー向けのアプリケーション群です。下記のような特徴があります。

Starrysky Query Engine

Blueskyからデータを引っ張ってきて、検索を行う検索エンジンそのものです。

  • サーバーはみなさんで準備いただきます。ただし、render.comで動かせばサーバーレスです。大規模でなければたぶん無料枠で堪え切れると思います。Renderは英語なので、そこだけは英語を頑張ってください。
  • Renderの無料枠ではパーシスタンスディスクが使えませんが、後述のAdmin Consoleと組み合わせることで検索条件は別サーバーに保存することができます。このバックアップは私のCloudflareのD1に保存されますので、私やそれ以外の第三者が検索条件を見ることが出来ます。
  • Firehoseを使用していないので、WebSocket通信出来ないサーバーで動作します
  • 7日間の制限はありませんが、メモリ次第です。
  • Contrailsよりは設定簡単だと思います。

Starrysky Console

Query Engineの検索条件は、Admin Console経由で設定することができます。Query Engineを用意しなくても、デモモードを使って、Blueskyにログインすればどのように使うかのイメージは湧きやすいかと思います。

  • 検索条件を日本語で設定することができます
  • 正規表現が使えます
  • リプライは非表示にできます
  • 画像のみの投稿に絞り込むことができます
  • 言語の絞り込みができます
  • 画像のALT設定文字に対する検索ができます
  • 初期起動時に、100件の履歴を取り込みます。設定で広げることは可能です
  • 入力した検索条件がどのような結果になるかをAdmin Consoleでプレビューできます

制限について

下記の大きな制限があります

  • 現在はアルファ版です。データぶっとんでも、挙動おかしくても泣かないでください
  • SkyFeedと同様、リアルタイムに反映されません。何分おきに反映するかは変更できます
  • 破壊的な改修を行う可能性があります

また、render.comの無料枠を使用する場合は下記の制限があります

  • 設定しないとインスタンスが落ちるので、必ず後述の設定をしてください。落ちた場合の保存データは失われます

作るにあたり、SuibariさんのFeed Profile Searchを参考にさせていただきました。せっかくSkyFeedとの差別化を図っていただいたところをSkyFeed寄りに戻す謎の退化をさせてしまいました。この場を借りてお礼申し上げます。

設定手順

※GitHubのForkは不要になりました

Render.comにアカウント作ります

右上のNew→Web Serviceをクリックします

Image in a image block

そのままNextします

Image in a image block

下の方に「Public Git repository」があるので、ここにStarrysky Query EngineのURLを入力します

https://github.com/usounds/StarryskyQueryEngine
Image in a image block

下記のように設定します

Name なんでも(そのままでもOK)
Region Oregon(US West)
※シンガポール遅いです
Branch main(デフォルトのまま)
Root Directory 未設定(デフォルトのまま)
Runtime Node(デフォルトのまま)
Build Command yarn install
Start Command yarn start
Instance Type Free
Environment Variables いっぱいあるので表分けます
Image in a image block
Image in a image block
Image in a image block

Environment Variablesはサーバーを動作させるのに必要な設定を行います。後述のテンプレ使うと楽です。何を設定すべきかはここを読んでください

Key Value
FEEDGEN_CRON_INTERVAL 最新の投稿を取り込む間隔を1分単位で入力します。短くしたいでしょうが3分ぐらいから始めましょう

3
FEEDGEN_PUBLISHER_IDENTIFIE あなたのBlueskyのHandleを指定します。
カスタムハンドル、PDSセルフホステッドは適時いい感じに読み替えてください

xxxxx.bsky.social
FEEDGEN_APP_PASSWORD あなたのBlueskyのApp Passwordを指定します。

xxx-xxx-xxx-xxx
FEEDGEN_HOSTNAME 初期構築時点では、ドメインがわからないので下記の値にしてください

example.com
FEEDGEN_LISTENHOST 下記を固定値で設定します。

0.0.0.0
FEEDGEN_PORT 下記を固定値で設定します。

10000
EDIT_WEB_PASSKEY Admin Consoleを使用するためのパスワードを作っていただきます。このパスワードは他人に知られないようにしてください。また、Blueskyのアプリパスワードとは別になります。

aaaaaaaa(必ずaaaaaaa以外の文字列を設定してください)

これらの設定はこれをコピペすると楽ができます。「Add from .env」をクリックします。

Image in a image block

下記を貼り付けます。貼り付け後、変更が必要な値を修正してください。

FEEDGEN_APP_PASSWORD='xxxx-xxxx-xxxx'
FEEDGEN_CRON_INTERVAL='3'
FEEDGEN_HOSTNAME='example.com'
FEEDGEN_LISTENHOST='0.0.0.0'
FEEDGEN_PORT='10000'
FEEDGEN_PUBLISHER_IDENTIFIER='xxxx.bsky.social'
EDIT_WEB_PASSKEY='必ず何かの値を設定してください'
Image in a image block

一番下のCreate Web Serviceをクリックします。

押すとビルドが始まるのでそのまま5分ぐらい待ちます

Image in a image block

まだ待ちます。下記のように「Your service is live 🎉」まで見れればOKです。5分経っても終わらない場合は、F5でリロードしてください。

Image in a image block

引き続き設定します。

画面の左上のほうにURLが表示されているので、右のアイコンクリックしてクリップボードにコピーします。

Image in a image block

左のEnvironment→FEEDGEN_HOSTNAMEの値を、コピーしたホスト名のhttps://を除いた値で上書きします。私の場合は「ss-usounds.onrender.com」となります。上書きが終わったら下のほうの「Save Changed」を押すと再度Buildが走るので5分ぐらい待ちます。Deployの画面に自動で移動しなかった場合は、左のEventsから最新のDeployを確認してください。

最後に、Setting→Auto-DeployのEditボタンを押して、Noに変更し、Save Changedをクリックします。この設定を行わないと、私が何らかソースコードを修正すると自動的にQuery Engineが自動でデプロイされます。

Image in a image block

※2024/4/19からUptimeRobotは不要になるような仕組みに変更しました

この後は

Admin Consoleにログインします。

Query Engine URLには、ご自身が立ち上げたQuery EngineのURLを、Web Pass keywordはEnviromentsのEDIT_WEB_PASSKEYに設定した値と同じものを入力し、読み込みをクリックします。

また、プレビューやカスタムフィードを公開する際にはBlueskyへのログインが必要になるので、Blueskyのハンドルとアプリパスワードを入力してBlueskyにログインをクリックします。

Image in a image block

あとは画面の説明通りに入力すれば、カスタムフィードとして登録できます。

FAQ

初期起動時に100件の投稿を読み込まない

画像のみの投稿や、検索キーワードに「英語」を含むが言語フィルターに「ja」を指定している場合などは初期起動時の読み込み件数満たない場合であっても、処理を中断します。現時点でこの挙動を変更する予定はありません。

自分の投稿から絞り込みたい

Bluesky QueryはBlueskyの検索と全く同じですので「from:me」が使えます。同様に、別の人も指定できます。

設定変更しても、すでに取り込んだ投稿を消えないようにしてほしい

Render使っている場合は、有料版使えばたぶん行けると思います。有料版に切り替え、環境変数「FEEDGEN_SQLITE_LOCATION」を追加して「./db.sqlite」を指定してサービスを再起動すれば保存されるはずです。

セルフホストしている場合は、FEEDGEN_SQLITE_LOCATIONを指定して同様にQuery Engineを再起動してください。

Query EngineをRender以外でセルフホストした。Admin ConsoleってLocalhost指定できないよね?

Query EngineはBlueskyから直接アクセスされます。この場合、Blueskyのカスタムフィードサーバーの要件である「SSL通信可能な外部からアクセス可能なサーバー」を満たす必要があります。よって、Query EngineはSSL通信でインターネットから通信できる場所に設置するようにしてください。

BlueskyからSSL通信できれば良いので、通常は外部から何らかのリバプロかトンネルでアクセスすることになると思います。その場合、リバプロまでSSL通信出来れば大丈夫です。

なんか不安定なんだけど?

Renderのインスタンスを再起動してください。Dashboardの右のManual Deployのプルダウンの一番下にRestart Serviceがあります。

Image in a image block
件数が多くなりすぎたのでデータを消したい

現在、データを消す手段がないので、サービスを再起動してください。FEEDGEN_SQLITE_LOCATIONを使用している場合は、その指定されたファイルを削除してください。

Query EngineをRender以外にセルフホストする際の手順書が欲しい

git cloneして、環境変数のあの6つを.envなりシェルに登録して、yarn startしてください