{
  "$type": "site.standard.document",
  "content": {
    "$type": "app.wtr.content.markdown",
    "markdown": "時代は招待制をやめて部分的にではありますが、セルフホストできるようになったBlueskyですかね。\n\nというわけで、表題の通りPDSをつかってドメイン名ハンドルを設定してみました。\n\n### Bskyアカウントです。フォローしてね。\n\n[**watura (@wtr.app)** _お一人さまPDSで運用中_ _bsky.app_](https://bsky.app/profile/wtr.app)[](https://bsky.app/profile/wtr.app)\n\n  \n\n* * *\n\n## PDSとは\n\n[**GitHub - bluesky-social/pds: Bluesky PDS (Personal Data Server) container image, compose file, and documentation** _Bluesky PDS (Personal Data Server) container image, compose f_ _github.com_](https://github.com/bluesky-social/pds)[](https://github.com/bluesky-social/pds)\n\n[**Early Access Federation for Self-Hosters | Bluesky** _For a high-level introduction to data federation, as well as_ _www.docs.bsky.app_](https://www.docs.bsky.app/blog/self-host-federation)[](https://www.docs.bsky.app/blog/self-host-federation)\n\nBluesky本体に接続(クローリングとかされる)サーバーで、ユーザーの諸々のデータが保存されます。  \nなので、MastodonのようにオレオレBlueskyが建てられるよ!というよりは、Blueskyのストレージの一つになれるよ。という感じかなと思います。  \nまあ、わかりにくいですね。\n\n````\n```mermaid\ngraph TD;\n    Bluesky-->PDS_A;\n    Bluesky-->PDS_B;\n    Bluesky-->PDS_C;\n    Bluesky-->PDS_D;\n```\n````\n\n将来的にはBluesky自体も建てられるようになるとは思いますが、あんまりそこには興味はないかなぁという感じです。\n\n## なんで立てるの?\n\nなんで、わざわざPDSたてたの?\n\n*   技術的な興味\n    \n    *   といってもほぼコマンド1つでたつので。。・\n        \n*   データの所有\n    \n\n### 技術的な興味\n\nまあ、そこにセルフホストでできるんだからやってみないとね!というところですね。\n\n*   DNSの設定\n    \n*   設定ファイルの作成\n    \n*   Let's Encryptの設定\n    \n\nDNSはCloudFlareを使って設定しています。CloudFlareでは、1段階 **\\*.wtr.app** のSSL証明書は無料で発行してくれます。  \nしかし、**\\*.bsky.wtr.app** みたいな2段階以上なサブドメインには発行してくれません。そのため、それらのためにLet's Encryptを使って生成するようにTraefikを設定しました。  \nTraefikを使った理由は既存の自宅サーバー環境がTraefikだからです。  \nこんな感じ\n\n```\ncertificatesResolvers:\n  letsEncrypt:\n    acme:\n      email: le@wtr.app\n      storage: /etc/traefik/acme.json\n      dnsChallenge:\n        provider: cloudflare\n        resolvers:\n          - 1.1.1.1:53\n          - 1.0.0.1:53\n```\n\ndocker-compose.yml にはこんな感じのラベルを追加しています。  **bsky.wtr.app**もCloudFlareをやめてLets Encryptにしようかなぁと思った名残が残っちゃっていますが、**\\*.bsky.wtr.app**だけ取得するようにしました。\n\n```\n- \"traefik.http.routers.bskyAccount.rule=HostRegexp(`{subdomain:.+}.bsky.wtr.app`)\"\n- \"traefik.http.routers.bskyAccount.entrypoints=websecure\"\n- \"traefik.http.routers.bskyAccount.tls=true\"\n- \"traefik.http.routers.bskyAccount.tls.certresolver=letsEncrypt\"\n- \"traefik.http.routers.bskyAccount.tls.domains[0].main=*.bsky.wtr.app\"\n```\n\nLet's Encryptの証明書を保存するのを忘れていて、やべえってなったりはしましたがとくに問題なく動いています。\n\n### データの所有\n\n自己満足の世界を全く脱していないとは思うのですが、自分の作り出したものは自分で管理したいというところが、Self hostしている理由です。  \nいや、だって、運営とか信用ならんやん?永続性、完全制を他人に握られるとかいややん?  \nサービス終了するので、データバックアップとってね!とか。。。  \nもちろん、この文章もセルフホストしているwtr.appの方にも公開し、この記事のurlをcanonical urlとして指定しておくつもりです。\n\nというわけで、\n\n*   Readmeに従ってアカウントをつくり\n    \n*   bsky.appからカスタムハンドラーを指定して\n    \n*   独自ドメインアカウントができました\n    \n\n残念ながら、PDSだけでは独自ドメインアカウントはまだ作れないので、bsky.appから変更する必要がありました。\n\n途中、うまくうごかないエラーが発生した場合などは、デバッガーがあるのでこれをつかってちゃんと、証明書等がちゃんとできているのかを確認できます。\n\n[**Bluesky Debug** _bsky-debug.app_](https://bsky-debug.app/)[](https://bsky-debug.app/)"
  },
  "path": "/blog/n9f5c73027be8",
  "publishedAt": "2024-03-11T00:00:00.000Z",
  "site": "at://did:plc:c656e4nvjol7kh35tfmzkgpu/site.standard.publication/3mmnvl6ln3226",
  "title": "セルフホスト Bluesky PDS でドメイン名ハンドルにしてみた",
  "updatedAt": "2026-05-25T07:15:04Z"
}