Open WebUI セットアップ:Ollama、OpenAI、Geminiを一つのインターフェースで管理する

Artificial Intelligence tutorial - IT technology blog
Artificial Intelligence tutorial - IT technology blog

背景:チームが5つのAIモデルを使い、誰も管理できなかった話

深夜2時17分。チームリードからSlackが飛んできた:「サーバーのOllamaが応答しないんだけど?」SSHで接続してログを確認すると、問題はOllamaの障害ではなく、新しいdevが各サービスが何を動かしているか把握できておらず、誤ってコンテナをrestartしていたことだった。

当時、チームは並行して複数のシステムを稼働させていた:devチーム用にOllamaでllama3.2とcodellama、コンテンツ生成にOpenAI GPT-4o、バッチ要約にGemini Flash。それぞれAPIエンドポイントが異なり、認証方法も違い、ドキュメントはあちこちに散らばっていた。新しく入ったメンバーがシステムを把握するのに丸一週間かかっていた。

その夜以降、Open WebUIをデプロイすることに決めた——全てのAIモデルを一箇所から管理できる統合Webインターフェースだ。それ以来、チームの混乱はなくなり、同じ理由で深夜2時にpingが来ることもなくなった。

Open WebUIは何をサポートしているか?

Open WebUI(旧Ollama WebUI)は以下に接続できる:

  • Ollama — ローカルでモデルを実行:llama3.2、mistral、codellama、qwen…
  • OpenAI互換APIGPT-4o、GPT-4o-mini、またはOpenAIフォーマットを使う任意のサービス
  • Google Gemini — APIを通じてGemini 1.5 Pro/Flash/2.0
  • 自己ホスト型のあらゆるLLMエンドポイント — vLLM、LM Studio、Groq、OpenRouter…

他の代替手段ではなくこれを選んだ理由:user managementが標準で組み込まれている点だ——個人ごとにアカウントを作成し、誰がどのモデルを使えるかをコントロールできる。10人以上のチームには、これは必須機能だ。

Open WebUIのインストール

システム要件

インストール前に以下を確認しよう:

  • DockerとDocker Compose(バージョン >= 20.x)
  • RAM:最低4GB、Ollamaを同じホストで動かす場合は8GB以上推奨
  • ディスク:データとモデル用に10GB以上
  • ポート3000(またはカスタムポート)を開放する必要がある
# Kiểm tra Docker đã cài chưa
docker --version
docker compose version

# Nếu chưa có Docker:
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker

方法1:Docker Compose — Open WebUIのみ(Ollamaが既にある場合)

OllamaがすでにホストでRunning状態の本番環境で使っている方法だ。docker-compose.ymlファイルを作成する:

version: '3.8'

services:
  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    restart: unless-stopped
    ports:
      - "3000:8080"
    volumes:
      - open-webui:/app/backend/data
    environment:
      # Ollama đang chạy trên host (bare metal):
      - OLLAMA_BASE_URL=http://host.docker.internal:11434
    extra_hosts:
      - "host.docker.internal:host-gateway"

volumes:
  open-webui:

方法2:Docker Compose — Ollamaも含む

Ollamaがなく、すべてを一度にデプロイしたい場合はこのファイルを使う:

version: '3.8'

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    restart: unless-stopped
    volumes:
      - ollama:/root/.ollama
    # Bỏ comment phần dưới nếu có GPU NVIDIA:
    # deploy:
    #   resources:
    #     reservations:
    #       devices:
    #         - driver: nvidia
    #           count: all
    #           capabilities: [gpu]

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    restart: unless-stopped
    ports:
      - "3000:8080"
    volumes:
      - open-webui:/app/backend/data
    environment:
      - OLLAMA_BASE_URL=http://ollama:11434
    depends_on:
      - ollama

volumes:
  ollama:
  open-webui:
# Khởi động
docker compose up -d

# Xem logs
docker compose logs -f open-webui

方法3:pip install(Dockerなし)

Dockerを使わない場合はpipで直接インストールできる:

# Cần Python 3.11+
python3 --version

pip install open-webui

# Khởi động
open-webui serve --port 3000

この方法では約2GBの依存関係をダウンロードする。アップデートの容易さと環境の分離のため、Dockerを推奨する。

詳細設定

初回アクセス — 管理者アカウントの作成

デプロイが完了したら、ブラウザでhttp://your-server-ip:3000を開く。初回アクセス時は登録フォームが表示される——最初に作成したアカウントが自動的に管理者(Admin)になる

管理者を作成した後、最初にやること:Admin Panel → Settings → Generalに移動し、外部から勝手に登録されないようEnable New Sign Upをオフにする。またはDefault User Role: Pendingに設定して、新しいアカウントを一つ一つ承認できるようにする。

Ollamaとの接続

