LobeHub をセルフホスト:自分のモデル API につなぐ、複数人で使える AI チャットプラットフォーム
Zenavo のテンプレートで LobeHub を PostgreSQL、Redis、RustFS ファイルストレージとともに自分のサーバーにデプロイします。2つのドメインを設定し、登録後に登録できるメールアドレスを制限して、OpenAI や Claude などのモデルプロバイダーに接続し、バックアップとアップグレードに備える方法を説明します。
この記事は English、简体中文、繁體中文、Español、Bahasa Indonesia でもお読みいただけます。
LobeHub(旧 LobeChat)はオープンソースの AI チャットプラットフォームです。OpenAI、Anthropic、Google、DeepSeek など数十のモデルプロバイダーに対応し、複数ユーザーのアカウント、会話履歴、ファイルのアップロード、ナレッジベース、エージェントを備えています。画面も充実しているので、チームや家族で共有する AI の入口として最適です。
サーバー版にはデータベースとファイルストレージが必要で、一から構築すると多くの設定が必要です。Zenavo の LobeHub テンプレートにはこれらがすべてまとめられています。この記事では、デプロイからバックアップまでを順に説明します。単一コンテナと1つのドメインで動くより軽量なチャット UI をお探しの場合は、Open WebUI もご覧ください。
サーバー、Zenavo、モデルプロバイダーの API の料金はそれぞれ別に発生します。LobeHub 自体はモデルを提供せず、会話は設定したプロバイダーに送られます。
テンプレートの内容
LobeHub テンプレートを開いてデプロイすると、プロジェクトに次の4つのサービスが作成されます。
| サービス | 役割 |
|---|---|
| lobehub | アプリ本体。イメージ lobehub/lobehub:2.3.3、HTTP ポート 3210 |
| postgresql | アカウント、会話、設定、暗号化して保存した API キー。全文検索拡張付き(ParadeDB、PostgreSQL 17) |
| redis | キャッシュとセッション |
| rustfs | S3 互換のファイルストレージ。アップロードした画像やファイルを保存します。ポート 9000 は S3 API、9001 は管理コンソールです |
テンプレートは 2 GB のメモリを確保することを推奨しています。データベースのパスワード、ログイン用の暗号鍵(AUTH_SECRET)、API キー用の暗号鍵(KEY_VAULTS_SECRET)は、デプロイ時にすべて自動生成されます。
2つのドメインを用意する
LobeHub には公開アドレスが2つ必要です。
- アプリの URL:例
https://chat.example.com。LobeHub を開くためのアドレスです。 - ファイルストレージの URL:例
https://files.example.com。ブラウザが画像をアップロード・表示するときに直接アクセスします。
まず DNS で、この2つのサブドメインにサーバーを指す A レコードを追加します。次に Zenavo に Linux サーバーを接続し、テンプレートを開いて2つの URL を入力し(末尾にスラッシュを付けないでください)、サーバーを選んでデプロイします。
ドメインを設定する
デプロイ後、それぞれ次のように割り当てます。
- lobehub サービスの ネットワーク タブで、ポート
3210にchat.example.comを割り当てます。 - rustfs サービスの ネットワーク タブで、ポート
9000にfiles.example.comを割り当てます。
ドメインは、デプロイ時に入力したものと一致している必要があります。HTTPS が有効になったら https://chat.example.com を開きます。手順はドメインと HTTPS をご覧ください。
9001 は RustFS の管理コンソールです。公開ドメインを割り当てる必要はなく、おすすめもしません。
アカウントを登録し、登録を制限する
アプリを開き、メールアドレスとパスワードで最初のアカウントを登録します。
テンプレートの初期状態では、誰でも登録できます。チームや家族の中だけで使う場合は、lobehub サービスの 変数 に登録を許可するメールアドレスまたはドメインを追加し、保存して再起動します。
AUTH_ALLOWED_EMAILS=example.com,friend@gmail.com
完全なメールアドレスでもドメインだけでもよく、カンマで区切ります。以降、リストにないメールアドレスでは登録できなくなります。
メールアドレスの確認やパスワードの再設定が必要な場合は、SMTP も設定します。
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_SECURE=false
SMTP_USER=noreply@example.com
SMTP_PASS=SMTP のパスワード
AUTH_EMAIL_VERIFICATION=1
ポート 465 を使う場合は、SMTP_SECURE を true に変更します。SMTP を設定しなくても登録とログインは問題なくできますが、確認メールやパスワード再設定のメールは送信できません。
モデルに接続する
方法は2つあり、併用もできます。
各自が自分のキーを入力する。 ログイン後に 設定 → AI サービスプロバイダー を開き、プロバイダーを選んで API キーを入力し、必要に応じてプロキシのアドレスを入力して、チェックをクリックします。キーは KEY_VAULTS_SECRET で暗号化されてデータベースに保存され、ほかのユーザーからは見えません。
管理者がまとめて提供する。 lobehub サービスの 変数 にプロバイダーのキーを設定すると、すべてのユーザーが自分で入力しなくてもそのまま使えます。
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
DEEPSEEK_API_KEY=sk-...
OpenAI 互換 API のプロバイダーやゲートウェイを使う場合は、OPENAI_PROXY_URL でアドレスを変更できます。例えば、セルフホストした New API、Magpie、または LiteLLM ゲートウェイの https://api.example.com/v1 を指定し、ゲートウェイで LobeHub 専用の、利用枠を制限したキーを発行します。LobeHub に無料のリアルタイム Web 検索を追加したい場合は同じプロジェクトに SearXNG を追加でき、Telegram や Discord からも AI アシスタントを使いたい場合は OpenClaw と組み合わせられます。
まとめて提供したキーは、ログインできる全員が使い、あなたの利用枠を消費します。 設定する前に、前のセクションの手順で登録を制限してください。
アップロードしたファイルについて
アップロードした画像やファイルは、rustfs の lobe バケットに保存されます。テンプレートはこのバケットを公開読み取り可能に設定しており、ブラウザが画像を直接表示できるようにしています。つまり、ファイルのアドレスを知っている人はログインせずに開けます。アドレスにはランダムなパスが含まれ、一覧表示や検索はされませんが、リンクから開かれては困る機密ファイルはアップロードしないでください。
モデルに送る画像は base64 に変換されてリクエストに直接含まれます(テンプレートで LLM_VISION_IMAGE_USE_BASE64=1 を設定しています)。そのため、モデルプロバイダーがファイル用ドメインにアクセスできる必要はありません。
バックアップ
バックアップが必要なものは2つあります。
- postgresql:アカウント、会話、設定、暗号化されたキーはすべてここにあります。バックアップと復元 タブから、停止せずにいつでもバックアップでき、自動バックアップも設定できます。
- rustfs:アップロードしたファイル。ボリュームのバックアップなので、プロジェクトが停止している必要があります。メンテナンスの時間帯に行うのが適しています。
もう1つ、別途保管しておくべきものがあります。lobehub サービスの変数にある KEY_VAULTS_SECRET です。データベースを新しいデプロイに復元する際は同じ値を使う必要があり、そうしないとデータベースに保存された API キーを復号できません。デプロイ後は変更しないでください。
バックアップは、復元して中身を確認するまでは信頼できません。重要なデータは、バックアップをダウンロードして手元にも保管しておきましょう。
アップグレード
テンプレートは lobehub/lobehub:2.3.3 に固定されています。アップグレードの前に LobeHub のリリースノートを読み、postgresql をバックアップしてから、lobehub サービスの 設定 にある ソース でイメージのタグを新しいバージョンに変更してデプロイします。データベースのスキーマは起動時に自動でマイグレーションされるため、アップグレードの前には必ずバックアップを取ってください。
よくある質問
ページを開いたあと、ログインのリダイレクトでエラーになる場合は?
lobehub に割り当てたドメインが、デプロイ時に入力したアプリの URL と、https:// も含めて完全に一致し、末尾にスラッシュがないことを確認してください。ドメインを変更した場合は、lobehub サービスの 変数 で APP_URL(ファイルストレージのアドレスは S3_ENDPOINT)を新しいアドレスに変更し、再起動してください。
画像のアップロードに失敗する場合は?
多くの場合、files.example.com が rustfs のポート 9000 に割り当てられていないか、HTTPS 証明書がまだ有効になっていません。ブラウザでこのドメインを直接開き、接続できれば(エラーメッセージが表示されても)割り当ては正しくできています。
AI の応答が空、またはエラーになる場合は?
まず 設定 → AI サービスプロバイダー でチェックをクリックし、キーとモデルが使えることを確認してください。サードパーティのプロキシを使う場合は、アドレスの末尾に /v1 が必要かどうかに注意してください。
どのくらいのサーバーが必要ですか? テンプレートは LobeHub 用に 2 GB のメモリを確保することを推奨しています。PostgreSQL、Redis、RustFS も合わせると、4 GB 以上のメモリを持つサーバーをおすすめします。モデルの推論はプロバイダー側で行われるため、サーバーの CPU は使いません。
まずは LobeHub テンプレートから始めましょう。2つのドメインを用意し、デプロイしたら最初に登録を制限して、それからモデルに接続してください。
コーディングエージェントが読む内容です(https://zenavo.app/ja-JP/blog/self-host-lobehub.md)。
Markdown を読み込めませんでした。直接開いてください: https://zenavo.app/ja-JP/blog/self-host-lobehub.md