Happier リレーをセルフホストする方法:Docker で自前のサーバーを立てる

自分の Happier リレーサーバーを運用して、インフラとデータの保存場所を自分で管理する方法。

対象バージョン
CLI
0.2.17
プレビュー ref
a2c45c8

セッションデータの保存場所やリレーの設定を自分で管理したいなら、自分のリレーを運用できます。クラウドリレーで問題なく使えますが、セルフホストならすべてを自分で所有できます。

このガイドでは、プライベートな Happier リレーの運用方法を説明します。

要点

Docker(まずはこちらがおすすめ):

docker pull happierdev/relay-server:stable
docker run -d \
  -p 3600:3600 \
  -e HANDY_MASTER_SECRET="$(openssl rand -hex 32)" \
  -e NODE_ENV=production \
  --name happier-relay \
  happierdev/relay-server:stable

または管理型インストール:

happier relay host install --mode system

そのあと、クライアントがデフォルトではなく自分のリレー URL を使うように設定します。

課題

クラウドリレーを使うということは:

  • セッションデータが自分で管理していないインフラを通る
  • データの保存場所や保持ポリシーを管理できない
  • クラウドサービスの可用性に依存する
  • レート制限やポリシーのカスタマイズが限られる

ワークフローによってはそれで問題ありません。そうでない場合に必要なのは:

  • インフラを完全に自分で所有すること
  • データが自分のネットワークや選んだホスティング内にとどまること
  • 独自の認証とアクセスポリシー
  • アップデートと設定の管理

よくある方法とそのトレードオフ

  • クラウドリレー:問題なく動きますが、データは自分のインフラにはありません。
  • ソースからビルド:可能ですが、依存関係とビルド手順を追い続ける必要があります。
  • 独自のリレー実装:保守の負担になります。

公式リレーのセルフホスト なら、これを解決できます:

  • ビルド済みの Docker イメージ
  • 管理型インストールの選択肢
  • クラウド版と同じリレープロトコル
  • デプロイを完全に管理できる

Happier を初めて使う場合

Happier は、Claude Code、Codex、OpenCode などの AI コーディングエージェント向けのオープンソースのコンパニオンアプリです。

リレーはサーバー側のコンポーネントで、次の役割を持ちます:

  • デバイス間のメッセージを中継する
  • セッションのメタデータを保存する
  • 認証を処理する
  • エンドツーエンド暗号化されたメッセージの受け渡しを提供する

リレーをセルフホストすれば、セッションと承認が自分のインフラの外に出ることはありません。

セットアップ:

前提条件

デプロイ方法をひとつ選びます。

Docker の場合(おすすめ)

  • Docker がインストールされている
  • パブリック IP またはプライベートネットワークでアクセスできるホスト
  • ポート 3600 が空いている(または別のポートを設定する)

管理型インストールの場合

  • Linux または macOS のマシン
  • Happier CLI がインストールされている
  • サービスを実行できる(systemd またはユーザーサービス)

ランナーの場合(上級者向け)

  • Node.js または Bun
  • プロセスマネージャー(PM2、systemd など)
  • アーティファクトの手動管理

方法 1:Docker(ほとんどの人におすすめ)

Docker なら、少ない設定ですぐにセルフホストを始められます。

1) イメージを取得する

docker pull happierdev/relay-server:stable

利用できるタグ:

  • stable:本番向けリリース
  • preview:プレビューリリース
  • dev:開発ビルド

本番では stable を使いましょう。

2) マスターシークレットを生成する

マスターシークレットは保存データの暗号化と認証トークンの導出に使われます。

openssl rand -hex 32

この値は安全に保管してください。なくさないこと:シークレットを変更すると既存のデータが読めなくなります。

3) コンテナを起動する

docker run -d \
  -p 3600:3600 \
  -e HANDY_MASTER_SECRET="your-secret-from-step-2" \
  -e NODE_ENV=production \
  --name happier-relay \
  --restart unless-stopped \
  happierdev/relay-server:stable

4) 動いているか確認する

docker logs happier-relay

次のように表示されるはずです:

[info] Happier relay server starting...
[info] Listening on http://0.0.0.0:3600

5) クライアントが自分のリレーを使うように設定する

Happier アプリから:

  1. 設定(Settings)→ サーバー(Server)に進む
  2. 新しいサーバープロファイルを追加する
  3. リレー URL を入力する:http://your-server-ip:3600
  4. 保存して接続する

Happier CLI から:

happier config set relay.url http://your-server-ip:3600

クライアントの詳しい設定は セルフホストのクイックスタート を参照してください。

方法 2:管理型インストール(サービスとしてデプロイする場合)

管理型インストールは、起動時に立ち上がりアップデート用のコマンドも備えたシステムサービスを作成します。

1) Happier CLI をインストールする

CLI のインストールガイド に従ってください。

2) リレーをシステムサービスとしてインストールする

happier relay host install --mode system

ユーザーモードでインストールする場合(sudo 不要):

happier relay host install --mode user

3) マスターシークレットを設定する

サービスの設定を編集します:

sudo nano /etc/happier-relay/env

次を追加します:

HANDY_MASTER_SECRET=your-secret-here
NODE_ENV=production

4) リレーを起動する

happier relay host start

5) 状態を確認する

happier relay host status

次のように表示されるはずです:

