はじめに:目的、背景、なぜこの構成にしたか
AIエージェントをローカル環境でセルフホストしたいと考え、今回はオープンソースのDifyを導入することにしました。Difyは、ChatGPTなどのLLMを活用したアプリケーションを構築・運用できる柔軟性を持ち、個人開発にも適したOSSです。
本記事では、WSL2とDocker Engineの構築が完了している環境を前提に、Difyのセルフホスト環境を立ち上げる手順を記録します。Windows環境でも動作可能で、無料かつ安全に運用できる構成です。
Dockerの構築手順については、以下の記事をご参照ください:
👉WSL2(Ubuntu)にDocker Engineをインストール(Docker Desktop不要)
この構成を選んだ理由は以下の通りです:
- Docker環境が整っていれば、Difyの公式構成をそのまま活用できる
- WSL2上での運用により、WindowsユーザーでもLinuxベースの開発が可能
- Dify OSS版はMITライセンスで無料利用でき、個人開発にも適している
Difyのクローンから起動、初期設定までの手順を中心に、トラブル対応や運用のポイントも含めて整理しました。自分用の技術メモとしての意味合いも込めて、Qiitaに残しておきます。
詳細は以下の目次をご覧ください。
🗂 目次
- 構成
- Difyの導入手順(Docker構成)
- 1. Difyのセルフホスト構築
- 2. Ollama + Gemma:2b の導入
- 3. Difyとの接続方法(APIエンドポイント設定)
- 4. Dify動作確認
- OllamaでGemma:2bが起動しない!500エラーの原因と対処法
- まとめと今後の展望
構成
| 構成要素 | 備考 |
|---|---|
| WSL2 | Windows11 |
| Docker Engine(WSL2上) | Docker Desktop不要。Ubuntu上に直接インストール |
| Dify OSS版(version1.9.0) | 無料(MITライセンス) |
| Ollama | GPU不要のため選択 |
| Gemma:2b | 日本語が使える |
■なぜ「Ollama × Gemma:2b」を選んだのか?
本構成では、今回はお試し環境として、無料かつローカルで動作可能なLLM環境を目指し、以下の理由から「Ollama」と「Gemma:2b」を採用しています。
-
Ollama:以下の3点を重視してローカルLLM実行基盤に「Ollama」を採用
- HDD容量が少ない:量子化済みモデル(gguf形式)を自動取得でき、モデルサイズは数GB程度で済む
- GPU不要:CPUのみでも動作可能な軽量モデル(例:Gemma:2b)を選定すれば、GPU非搭載環境でも問題なし
-
構築が簡単:インストール後すぐに
ollama run gemma:2bでモデル起動可能。APIサーバーとしても機能し、Difyとの連携も容易
- Gemma:2b:Google DeepMind製の軽量LLMで、モデルサイズは約1.5GB。命令理解・論理的応答に優れ、英語中心ながら多言語対応も可能。WSL2環境でも動作しやすく、自然言語処理タスクや業務支援Botに適している
GPU非搭載環境でも動作可能で、HDD容量を抑えつつ、実用的な精度を確保できる点が決め手です。
Difyの導入手順(Docker構成)
1. Difyのセルフホスト構築
Difyのリポジトリをクローン
git clone https://github.com/langgenius/dify.git
cd dify/docker
env ファイルの準備
cp .env.example .env
- 必要に応じて .env を編集(基本defaultでOK)
APP_ENV=dev
CONSOLE_DOMAIN=http://localhost:3000
API_DOMAIN=http://localhost:5001
- APIキーやポート番号など環境に応じで変更可能
Docker Compose で起動
docker compose up -d
- 初回はイメージのダウンロードに時間がかかる場合あり
2. Ollama + Gemma:2b の導入
LLM「Ollama + Gemma:2b」をWSL2上で動かすために、Ollamaを導入します。OllamaはローカルLLMを簡単に扱えるツールで、WSL2環境でも動作可能です。
Ollamaのインストール
curl -fsSL https://ollama.com/install.sh | sh
- インストール後、
ollamaコマンドが使えるようになります
モデルのpull & 起動(量子化済み・日本語特化)
ollama run ollama run gemma:2b
- 初回実行時にモデルが自動ダウンロードされます
- ダウンロード完了後、対話モードに入ります
- 500エラーの対処法はこちら
確認(任意)
ollama list
- インストール済みモデル一覧を確認できます
モデルの起動
ollama run gemma:2b
終了方法
Ctrl + dor /bye で終了できます。
(補足)モデル追加・削除
モデルを追加するときは ollama pullでインストールできます。
ollama pull phi3:mini
モデルを削除ときは ollama rmで削除できます。
ollama rm phi3:mini
3. Difyとの接続方法(APIエンドポイント設定)
Ollama側の設定(API公開)
systemdでOLLAMA_HOSTを公開
sudo systemctl edit ollama.service
以下を追記:
[Service]
Environment="OLLAMA_HOST=0.0.0.0"
再起動
sudo systemctl daemon-reload
sudo systemctl restart ollama.service
API エンドポイント確認
Ollama のAPIは通常 http://<localhost>:11434 で公開されます。
WLS2内で
ip addr show eth0 | grep 'inet '
と実行し、WSL2のIPを確認します。
実行結果例:
[WSL2]:~$ ip addr show eth0 | grep 'inet '
inet 172.30.101.154/20 brd 172.30.111.255 scope global eth0
この場合、
- WSL2のIP:
172.30.101.154 - DifyのBaseURL:
http://172.30.101.154:11434
Dify側の設定(モデルプロバイダー追加)
- ブラウザでDify
http://localhost/installにアクセスし、初期化プロセスを開始します - 管理者アカウントを作成してログイン
- **「設定」→ 「モデルプロバイダ」**へ
-
Ollamaを選択 →「モデルを追加」
■入力項目
| 項目 | 設定内容 |
|---|---|
| Model Name |
gemma:2b (pullしたモデル名. Ollama list で表示されるNAME) |
| Base URL | http://<WSL2のIP>:11434 |
| Context Size |
4096(不明ならdefaultでOK) |
Base URLはAPIエンドポイント確認 で調べる
- 右上の「システムモデル」→ 「システム推論モデル」に設定したモデルを指定→「保存」
設定後もシステムモデルの前にwarnアイコンがついている場合がありますが、reloadすると消えます
4. Dify動作確認
テストアプリを作成
「スタジオ」で
1. 「アプリを作成する」→最初から作成
2. 「アプリタイプを選択」でチャットボットを選択(初心者向けの基本アプリタイプ▽に隠れているかも...)
3. アプリ名:テストBotなど任意
4. 保存
5. オーケストレーション設定
モデルに同時詞を出すか、どんな情報を渡すかを設計する部分。ここでは動作確認なのでシンプルに下記を設定する
- プロンプト(Prompt):
あなたは日本語で丁寧かつ簡潔に応答するAIアシストです。 - 変数(Variables) : 空欄
- コンテキスト(Context): 空欄
- メタデータフィルタ(Metadata Filter): 空欄
チャット画面でテスト
「デバッグとプレビュー」の「Botと話す」のところに
こんにちは。あなたはどんなことができますか?と入力し、応答が返ってくるかを確認してみました。
OKなら「公開」するとWorkPlace内にBotが保存されます。
OllamaでGemma:2bが起動しない!500エラーの原因と対処法
Ollamaで gemma:2b モデルをrun したところ、以下のようなエラーが発生しました:
Error: 500 Internal Server Error: model requires more system memory (2.6 GiB) than is available (2.5 GiB)
エラーの原因
このエラーは、モデルが 2.6GiBの連続メモリ領域 を必要としているのに、WSL2に割り当てられているメモリが 2.5GiBしかない ために発生します。
WSL2はデフォルトでは動的にメモリを割り当てますが、明示的に設定しないと十分なメモリが確保されないことがあります。
対処法:WSL2メモリ割り当てを増やす
.wslconfig を設定(Windows側)
C:\Users\<ユーザー名>\.wslconfig に以下を記述します(ファイルがない場合はファイルを作成):
[wsl2]
memory=4GB
swap=4GB
UTF-8形式で保存してください
WSL2を再起動
wsl --shutdown
メモリ割り当て確認方法(WSL2再起動後)
free -h で確認(WSL2内)
free -h
出力例:
total used free shared buff/cache available
Mem: 3.9G 1.2G 1.1G 0.0G 1.6G 2.5G
Swap: 4.0G 0.2G 3.8G
| 項目 | 意味 |
|---|---|
Mem:total |
WSL2に割り当てられたメモリ(例3.9G) |
| Swap:total | スワップ領域(例4.0G) |
-
.wslconfigでmemory=4GBを設定した場合、Mem:totalが約3.9G前後になります
htop でリアルタイム確認(任意)
sudo apt install htop # 初回のみ
htop
- 上部に「Mem」や「Swp」のバーが表示されます
-
F6→MEM%でメモリ使用順に並べ替え可能
swapon --showでスワップ確認(任意)
swapon --show
出力例:
NAME TYPE SIZE USED PRIO
/swapfile file 4G 200M -2
これで、WSL2に最大4GBのメモリが割り当てられ、Gemma:2bが起動可能になります。
動作確認
ollama run gemma:2b
起動してプロンプトが出ればOKです。
まとめと今後の展望
以上、WSL2 × Docker × Ollama 環境で Dify を用いた Gemma:2b の動作確認までの手順を紹介しました。
本記事では、RAM制約下でも動作可能な軽量LLMを選定し、Difyのモデル設定・アプリ作成・応答テストまでを構造的に整理しました。この記事が、Dify環境構築や軽量LLM運用の参考になれば幸いです。
今後は、Difyのチャットフロー・エージェント機能の活用にも展開していく予定です。