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 を入力し(末尾にスラッシュを付けないでください)、サーバーを選んでデプロイします。

ドメインを設定する

デプロイ後、それぞれ次のように割り当てます。

  1. lobehub サービスの ネットワーク タブで、ポート 3210 に chat.example.com を割り当てます。
  2. 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つのドメインを用意し、デプロイしたら最初に登録を制限して、それからモデルに接続してください。