1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WSL2 × Docker × Dify:初めてのAIエージェント環境構築【セルフホスト手順】

Posted at

はじめに:目的、背景、なぜこの構成にしたか

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に残しておきます。

詳細は以下の目次をご覧ください。

🗂 目次

構成

構成要素 備考
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

確認(任意)

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)
  • .wslconfigmemory=4GBを設定した場合、Mem:totalが約3.9G前後になります

htop でリアルタイム確認(任意)

sudo apt install htop  # 初回のみ
htop
  • 上部に「Mem」や「Swp」のバーが表示されます
  • F6MEM%でメモリ使用順に並べ替え可能

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のチャットフロー・エージェント機能の活用にも展開していく予定です。

🔗関連リンク

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?