{
  "$type": "site.standard.document",
  "content": [
    {
      "$type": "app.myblog.markdown",
      "lang": "ja",
      "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/)\n"
    }
  ],
  "path": "/blog/3mmcuyp4fuaet",
  "publishedAt": "2024-03-11T00:00:00Z",
  "site": "https://wtr.app",
  "tags": [
    "note"
  ],
  "textContent": "時代は招待制をやめて部分的にではありますが、セルフホストできるようになったBlueskyですかね。\n\nというわけで、表題の通りPDSをつかってドメイン名ハンドルを設定してみました。\n\nBskyアカウントです。フォローしてね。\n\nwatura (@wtr.app) お一人さまPDSで運用中 bsky.app\n\nPDSとは\n\nGitHub - 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\n\nEarly Access Federation for Self-Hosters | Bluesky For a high-level introduction to data federation, as well as www.docs.bsky.app\n\nBluesky本体に接続(クローリングとかされる)サーバーで、ユーザーの諸々のデータが保存されます。なので、MastodonのようにオレオレBlueskyが建てられるよ!というよりは、Blueskyのストレージの一つになれるよ。という感じかなと思います。まあ、わかりにくいですね。\n\n```mermaid\ngraph TD;\n    Bluesky-->PDS_A;\n    Bluesky-->PDS_B;\n    Bluesky-->PDS_C;\n    Bluesky-->PDS_D;\n```\n\n将来的にはBluesky自体も建てられるようになるとは思いますが、あんまりそこには興味はないかなぁという感じです。\n\nなんで立てるの?\n\nなんで、わざわざPDSたてたの?\n\n技術的な興味\n\nといってもほぼコマンド1つでたつので。。・\n\nデータの所有\n\n技術的な興味\n\nまあ、そこにセルフホストでできるんだからやってみないとね!というところですね。\n\nDNSの設定\n\n設定ファイルの作成\n\nLet's Encryptの設定\n\nDNSはCloudFlareを使って設定しています。CloudFlareでは、1段階 \\*.wtr.app のSSL証明書は無料で発行してくれます。しかし、\\*.bsky.wtr.app みたいな2段階以上なサブドメインには発行してくれません。そのため、それらのためにLet's Encryptを使って生成するようにTraefikを設定しました。Traefikを使った理由は既存の自宅サーバー環境がTraefikだからです。こんな感じ\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\ndocker-compose.yml にはこんな感じのラベルを追加しています。  bsky.wtr.appもCloudFlareをやめてLets Encryptにしようかなぁと思った名残が残っちゃっていますが、\\*.bsky.wtr.appだけ取得するようにしました。\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\nLet's Encryptの証明書を保存するのを忘れていて、やべえってなったりはしましたがとくに問題なく動いています。\n\nデータの所有\n\n自己満足の世界を全く脱していないとは思うのですが、自分の作り出したものは自分で管理したいというところが、Self hostしている理由です。いや、だって、運営とか信用ならんやん?永続性、完全制を他人に握られるとかいややん?サービス終了するので、データバックアップとってね!とか。。。もちろん、この文章もセルフホストしているwtr.appの方にも公開し、この記事のurlをcanonical urlとして指定しておくつもりです。\n\nというわけで、\n\nReadmeに従ってアカウントをつくり\n\nbsky.appからカスタムハンドラーを指定して\n\n独自ドメインアカウントができました\n\n残念ながら、PDSだけでは独自ドメインアカウントはまだ作れないので、bsky.appから変更する必要がありました。\n\n途中、うまくうごかないエラーが発生した場合などは、デバッガーがあるのでこれをつかってちゃんと、証明書等がちゃんとできているのかを確認できます。\n\nBluesky Debug bsky-debug.app",
  "title": "セルフホスト Bluesky PDS でドメイン名ハンドルにしてみた",
  "updatedAt": "2026-05-20T21:47:17Z"
}