Open WebUIは通常、OLLAMA_BASE_URL変数からOllamaを自動検出する。確実に設定するには、Admin Panel → Settings → Connectionsに移動する:

  • Ollama API URL:http://host.docker.internal:11434
  • Verify Connectionをクリック——緑色になればOK

Open WebUI上からOllamaのモデルをダウンロードするには、Admin Panel → Settings → Modelsに移動し、Pull a model from Ollama.comタブからモデル名を入力する:

# Các model phổ biến có thể pull từ giao diện:
llama3.2:3b        # Nhẹ, phù hợp chat thông thường
codellama:7b       # Chuyên về code
mistral:7b         # Cân bằng tốt giữa chất lượng và tốc độ
qwen2.5-coder:7b   # Code, hỗ trợ tốt tiếng Việt

OpenAI APIの追加

Admin Panel → Settings → Connections → OpenAI APIに移動する:

API Base URL: https://api.openai.com/v1
API Key: sk-proj-xxxx...

保存後、Modelsタブに移動するとGPT-4o、GPT-4o-miniがOllamaのモデルと並んで表示される。ユーザーはドロップダウンから普通にモデルを選ぶだけ——そのモデルがローカルで動いているかクラウドかを意識する必要はない。

Google Gemini APIの追加

GeminiはOpenAI互換エンドポイント経由で接続するため少し特殊だ。同じConnections → OpenAI APIで、2つ目の接続を追加する:

API Base URL: https://generativelanguage.googleapis.com/v1beta/openai/
API Key: AIzaSy...

設定が完了すると、gemini-1.5-progemini-1.5-flashgemini-2.0-flashがモデルリストに即座に表示される。

ユーザーごとのモデル権限設定

チーム管理で最もよく使う機能——そして新しいメンバーから最もよく聞かれる機能だ。Workspace → Modelsに移動する:

  • 「モデルエイリアス」を作成——gpt-4oを「GPT Production」などにリネームして識別しやすくする
  • 公開設定:Public(全ユーザー)またはPrivate(管理者と指定されたユーザーのみ)
  • モデルの「バージョン」ごとにデフォルトシステムプロンプトを設定——例えばDev向けGPTはコードに関するシステムプロンプト、コンテンツ向けGPTは別のコンテキストで構成する

動作確認とモニタリング

サービスの正常動作確認

# Check container status
docker ps | grep open-webui

# Health check endpoint
curl http://localhost:3000/health
# Response: {"status":true}

# Xem realtime logs
docker logs -f open-webui --tail 50

よくあるエラーの対処法

「Could not connect to Ollama」エラー:9割のケースはコンテナとホスト間のネットワーク問題だ。最も素早い確認方法:

# Từ bên trong container Open WebUI, curl tới Ollama
docker exec open-webui curl http://host.docker.internal:11434/api/tags

# Nếu fail, lấy IP của docker bridge và thử trực tiếp
ip addr show docker0
# Thường là 172.17.0.1 — thử dùng IP này thay vì host.docker.internal

OpenAI API使用時の403エラー:APIキーが間違っているかクォータが切れている。Connectionsに移動してVerifyをクリックすれば、推測せずに詳細なエラーメッセージを確認できる。

起動直後にコンテナが繰り返し再起動する場合

# Xem logs ngay sau khi start
docker logs open-webui 2>&1 | head -50
# Thường do thiếu biến môi trường hoặc volume mount bị lỗi permission

データのバックアップ

会話、設定、ユーザーアカウントなど全てのデータはDockerボリュームに保存されている。毎晩cronで実行しているバックアップスクリプト:

# Backup volume ra file tar.gz
docker run --rm \
  -v open-webui:/data \
  -v $(pwd):/backup \
  alpine tar czf /backup/open-webui-backup-$(date +%Y%m%d).tar.gz /data

# Restore khi cần
docker run --rm \
  -v open-webui:/data \
  -v $(pwd):/backup \
  alpine tar xzf /backup/open-webui-backup-20240201.tar.gz -C /

自動アップデート

Open WebUIは新機能追加やバグ修正のため比較的頻繁にアップデートされる。Docker Composeでは、データはnamed volumeに保存されているためアップデートしてもデータは失われない:

# Pull image mới và restart — data giữ nguyên
docker compose pull && docker compose up -d

# Hoặc thêm vào crontab để tự động check update hàng tuần:
# 0 3 * * 1 cd /path/to/open-webui && docker compose pull && docker compose up -d

デプロイから2週間後、新メンバーのオンボーディング時間は約1週間から30分ほどに短縮された。エンドポイントのドキュメントも、認証方法の説明も不要——URLを共有してアカウントを作れば完了だ。当時チームに必要だったのは、より優れたモデルではなく、一元管理できる場所だった。Open WebUIはまさにその問題を解決してくれた。

Share: