【LLM】社内文書をセキュアに検索!OllamaとOpen WebUIで構築する完全無料・RAG環境
はじめに
「業務でChatGPTを使いたいけど、情報漏洩が怖い…」
「社内の大量のPDFや仕様書をベースに回答してほしい…」
「でも、コストはかけたくないし、構築も難しそう…」
そんな悩みをお持ちではないでしょうか?
本記事では、Ollama(LLM実行基盤)、Open WebUI(ChatGPTライクなUI)、そしてSearXNG(プライバシー重視のメタ検索エンジン)を組み合わせることで、完全無料かつインターネットにデータを流さないセキュアなRAG(検索拡張生成)環境を構築する方法を解説します。
さらに、Web検索機能も統合し、最新情報にも対応できる最強のローカルLLM環境を目指します。

※本記事の構成イメージ
課題の背景と解決策
企業におけるLLM活用には、常に「セキュリティ」「コスト」「最新情報の欠如」という3つの壁が立ちはだかります。
既存サービスの課題 vs 本記事の解決策
| 比較項目 | ChatGPT Enterprise / Azure OpenAI | 本記事の構成 (Local OSS) |
|---|---|---|
| セキュリティ | 学習データには使われないが、外部送信は必須 | 完全ローカル完結 (外部送信ゼロ) |
| コスト | 高額な従量課金や月額費用 | 完全無料 (電気代のみ) |
| 社内データ連携 | 追加開発や連携設定が必要 | D&Dで即RAG化 (PDF/PPT/動画URL対応) |
| Web検索 | Bing検索などが利用可能 | SearXNGで広告なし・プライバシー重視の検索 |
今回は、これらをDocker Composeひとつで一撃で立ち上げるハンズオン形式で紹介します。
アーキテクチャ概要
今回構築するスタックは以下の通りです。すべてDockerコンテナとして稼働します。
- Ollama: Llama 3やPhi-3などの高性能LLMをローカルで動かすバックエンド。
- Open WebUI: ユーザー向けのチャットインターフェース。RAG機能(ベクトルDB)やWeb検索統合機能を標準で持っています。
- SearXNG: 複数の検索エンジン(Google, Bing, DuckDuckGo等)を統合し、トラッキングを除去して検索するメタ検索エンジン。
構築手順 (Step-by-Step)
1. 前提条件
- Docker Desktop または Docker Engine がインストールされていること
-
Docker Compose (V2) が利用可能であること
- ターミナルで
docker compose versionを実行して確認してください。 - 古い
docker-compose(V1) でも動作しますが、本記事ではdocker composeコマンドを使用します。
- ターミナルで
- (推奨) NVIDIA GPU搭載のマシン(CPUのみでも動作しますが、速度が低下します)
- GPUを使用する場合は
NVIDIA Container Toolkitのセットアップが必要です。
- GPUを使用する場合は
Macユーザー向け: Docker Desktopを使わずColimaで構築する場合
Docker Desktopは有料化等の兼ね合いで避けたい場合、Homebrew + Colimaで環境構築が可能です。
# 必要なツールのインストール
brew install docker docker-compose colima
# Colimaの起動(Dockerデーモンの代わりになります)
colima start --memory 4
※ docker compose コマンドが認識されない場合は、~/.docker/config.json にプラグインパスの設定が必要な場合があります(brew install時のCaveatsを参照)。
* 古い `docker-compose` (V1) でも動作しますが、本記事では `docker compose` コマンドを使用します。
- (推奨) NVIDIA GPU搭載のマシン(CPUのみでも動作しますが、速度が低下します)
- GPUを使用する場合は
NVIDIA Container Toolkitのセットアップが必要です。
- GPUを使用する場合は
2. ディレクトリ作成と設定ファイルの準備
任意のディレクトリを作成し、作業場所とします。
mkdir my-local-llm
cd my-local-llm
3. docker-compose.yml の作成
以下の docker-compose.yml を作成します。これが環境の設計図です。
version: '3.8'
services:
# 1. LLM Backend
ollama:
image: ollama/ollama:latest
container_name: ollama
ports:
- "11434:11434"
volumes:
- ollama_storage:/root/.ollama
# GPUを使う場合は以下のコメントアウトを解除
# deploy:
# resources:
# reservations:
# devices:
# - driver: nvidia
# count: 1
# capabilities: [gpu]
restart: always
# 2. UI & RAG Orchestrator
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
ports:
- "3000:8080"
environment:
- OLLAMA_BASE_URL=http://ollama:11434
# Web検索の設定 (SearXNG連携)
- ENABLE_RAG_WEB_SEARCH=True
- RAG_WEB_SEARCH_ENGINE=searxng
- RAG_WEB_SEARCH_RESULT_COUNT=3
- SEARXNG_QUERY_URL=http://searxng:8080/search?q=<query>
volumes:
- open-webui_storage:/app/backend/data
depends_on:
- ollama
- searxng
restart: always
# 3. Web Search Engine
searxng:
image: searxng/searxng:latest
container_name: searxng
ports:
- "8081:8080"
volumes:
- ./searxng:/etc/searxng
environment:
- SEARXNG_BASE_URL=http://searxng:8080/
restart: always
volumes:
ollama_storage:
open-webui_storage:
※ setup-searxng 等の設定が別途必要な場合がありますが、最もシンプルな構成としています。本格運用時はSearXNGの settings.yml で json フォーマットを有効にする設定が必要です。
4. 起動
docker compose up -d
起動したら、ブラウザで http://localhost:3000 にアクセスします。
初回は管理者アカウントの作成画面が表示されるので、登録してログインしてください(データはローカルに保存されます)。
使ってみよう
モデルのダウンロード
Open WebUIの画面右上の設定アイコン、またはチャット画面からモデルをプル(ダウンロード)します。

