この記事の目的
podmanを使用して、ローカル環境でDifyを実行する手順を解説します。
(Macユーザー向けですが、Windowsでも一部役に立つと思います。)
対象読者
- podmanを使ってローカル環境でDifyを試してみたい方
- podmanを使ってDifyを動かそうとしたらエラーが出て心が折れそうな方
- Appleシリコン(M1/M2/M3チップなど)PCでpodmanを動かしたい方
用語集
- podman
- コンテナ管理ツール
- dockerとの互換性は高いが、ちょいちょい面倒なエラーが発生する
- 今回のDifyの環境構築にも影響あり
- dockerとの互換性は高いが、ちょいちょい面倒なエラーが発生する
- コンテナ管理ツール
- Dify
- オープンソースのLLMアプリケーションプラットフォーム
- ローカル環境にセットアップ可能
- APIを活用したAIアプリの開発や実行が可能
podmanでDifyを動かす
Difyをcloneする
DifyのGitHubリポジトリからローカルにcloneする
podmanのインストール / VM(仮想マシン)の起動
macユーザーであればbrewを使ってpodmanをインストール
brew install podman podman-compose
podmanで仮想マシンを起動
podman machine init
podman machine start
※ この時、Appleシリコン(M1/2/3チップ)ユーザーの場合arm・amdの違いに気をつける
podman machine start
を実行して
Error: vfkit exited unexpectedly with exit code 1
のエラーが出た場合は、
podman info
を実行してインストールしたpodmanの情報を確認してください。
OS: darwin/amd64 #この行に注目
provider: applehv
version: 5.0.2
もし、Appleシリコンのpcを使っていてamd
と記載されている場合はbrewがamd
用の設定になっている可能性があるので、brewを下記のコマンドで再インストールします。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
export PATH="/opt/homebrew/bin:$PATH"
brew再インストール後、brew config
を実行して表示される値の最後の方にあるRosseta
がfalse
になっていれば成功です。
今なら、仮想マシンを起動できるはずです。
podman machine start
参考Issue:podman machine start continually fails with vfkit error #22624
Difyコンテナ起動
で動くと書いてありますが、podmanではそんなにすんなりいきません。
cd dify
cd docker
cp .env.example .env
podman compose up -d
上記のコマンドを順々に実行していくとpodman compose up -d
で、
RuntimeError: missing networks: default
というエラーが発生します。
docker-compose.yaml
に追記しましょう。
networks:
# create a network between sandbox, api and ssrf_proxy, and can not access outside.
ssrf_proxy_network:
driver: bridge
internal: true
default: # この行を追加
driver: bridge # この行を追加
そしてもう一度podman compose up -d
を実行すると、
Error: rootlessport cannot expose privileged port 80, you can add 'net.ipv4.ip_unprivileged_port_start=80' to /etc/sysctl.conf (currently 1024), or choose a larger port number (>= 1024)
と言われるので、
- podmanをルートフルモードで起動
- Difyを立ち上げるポート番号を変更
上記 1 or 2 の方法どちらかで対応してください。
1. podmanをルートフルモードで起動
podman machine stop
podman machine set --rootful
podman machine start
podmanをルートフルで起動すれば、Difyデフォルト設定のポート番号でも動くはずです。
2. Difyを立ち上げるポート番号を変更
.env
にそれぞれ下記の値を入力する必要があります。
# ------------------------------
# Docker Compose Service Expose Host Port Configurations
# ------------------------------
EXPOSE_NGINX_PORT={適当なポート番号} # 1024より大きい値を入力
EXPOSE_NGINX_SSL_PORT={適当なポート番号} # 1024より大きい値を入力
podmanの仕様上1024より大きい数字をポート番号として使用する必要があるようで、Difyのデフォルトの数値では動かないみたいです。
1 or 2 の対応ができれば、今度こそpodman compose up -d
で動くはずです!
Difyの起動を確認
http://localhost:{先ほど入力したEXPOSE_NGINX_PORTのポート番号}/install
にアクセスするとDifyの画面が見えるはずです。
初回起動時はローディング画面か新規アカウント登録画面なのでよしなに進めていく。
LLMのAPIキーを設定
「プルダウン」 => 「設定」 => 「モデルプロバイダー」 => モデルを選択し、APIキーを登録。
Difyを使ってみる
APIキーの登録ができたら、
「探索」 => 使ってみたいテンプレートからアプリを作成してみてください。
数クリックのみで生成AIを利用したアプリを作ることができます。
追記(一度立ち上がったのに、気付いたら動かなくなってた人向け)
git pull
してDifyの最新版を持ってきてから、
podman compose up -d
をしたらDifyコンテナが立ち上がりました。
まとめ
この記事が、podmanとdocker・Intel製チップとAppleシリコン(M1/2/3など)の差異によりローカルでDifyを動かすのに詰まって諦めそうになっていた方のヘルプになれば幸いです。
僕はpcを乗り換えたあと、以前のpcでは動いていたのに、新しいpcではpodmanが動かなくなってしまった原因がarmとamdの違いであると気づくのに最も時間を取られました。(ChatGPTに聞いても全然解決せず。。。)
せっかく書いたので記事を見てほしいという自分のエゴもありますが、できればこの記事もOpenAIのモデル等に食べてもらって、いちいちググらなくてもLLMとの対話で解決できるようになってほしい🙏