🦋

一番詳しい ATProtocol PDS のセットアップガイド

2024/02/27に公開

はじめに

最近、今話題の分散型 SNS である Bluesky が連合機能を一般開放し、個人が Personal Data Server (PDS) を介して自分のドメインで Bluesky のインスタンスを立てられるようになりました。

MikanDev とそのパートナーである Neody は、既に URL 短縮サービスの要領で、Bluesky のユーザー名を短縮するようなサービスをリリースする計画をしていました。そのため、私たちは既にドメイン ekaki.art を持っており、絵師やイラストレーターの方をターゲットにする予定でした。

しかし、PDS がリリースされたため、以前からの計画を進めるのではなく、ユーザーが Bluesky のクライアントを介して接続するための PDS をこのドメインでホストすることにしました。

前提条件

このガイドに沿って自分で PDS を立てる場合は、いくつかのものが必要になります。

  • DNS サーバーを持ったドメイン名
    (多くの便利な機能があるため、Cloudflare を使用するのがおすすめ)
  • 2GB 以上の RAM、2 つ以上の CPU コア、少なくとも 40GB の空き容量がある VPS
    (安いサーバーを探している場合、比較的安価で高性能なサーバーを借りられる Contabo がおすすめ)
  • SMTP サーバー
    (Gmail のものを使っても大丈夫です)

サーバーのセットアップ

PDS を立てるために、まず GitHub の公式リポジトリを覗いてみました👇

https://github.com/bluesky-social/pds

ここに記載のあるインストールスクリプトを実行するだけで、サーバーに PDS をインストールできるようです。コマンド 1 つで完結するようなので、すごく簡単ですね。

curl https://raw.githubusercontent.com/bluesky-social/pds/main/installer.sh | bash

このスクリプトによって、Docker を使用し PDS やデータベース、caddy を使用したリバースプロキシがセットアップ・実行されます。
途中、ドメインなどについていくつか質問されるので、間違いのないように入力してください。

次に、ドメインの IP と DNS を設定します。

まず、サーバーのポート 80 と 443 を開く必要があります。
ここでは、ufw コマンドを使用する例を載せておきます。(これはサーバーの構成によって異なるので、適宜読み替えてください)

sudo ufw allow 80
sudo ufw allow 443

これで、PDS に外部からアクセスすることができるようになりました。

次に、ドメインの DNS を設定します。
お使いの DNS プロバイダにログインし、以下のレコードを追加します。

以下は Cloudflare を使った場合の例です。

  • サーバーの IP を指す、ドメインルートの A レコード
  • サーバーの IP を指す、ドメインのワイルドカードレコード (通常は * で表示)

TTL は自動または1分に設定します。

これで、ドメインを通じてサーバーにアクセスできるようになりました。

次に、PDSがドメインで実行されているかどうかをテストする必要があります。
ブラウザにアクセスして、https://(あなたのドメイン)/xrpc/_health にアクセスしてください
以下のような JSON レスポンスが表示されたら、PDS は正常に動いています👇

{"version":"0.2.2-beta.2"}

なお、ドメインの SSL 証明書は PDS が自動で作成するため、初回アクセスではしばらく待たなければならない場合があります。

これで、Blueskyクライアントを介してPDSに接続できるようになりました。

PDS に接続する

Bluesky に移動し、「新しいアカウントを作成」をクリックします。

次に進むと、デフォルトでは公式の Bluesky サーバーでアカウントを作成するようになっています。今は PDS に接続したいので、これを変更する必要があります。

「ホスティングプロバイダー」の編集ボタンをクリックします。

「カスタム」をクリックし、PDS のドメイン名を入力します。

デフォルトでは、招待コードの入力を求められます。1つ生成してみましょう。

サーバーにSSH接続し、以下のコマンドを入力します:

sudo pdsadmin create-invite-code

招待コードが発行されます。入力欄にコピペし、残りの情報を入力してください。

その後、メールアドレスの確認を求められます。しかし、まだメールサーバーがセットアップできていないので、メールは来ません。

設定ファイルについての補足

公式リポジトリで PDS の設定ファイルについて全く触れられていないので、補足を書いておきます。

まずは、サーバーに SSH 接続し、以下のコマンドを入力してください👇

cd /pds

次に、以下を実行します👇

ls

以下のようなリストが確認できたら、正解のディレクトリを開いています。

自分のいるディレクトリが正しければ、続けて以下のコマンドを実行します👇

nano pds.env

すると、設定ファイルの編集画面に行きます。

このスクショでは既にいくつかのオプションが設定済みなので、もう少し短いものが表示されると思います。

まずは、SMTP サーバーをセットアップします。自分のものを準備するか、Gmail を使用してください。
設定ファイルに以下を追加します。

PDS_EMAIL_FROM_ADDRESS=your@email.com
PDS_EMAIL_SMTP_URL="smtps://username:password@endpoint:port"

ユーザー名、パスワード、ポート、エンドポイントを自分の SMTP の資格情報に置き換えてください。例えば、このようにします:

PDS_EMAIL_SMTP_URL="smtps://bsky@domain.com:5up3r53cur3SMTPPassword@mailserver.com:587"

入力できたら、Ctrl+X を押下して保存し、終了します。

nano が閉じたら、以下のコマンドで PDS を再起動します👇

sudo systemctl restart pds

これで SMTP が設定できました!
もう一度アカウントを作成してみると、確認メールが届くはずです。

連合の申請

PDS のアカウントにログインすると、プロフィールなどの一部の機能が正しく機能しないことに気付くかもしれません。

これを解決するには、ベータ連合プログラム (beta Federation program) への参加を申請する必要があります。(この要件はしばらく後になくなると思います)

まず、Discord にある「PDS Admins Discord」に参加し、「#requests」チャンネルに移動します。

次に、チケットを開き、PDS情報を記入してください。

管理者からの返事が来るまで、根気強く待ちましょう。

(任意) S3 の設定

オブジェクトストレージを使用し、アップロードされた画像をサーバーに保存するのではなく、オブジェクトストレージに保存することをおすすめします。

必要なのは、S3 互換のストレージプロバイダーだけです。(非常に安価な従量制プランがあるため、DreamHost をおすすめします)

サーバーに SSH 接続し、先ほど説明した通りに設定ファイルを開きます。

この行を削除し👇

PDS_BLOBSTORE_DISK_LOCATION

次に、これらの行を追加します👇

PDS_BLOBSTORE_S3_BUCKET=your-bucket-name
PDS_BLOBSTORE_S3_REGION=s3-region
PDS_BLOBSTORE_S3_ENDPOINT=s3-endpoint
PDS_BLOBSTORE_S3_ACCESS_KEY_ID=s3-access-key
PDS_BLOBSTORE_S3_SECRET_ACCESS_KEY=s3-secret-key

値は適宜 S3 の資格情報に置き換えてください。

エディタを終了し、PDSを再起動したのち、以下を実行します👇

docker logs pds

S3 の設定が正しく機能しているかどうかを確認してください。

設定ファイルの変数

この記事では、設定しておくべき変数のほとんどを取り上げました。

全ての変数については、以下の ATProto リポジトリをご覧ください👇

https://github.com/bluesky-social/atproto/blob/main/packages/pds/src/config/env.ts

まとめ

このガイドでは、ドメインに Bluesky PDS を設定する方法をご紹介しました。
このガイドが役に立ったら、ぜひ共有をお願いします。
最後まで読んでいただき、ありがとうございました!

Neody

Discussion