日本語性能が良いモデルとして、まずは以下がおすすめです。
-
llama3: ご存知Metaの最新モデル。英語ベースだが日本語もいける。 -
qwen2.5:3b/qwen2.5:1.5b: 日本語性能が非常に高く、動作も軽量。おすすめ。 -
phi3: Microsoftの軽量モデル。PCスペックが低くても動きやすい。
Ollamaのコマンドラインから落とす場合は以下を実行します:
docker exec -it ollama ollama run qwen2.5:3b
軽量検証のため、qwen2.5:1.5bもおすすめです。
RAG: 社内ドキュメントでチャットする
Open WebUIの「フォルダー」機能、またはチャット欄の「+」ボタンからファイルをアップロードします。
対応フォーマット
以下のファイルに対応しています。
-
PDF
-
PowerPoint (pptx)
-
Excel (xlsx), CSV
-
Word (docx)
-
Markdown (md), Text (txt)
-
YouTube動画 (URL)
- チャット欄に
#を入力し、続けてYouTubeのURLを貼り付けると、字幕(Transcript)を読み込んで回答してくれます。 - ※ローカルのMP4ファイル等の直接アップロードは、音声認識(Whisper)の設定等が別途必要な場合があるため、現状はテキスト化してからのアップロードを推奨します。
- チャット欄に
引用(Citation)機能で事実確認
Open WebUIの素晴らしい点は、 「引用機能」 です。
回答の末尾に、参照したドキュメントのリンクと、どの部分(チャンク)を使用したかが表示されます。これをクリックすることで原文を確認できるため、ハルシネーション(嘘の回答)のリスクを軽減できます。




実際のRAGによる回答例。ドキュメントに基づき、正確に回答している様子
ナレッジベース機能(事前のドキュメント登録)
チャットのたびにアップロードするのではなく、「社員規定」「製品マニュアル」などのまとまったドキュメント群を事前にデータベース化しておくことも可能です。
- Open WebUIの左メニュー「ワークスペース」を開く。
- 「+ ナレッジベース」で新しいナレッジベース(例:
company-rules)を作成し、ファイルをアップロード。- ※YouTube動画などをナレッジ化したい場合は、別途文字起こししたテキストファイルをアップロードしてください。
- チャット画面で
#company-rulesのようにナレッジベースを呼び出すことができます。


これにより、チーム共有の「社内Wiki」的な使い方が可能になります。
Web検索: 最新情報を取得する
チャット欄の下にある「Web Search」トグルをONにするだけで、インターネット検索が可能になります。
裏側ではSearXNGがGoogle検索などを実行し、その結果をLLMに渡して回答を生成しています。
ユースケース例:
「Shineos Inc.の最新のプレスリリースについて教えて」
「今日のXXの株価の動向は?」
本番環境へのデプロイに向けて
社内の検証環境や本番環境として公開する場合、以下の点に考慮が必要です。
-
セキュリティ (HTTPS化)
- Open WebUI自体はHTTPです。前段に Nginx や Traefik などのリバースプロキシを置き、SSL/TLS終端を行ってください。
-
認証 (Authentication)
- Open WebUIにはメール/パスワード認証がありますが、企業利用であれば SSO (Single Sign-On) が望ましいです。OAuth 2.0 / OIDCに対応しているため、OktaやGoogle Workspaceアカウントでのログイン設定を行うことを推奨します。
-
データの永続化とバックアップ
-
docker-compose.ymlのvolumesで定義した領域(主に/app/backend/data)に、ユーザーデータ、チャット履歴、ベクトルDBが保存されています。このボリュームを定期的にバックアップしてください。
-
-
リソース管理
- 複数人が同時に重い推論(RAGなど)を行うと、GPUメモリが不足する可能性があります。利用人数に応じたGPU選定(VRAM容量)や、Ollamaの並列処理設定(
OLLAMA_NUM_PARALLEL)の調整が必要です。
- 複数人が同時に重い推論(RAGなど)を行うと、GPUメモリが不足する可能性があります。利用人数に応じたGPU選定(VRAM容量)や、Ollamaの並列処理設定(
おわりに
もちろん、予算があればChatGPT Enterpriseなどの有料サービスを利用するのも一つの手です。また、特定の少数のドキュメントだけであれば、GoogleのNotebookLMを活用するのも手軽で強力な選択肢でしょう。
しかし、 「全社の膨大なドキュメントを横断検索したい」「機密情報を一切外部に出したくない」「自社専用のUI/UXにカスタマイズしたい」 といったニーズに対しては、今回構築したセキュアな自社RAG環境が最適解となります。
まずは個人のPCや余っているサーバーで立ち上げて、チームメンバーに触ってもらうところから「スモールスタート」してみてはいかがでしょうか?
次のステップとして、より大規模な運用のためのKubernetesへの展開や、カスタムモデルのファインチューニングなどに興味が出てくるかもしれません。
詳細は、後日弊社ブログ記事で公開する予定です。
Discussion
興味はあるけど、スモールスタートするスペックってどれくらい必要なんだろう…?
ご質問ありがとうざいます!
Qwen2.5:3bのような非常に軽量なモデルであれば、Mac mini M1(メモリ8GB/ストレージ256GB)で快適に利用可能です。
実際に弊社でも同等スペックのPCで、Web検索を組み合わせたRAGがスムーズに動作することを確認しています。
スモールスタートの場合、推奨スペックの目安は以下のとおりです。
※GPUなしでもCPUのみで実用的な速度は確保可能
なお、より高性能なモデル(例えば、Qwen2.5:7bモデルのパラメータ数が70億)を使用することで、RAG検索の正確性向上が期待できます。
Qwenモデルに関する参考情報は、以下のURLをご参照ください。
ありがとうございます!
参考にさせていただきます!