Happier のリレーをセルフホストする: SSO、mTLS、そして自前のデータベース
Happier は MIT ライセンスで、すべてのデバイスが通信するリレーは、自分で動かせるコンテナです。このページは、それに付いてくる制御の一覧です — サーバーが何を強制し、何を保存し、実行時にクライアントへ何を渡すのか。
リストに入る前に、形をはっきりさせておく価値があります。セッションは開発者自身のコンピュータで、彼らがすでに持っているプロバイダの CLI に対して動きます。リレーは、それらのコンピュータと、彼らの携帯電話、ブラウザ、デスクトップの間でメッセージを運びます。外から到達可能である必要があるのはそれだけで、ホストをお願いしているのもその部分です。
以下はすべてサーバーの設定です。そのコンテナ上の環境変数で、そのコンテナが適用し、経路の中に Happier が運用するサービスはありません。新しいサーバーの既定の姿勢は、エンドツーエンド暗号化されたストレージとオープンなサインアップで、これはほとんどの人がそれを Tailscale の背後に置くという前提に基づいています。このページを読んでいるなら、その文の後半についてはほぼ確実に逆を望んでいるはずです。
その暗号化された既定が内側で何を意味するのか — どの鍵がどこで生成され、あなたのリレーの手元に何が残り、鍵なしでどの列を読めるのか — は暗号化アーキテクチャにあり、あなた向けではなく開発者向けに書かれています。サーバーに何が見えるのかと尋ねる人に送るべきページはそちらです。このページは、あなたが強制できることに絞ります。
SSO: GitHub の組織、OIDC のグループ、クライアント証明書
ID は、あなたがすでに動かしているものに委譲されます。Happier の仕事は、それをサインアップのときだけでなくすべてのリクエストで強制し、問い続けることです。
- ID プロバイダを必須にし、リクエストごとに再確認する
- 匿名サインアップが既定で有効なのは、セルフホストする人の多くがリレーを Tailscale の背後に置いてそれで済ませるからです。これをオフにして代わりに ID プロバイダを必須にすると、資格の確認は認証が必要なすべての HTTP ルートと、リアルタイムのハンドシェイクで行われます — 入口だけではありません。資格を失った人からのリクエストは、格下げではなく拒否されます。
- GitHub サインインを自分の組織に限定する
- 特定のログインを許可することも、1 つ以上の GitHub の組織への所属を、いずれかに一致する形でも、すべてに一致する形でも必須にすることもできます。推奨される経路では、所属の確認をユーザー自身の OAuth トークンではなく GitHub App を通じて行うので、開発者が同意を取り消してもアクセスが残ることはなく、取り消したときに壊れることもありません。
- プロバイダごとの許可ルールを備えた OIDC シングルサインオン
- Okta、Entra ID、Auth0、Keycloak、ディスカバリドキュメントを持つものなら何でも。プロバイダごとに独自の許可ルールを設定できます。ログインの許可リスト、許可するメールドメイン、いずれかに所属している必要のあるグループ、すべてに所属している必要のあるグループです。IdP がトークンからグループを省き、代わりに超過を示すポインタを返す場合、Happier はそのユーザーをグループなしではなく資格なしとして扱います。
- MDM から配布した mTLS のクライアント証明書
- mTLS はリバースプロキシで終端し、検証済みの ID を Happier に転送します。証明書の SAN のメールアドレスまたは SAN の UPN から対応づければ、証明書をローテーションしたデバイスも同じ人物のままで、発行者とメールドメインの許可リストで制約できます。自動プロビジョニングを意図的に有効にしていない限り、未知の証明書は拒否されます。
- オフボーディング。所属は設定した間隔で再確認される
- 所属は設定した間隔で再確認され — 既定は 1 日ごと、最短で 1 分 — 結果は ID のレコードにキャッシュされます。興味深い設定は、IdP に到達できないときにどうするかです。既定は寛容ですが、厳格にすると、サーバーは古い資格確認の結果を最新のものの代わりにするのではなく、閉じる方向で失敗します。
ストレージのポリシー、保持期間、そしてあなたがホストするデータベース
監査担当者が、認証の話を終えたあとに 2 番目に尋ねる制御です。
- 3 つのストレージポリシー。既定は厳格なもの
- エンドツーエンド暗号化のみ。平文の書き込みを拒否するもので、新しいサーバーの状態です。任意。アカウントまたはセッションが決めます。あるいは平文のみ。インフラの層で暗号化を管理し、サーバー側のインデックスを求める組織向けです — これは実際のトレードオフであり、はっきり述べます。その設定では、サーバーは保存された内容を読めます。
- 自分で設定する保持期間を、トランスクリプトを読まずに適用する
- 既定はオフです。何も設定しなければサーバーはセッションを永久に保持します。オンにすると、セッションの規則は意図的に保守的になります。セッションツリーが削除されるのは、永続化されたフラグの上で非アクティブで、2 つの別々のタイムスタンプの両方で期限より古く、メモリ上でライブとして観測されていない場合だけで、期限は削除のトランザクションの中で再確認されます。判断のためにトランスクリプトを復号する必要は一度もありません。
- 機能を全員分まとめて無効にする
- 音声、ソーシャル、バグ報告のアップロード、添付ファイル、埋め込みターミナル、セッションのハンドオフ、接続済みサービス、クォータメーター — それぞれがサーバー上の環境変数で、実行時にクライアントへ通知されます。クライアントはサーバーが利用できると言うものに合わせるので、無効にした機能は、表示されて失敗するのではなく UI から消えます。
- レート制限と、自分で管理する診断エンドポイント
- 全体のリミッターに加えてルートごとの制限があり、それぞれ独自のウィンドウと、選べるキーの方式を持ちます — IP 単位、またはユーザー単位で IP にフォールバックする方式で、100 人の開発者が 1 つの VPN の出口アドレスを共有しているときに欲しいのは後者です。サーバーの診断スナップショットは有効にするまでオフで、有効にしてもオーナー専用です。
- Docker イメージと、その背後の SQLite または Postgres
- 公開されている relay-server のイメージは、Web UI を組み込んだ非 root ユーザーとして動き、既定では 1 つのマウントされたボリュームの下の SQLite を使い、ドキュメント化された Postgres の上書きを受け付けます。MySQL も、ソースからビルドしたイメージでなら動きます — ビルド済みのものは意図的にそのクライアントを含めていません。イミュータブルなタグを固定してください。イメージは自分では更新しません。
組織が Zero Data Retention の下にある場合
このページを読んでいるなら、すでに反対側から同じ壁にぶつかっているかもしれません。Anthropic 自身の Remote Control のドキュメントは明確です。Zero Data Retention のようなコンプライアンス要件のある組織は、それを有効にできません。その状態では Claude Code の管理コンソールのトグルはグレーアウトするので、Owner が別の判断を下せるものでもありません。また、Amazon Bedrock、Google Cloud の Agent Platform、Microsoft Foundry でも利用できず、トラフィックが api.anthropic.com ではなく LLM ゲートウェイに向けられているときは無効になります。
これはどれも批判ではありません。Remote Control は、デバイスの間で同期できるようにセッションのトランスクリプトを Anthropic のサーバーに置いていて、データを保持しない契約をした組織は、正しくそれを選択肢から外しています。単に、違う問いに対する違う答えというだけです。あなたの組織がその立場にあるなら、残る答えの形は、自分で運用するリレーです。
調達が手にするもの: MIT ライセンスとコンテナのイメージ
MIT です。ソースアベイラブルでもなく、認証まわりを商用ティアの裏に置くオープンコアでもなく、AGPL でもありません。このページにあるものはすべて、クライアントと同じリポジトリに、同じライセンスで入っていて、どれも私たちとの契約に依存していません。コピーレフトを建物の中に入れないという方針が組織にあるとしても、その方針はここで止まりません。
上の制御はどれも購入の裏にはありません。どれについても、買うべきエンタープライズのティアも、交渉すべき席数もありません。調達のプロセス次第で、これはこのページの安心できる部分にも、気がかりな部分にもなります。代わりに手に入るのは、ソースと MIT ライセンスとコンテナのイメージです。
テスト用のリレーを立てて、何が強制されるかを確かめる
正直な順番はこうです。使い捨てのホストにリレーを立て、開発者を 1 人そこに向け、GET /v1/features を読んで、そのサーバーがクライアントに何を告知しているかを正確に確認してください。そのレスポンスが契約であり、設定したポリシーをクライアントが実際に守るかを確かめる最短の方法です。
curl -fsSL https://happier.dev/install | bashDocker デプロイガイドはイメージ、ボリューム、Postgres の上書きを扱います。サーバー認証リファレンスは上に挙げたすべての変数を扱い、GitHub または OIDC プロバイダを必須にする公開サーバーのレシピも含みます。