Relay service: active (running)

6) クライアントを設定する

Docker の場合と同じく、クライアントの設定にリレー URL を追加します。

方法 3:ランナー(上級者向け)

ランナーは起動時にリレーのアーティファクトを取得・検証してから、サーバーのバイナリを実行します。

次のような環境向けです:

  • すでにプロセスマネージャーがある
  • 再起動時にアーティファクトをダウンロードしたい
  • Docker やサービス管理を使いたくない

1) リレーサーバーのパッケージを実行する

npx --yes --package @happier-dev/relay-server happier-server \
  --master-secret "your-secret-here" \
  --port 3600

2) プロセスマネージャーと組み合わせる

PM2 の例:

pm2 start npx --name happier-relay -- \
  --yes --package @happier-dev/relay-server happier-server \
  --master-secret "your-secret-here" \
  --port 3600
pm2 save

ランナーの詳細は セルフホストのランタイムのドキュメント を参照してください。

環境変数の設定

主な環境変数:

変数用途必須
HANDY_MASTER_SECRET暗号化と認証の導出はい
NODE_ENVproduction に設定はい
HAPPIER_RELAY_PORT待ち受けるポートいいえ(デフォルト:3600)
HAPPIER_RELAY_HOSTバインドするアドレスいいえ(デフォルト:0.0.0.0)

一覧は 環境変数のドキュメント を参照してください。

認証の設定

デフォルトでは、リレーはパスワードによる認証を使います。

本番では次も検討してください:

HTTPS とリバースプロキシ

本番では、リレーを HTTPS 対応のリバースプロキシの後ろに置きましょう。

nginx の例:

server {
    listen 443 ssl;
    server_name relay.example.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass http://localhost:3600;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

クライアントの接続先は https://relay.example.com になります。

アップデート

Docker

docker pull happierdev/relay-server:stable
docker stop happier-relay
docker rm happier-relay
# Re-run the docker run command with the new image

管理型インストール

happier relay host install --mode system
happier relay host restart

ランナー

ランナーは再起動時に新しいアーティファクトを自動で取得します。

トラブルシューティング

症状:コンテナがすぐに終了する

考えられる原因:

  • HANDY_MASTER_SECRET がない、または無効
  • ポートがすでに使われている

対処:

  1. コンテナのログを確認する:docker logs happier-relay
  2. 環境変数が設定されているか確認する
  3. ポートの空きを確認する:lsof -i :3600

症状:クライアントが接続できない

考えられる原因:

  • ファイアウォールがポート 3600 をブロックしている
  • リレーが正しいインターフェースで待ち受けていない
  • クライアントのリレー URL が間違っている

対処:

  1. リレーが動いているか確認する:docker ps または happier relay host status
  2. ファイアウォールを確認する:sudo ufw allow 3600/tcp
  3. 接続をテストする:curl http://your-server-ip:3600
  4. クライアントのリレー URL がサーバーのアドレスと一致しているか確認する

症状:「Authentication failed」エラーが出る

考えられる原因:

  • リレーとクライアント登録の間でマスターシークレットが変わった
  • 認証トークンを保持せずにリレーを再起動した

対処:

  1. HANDY_MASTER_SECRET が一貫しているか確認する
  2. マスターシークレットを変えた場合はクライアントを再登録する
  3. リレーのログで認証エラーを確認する

症状:アップデートが反映されない

Docker:

  • コンテナを作り直す前にイメージを取得しているか確認する
  • イメージのタグが変わっていないか確認する

管理型インストール:

  • happier relay host install をもう一度実行する
  • インストール後にサービスを再起動する

よくある質問

セルフホストは必要ですか?

いいえ。ほとんどのユーザーにはクラウドリレーで十分です。

次のような場合はセルフホストしましょう:

  • データの保存場所を保証する必要がある
  • インフラを完全に管理したい
  • コンプライアンス上の要件がある
  • 自分で管理するサービスを好む

クラウドからセルフホストに移行できますか?

はい。ただしセッションは自動では移行されません。

手順:

  1. セルフホストのリレーを用意する
  2. クライアントが新しいリレー URL を使うように設定する
  3. 既存のクラウドのセッションはクラウドリレーに残る
  4. 新しいセッションはセルフホストのリレーを使う

エンドツーエンド暗号化は有効なままですか?

はい。E2E 暗号化はクライアント側で行われ、どのリレーを使うかには左右されません。

リレーの運用者(あなた自身でもクラウド事業者でも)は、どちらにしてもセッションの内容を読めません。

リレーのデータをバックアップするには?

リレーはデータをデータディレクトリに保存します。

Docker: ボリュームのマウントを追加します:

-v /path/to/data:/data

管理型インストール: データの場所は OS によって異なります。happier relay host status で確認してください。

バックアップ:

  1. リレーを停止する
  2. データディレクトリをコピーする
  3. リレーを再起動する

複数のリレーインスタンスを動かせますか?

はい。高可用性や負荷分散のために動かせます。

要件:

  • 共有のデータストア(データベース)
  • 前段のロードバランサー
  • すべてのインスタンスで同じ HANDY_MASTER_SECRET

クラスタリングの設定は 環境変数のドキュメント を参照してください。

関連ガイド

self-hostingrelaydockerinfrastructure
最終更新: 2026-10-26