見出し画像

セルフホスト Bluesky PDS でドメイン名ハンドルにしてみた

時代は招待制をやめて部分的にではありますが、セルフホストできるようになったBlueskyですかね。

というわけで、表題の通りPDSをつかってドメイン名ハンドルを設定してみました。

Bskyアカウントです。フォローしてね。



PDSとは

Bluesky本体に接続(クローリングとかされる)サーバーで、ユーザーの諸々のデータが保存されます。
なので、MastodonのようにオレオレBlueskyが建てられるよ!というよりは、Blueskyのストレージの一つになれるよ。という感じかなと思います。
まあ、わかりにくいですね。

```mermaid
graph TD;
    Bluesky-->PDS_A;
    Bluesky-->PDS_B;
    Bluesky-->PDS_C;
    Bluesky-->PDS_D;
```

将来的にはBluesky自体も建てられるようになるとは思いますが、あんまりそこには興味はないかなぁという感じです。

なんで立てるの?

なんで、わざわざPDSたてたの?

  • 技術的な興味

    • といってもほぼコマンド1つでたつので。。・

  • データの所有

技術的な興味

まあ、そこにセルフホストでできるんだからやってみないとね!というところですね。

  • DNSの設定

  • 設定ファイルの作成

  • Let's Encryptの設定

DNSはCloudFlareを使って設定しています。CloudFlareでは、1段階 *.wtr.app のSSL証明書は無料で発行してくれます。
しかし、*.bsky.wtr.app みたいな2段階以上なサブドメインには発行してくれません。そのため、それらのためにLet's Encryptを使って生成するようにTraefikを設定しました。
Traefikを使った理由は既存の自宅サーバー環境がTraefikだからです。
こんな感じ

certificatesResolvers:
  letsEncrypt:
    acme:
      email: le@wtr.app
      storage: /etc/traefik/acme.json
      dnsChallenge:
        provider: cloudflare
        resolvers:
          - 1.1.1.1:53
          - 1.0.0.1:53

docker-compose.yml にはこんな感じのラベルを追加しています。  bsky.wtr.appもCloudFlareをやめてLets Encryptにしようかなぁと思った名残が残っちゃっていますが、*.bsky.wtr.appだけ取得するようにしました。

- "traefik.http.routers.bskyAccount.rule=HostRegexp(`{subdomain:.+}.bsky.wtr.app`)"
- "traefik.http.routers.bskyAccount.entrypoints=websecure"
- "traefik.http.routers.bskyAccount.tls=true"
- "traefik.http.routers.bskyAccount.tls.certresolver=letsEncrypt"
- "traefik.http.routers.bskyAccount.tls.domains[0].main=*.bsky.wtr.app"

Let's Encryptの証明書を保存するのを忘れていて、やべえってなったりはしましたがとくに問題なく動いています。

データの所有

自己満足の世界を全く脱していないとは思うのですが、自分の作り出したものは自分で管理したいというところが、Self hostしている理由です。
いや、だって、運営とか信用ならんやん?永続性、完全制を他人に握られるとかいややん?
サービス終了するので、データバックアップとってね!とか。。。
もちろん、この文章もセルフホストしているwtr.appの方にも公開し、この記事のurlをcanonical urlとして指定しておくつもりです。

というわけで、

  • Readmeに従ってアカウントをつくり

  • bsky.appからカスタムハンドラーを指定して

  • 独自ドメインアカウントができました

残念ながら、PDSだけでは独自ドメインアカウントはまだ作れないので、bsky.appから変更する必要がありました。

途中、うまくうごかないエラーが発生した場合などは、デバッガーがあるのでこれをつかってちゃんと、証明書等がちゃんとできているのかを確認できます。