GPU がなくても、自分のサーバーで ChatGPT のようなプライベートなアシスタントを動かせます。Ollama は Qwen、Llama、Gemma などのオープンウェイトの言語モデルをダウンロードしてシンプルな API で実行でき、Open WebUI はユーザー管理、履歴、ドキュメントのアップロードに対応したチャット画面を追加します。すべてがサーバー上で動作するため、プロンプトやドキュメントが外部に出ることはありません。この記事では、サーバースペックの選び方、Ollama のインストール、CPU で快適に動くモデルの選択、Open WebUI の HTTPS 化、自社アプリケーションからの API 利用について解説します。
CPU で動かす場合、読み込めるモデルはメモリ容量で決まり、応答の速さはコアの数と速度で決まります。量子化モデル(Ollama の既定である Q4 ビルド)に必要なメモリの目安は次のとおりです。
| モデルサイズ | モデルに必要なメモリ | 推奨サーバー | 主な用途 |
|---|---|---|---|
| 1–4B パラメーター | 約 1–3 GB | 4 コア、8 GB メモリ | 分類、短い回答、テスト |
| 7–8B パラメーター | 約 5–6 GB | 8 コア以上、16 GB メモリ | チャットアシスタント、要約、社内ナレッジベース |
| 14B パラメーター | 約 9–10 GB | 16 コア以上、32 GB メモリ | 推論力と文章力が向上、CPU では低速 |
最新のマルチコア CPU では、7–8B モデルの生成速度は 1 秒あたり数語程度と考えてください。小規模なチームやバックグラウンド処理には十分ですが、数百人が同時に使うには遅すぎます。利用量が多い場合は、小さな VPS ではなくコア数とメモリの多い専用サーバーを選び、メモリを多く消費する他のサービスは同じマシンに置かないようにしてください。
curl -fsSL https://ollama.com/install.sh | sh
systemctl status ollama --no-pager
ollama --version
ss -lntp | grep 11434 # should show 127.0.0.1:11434
インストーラーは ollama システムユーザーと、127.0.0.1:11434 で待ち受ける systemd サービスを作成します。モデルは /usr/share/ollama/.ollama/models に保存されるため、そのディスクに十分な空き容量があることを確認してください(7B モデルで約 4–5 GB)。
# Strong multilingual model, good at Chinese and English
ollama pull qwen2.5:7b
# Smaller and faster alternative
ollama pull llama3.2:3b
ollama run qwen2.5:7b "Explain in three sentences what a reverse proxy is."
ollama list # downloaded models
ollama ps # loaded models and how much memory they use
他のモデルやサイズは、ollama.com のモデルライブラリで探せます。まず 3B か 7B のモデルで速度を確認し、回答の品質が不十分な場合にのみ大きなモデルへ移行しましょう。
Open WebUI は Docker 上で動作します(Docker インストールガイドを参照)。コンテナからホスト上の Ollama に接続する必要があるため、Ollama がすべてのインターフェースで待ち受けるように設定し、外部からポート 11434 へのアクセスをファイアウォールで確実に遮断してください。
# Let Ollama accept connections from Docker containers
mkdir -p /etc/systemd/system/ollama.service.d
cat > /etc/systemd/system/ollama.service.d/override.conf <<'EOF2'
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
EOF2
systemctl daemon-reload && systemctl restart ollama
# Allow Docker networks to reach Ollama, block everyone else (ufw: rules are matched in order)
ufw allow from 172.16.0.0/12 to any port 11434 proto tcp
ufw deny 11434/tcp
# firewalld: simply do not open 11434; Docker's own zone already lets containers reach the host
# Start Open WebUI, reachable only from the server itself until Nginx is in front
docker run -d --name open-webui --restart always \
-p 127.0.0.1:3000:8080 \
--add-host=host.docker.internal:host-gateway \
-e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
-v open-webui:/app/backend/data \
ghcr.io/open-webui/open-webui:main
別のマシンから http://YOUR_SERVER_IP:11434 に応答がないことを確認してください。応答がある場合は、先に進む前にファイアウォールを修正します。
ai.example.com などのサブドメインをサーバーに向け、証明書を取得して(Certbot・acme.sh で無料 SSL を導入する方法を参照)、コンテナへプロキシします。Open WebUI は WebSocket で回答をストリーミングするため、Upgrade ヘッダーと長めの読み取りタイムアウトを設定しておきます。
server {
listen 443 ssl;
http2 on;
server_name ai.example.com;
ssl_certificate /etc/letsencrypt/live/ai.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ai.example.com/privkey.pem;
client_max_body_size 50m; # document uploads
location / {
proxy_pass http://127.0.0.1:3000;
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-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 600s;
}
}
サイトを開き、すぐに最初のアカウントを作成してください。このアカウントが管理者になります。その後、管理者設定で新規登録を無効にするか管理者の承認を必須にし、チームのアカウントは自分で作成します。
Ollama は独自の API に加えて OpenAI 互換のエンドポイントも提供しているため、多くのツールや SDK はベース URL を変更するだけで利用できます。同じサーバーから呼び出すか、他のサーバーからはプライベートネットワークや SSH トンネル経由で呼び出してください。
# Native API
curl http://127.0.0.1:11434/api/generate -d '{
"model": "qwen2.5:7b",
"prompt": "Write a short product description for a Tokyo VPS.",
"stream": false
}'
# OpenAI-compatible API (base URL http://127.0.0.1:11434/v1, any API key)
curl http://127.0.0.1:11434/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model":"qwen2.5:7b","messages":[{"role":"user","content":"Hello"}]}'
Dify や n8n などのワークフローツールでは、Ollama をモデルプロバイダーとして利用できます。Dify・n8n・AI エージェント向けサーバーの要件を参照してください。
Environment="OLLAMA_KEEP_ALIVE=1h" を設定すれば、最初の応答が遅くなるのを防げます。OLLAMA_NUM_PARALLEL=2 を設定すると、読み込まれた 1 つのモデルで 2 件のリクエストを同時に処理できます。スロットを 1 つ増やすごとに、より多くのメモリが必要です。ollama ps と free -h で確認してください。3B–8B のモデルを使った社内ツール、ドキュメントの Q&A、下書き作成、翻訳、バッチ処理であれば実用的です。多数の同時ユーザーや大きなモデルには、より多くのコアとメモリ、または GPU ハードウェアが必要です。
Qwen シリーズは中国語と英語を重点的に学習しており、最初に選ぶモデルとして適しています。まず qwen2.5:7b を試し、自分の質問を使って他のモデルと比較してください。
いいえ。Ollama と Open WebUI はプロンプトとドキュメントをローカルで処理します。インターネットに接続するのは、モデルやアップデートをダウンロードするときだけです。
上記の手順で解決しない場合は、サポートチケットを送信して IMIDC の 24 時間 365 日対応テクニカルサポートへご連絡ください。サーバー IP、OS バージョン、CPU とメモリ、使用しているモデル、エラー全文を添えていただくと、より迅速に調査できます。