ローカルLLM(Ollama)は「社内に閉じられる」のが強みですが、弱点もあります。そう、最新情報です。
そこで今回は Ollama(Windowsホスト)+Dify(Rocky Linux 9 / VMware)+SearXNG(Rocky Linux 9 / 同居) で、必要なときだけ検索し、検索結果を根拠としてローカル推論に渡す“実用構成”をまとめます。
0) 前提
- Windowsホスト:Ollama 導入済み(ポート 11434で稼働)
- VMware上:Rocky Linux 9(ゲスト)に Dify を Docker Compose で稼働済み、または導入予定
- Rocky9(ゲスト)から Windowsホストの http://<WindowsホストIP>:11434 に到達できること
- 本記事では Dify の compose と 同一 docker-compose(同居)で SearXNG を立てます
注意:Linux(Docker)環境では host.docker.internal が効かないケースがあるため、WindowsホストIPの直指定が安定です。
Difyの導入(.envの調整:接続先・メール設定)
.env の編集場所
Dify の docker ディレクトリへ移動します(例)。
cd /opt/dify/docker
# 例です。あなたの環境のDifyディレクトリに合わせてください
.envを編集します。
1) Ollama への接続先(OpenAI互換APIを使う例)
OllamaはOpenAI互換API(/v1)を提供しているため、Dify側をOpenAI互換として繋ぐのが分かりやすいです。
# WindowsホストIPは例:192.168.1.10
OPENAI_API_BASE=http://<WindowsホストIP>:11434/v1
OPENAI_API_KEY=ollama
※ OPENAI_API_KEY は実トークンではなくダミー文字列で動作する運用が多いですが、ツール仕様や設定画面により異なる場合があります。
2) Dify の接続先URL(管理画面/APIのURL)
LAN内利用の例です(必要に応じてHTTPS/リバースプロキシ構成に置き換えてください)。
CONSOLE_WEB_URL=http://<Rocky9のIP>:3000
API_BASE_URL=http://<Rocky9のIP>:5001
3) メール送信設定(SMTP)
Difyは招待や通知などでメール送信を使うことがあります。SMTP設定を追記します(値は環境に合わせて調整)。
例:Gmail(アプリパスワード利用)
MAIL_TYPE=smtp
MAIL_DEFAULT_SEND_FROM=noreply@example.com
SMTP_SERVER=smtp.gmail.com
SMTP_PORT=587
SMTP_USERNAME=your_account@gmail.com
SMTP_PASSWORD=your_app_password
SMTP_USE_TLS=true
SMTP接続でエラーになる場合等、必要に応じて下記項目も設定してください。
SMTP_LOCAL_HOSTNAME=SMTP HELO/EHLOで使用するローカルホスト名
を設定してください
手順(SearXNGのインストール作業を含む:Dify docker-compose と同居)
1) Dify の compose ファイル場所へ移動
Dify を起動しているディレクトリに移動します(例)。
cd /opt/dify/docker
# 例です。あなたの環境のDifyディレクトリに合わせてください
2) SearXNG 用の設定ディレクトリを作る(ホスト側)
mkdir -p ./searxng
3) Dify の docker-compose.yml に SearXNG サービスを追加(=インストール)
Dify の docker-compose.yml(または docker-compose.yaml)に、services 配下へ以下を追記します。
重要:networks: は Dify 側の既存ネットワーク名に合わせてください。多くの環境では default のままでOKです(Difyが使っているネットワークに同居させるのが目的)。
services:
searxng:
image: searxng/searxng:latest
restart: unless-stopped
environment:
- BASE_URL=http://searxng:8080/
volumes:
- ./searxng:/etc/searxng
ports:
- "8081:8080" # ホストから動作確認したい時だけ。不要なら削除OK
networks:
- default
これで SearXNG が同居(= 同一サーバー・同一compose/同一ネットワーク)します。
Dify コンテナからは http://searxng:8080 で到達できます(サービス名解決)。
4) SearXNG の settings.yml を用意して JSON を有効化(403回避の要点)
./searxng/settings.yml を作成して、最低限これだけ入れてください(既にあるなら追記)。
vi ./searxng/settings.yml
use_default_settings: true
server:
# base_url は環境変数 SEARXNG_BASE_URL / BASE_URL を使う運用でもOK
# base_url: http://searxng:8080/
secret_key: "REPLACE_WITH_RANDOM_HEX"
search:
formats:
- html
- json
重要:SearXNG は未許可の format を指定すると 403 になるため、json を許可するのが重要です。
5) SearXNG を起動(= pull + run)
docker compose up -d searxng
6) SearXNG 単体の動作確認(推奨)
ホストに 8081:8080 を公開した場合:
curl 'http://localhost:8081/search?q=beer&format=json'
JSON が返ればOK。403 なら手順4(formatsにjson)を再確認します。
7) Dify 側で SearXNG を認証(連携完了)
Dify 管理画面で Tools → SearXNG → Authenticate を開き、Base URL に以下を入力して保存します。
http://searxng:8080
これでDifyからSearXNGへ検索が可能になります。
構成イメージ(ざっくり)
Dify Workflow
↓
HTTP(SearXNGへ検索)
↓
検索結果(JSON)
↓
Templateで整形(根拠URL込み)
↓
LLM(Ollama:ローカル推論)
↓
Answer
よくある詰まりポイント
- VM → WindowsホストのOllamaに繋がらない:VMwareのNAT/ブリッジ設定、Windows側FWで
11434がブロックされていないか確認 - SearXNGで403:
settings.ymlのsearch.formatsにjsonが入っているか確認 - DifyがSearXNGに到達しない:Difyからは
http://searxng:8080(サービス名)でアクセス。localhostはNG
参考(一次情報・公式)
- Dify Docs:Docker Composeでのセルフホスト
- SearXNG Docs:Dockerでの導入
- searxng-docker(公式Docker構成)
- Rocky Linux Docs:Docker導入
- Ollama Docs:OpenAI互換API

