DifyはオープンソースのLLMアプリ開発プラットフォームです。生成AIをはじめとするサービスをワークフロー型で簡単に利用できるサービスです。
もし、Difyって何?という人は下記をご確認ください。


そこで今回はDifyはSaaSとしてインストールなしでブラウザからも使えるのですが、せっかくOSS(オープンソースソフトウェア)なので自身の環境にインストールして使ってみよう。という内容です。
Bedrockともつないだり、チャットを作るところやその周りのAWS設定など何回かに分けて行っていきたいと思います。

###今回の内容で達成できること
EC2にDockerを入れてDifyをインストールしブラウザから利用する。(SSL化はまだ)

初めに

いきなり注意です。Difyの環境ですが2GBでも使えるという記事がありますが今はかなり厳しいです。
ひと昔前はそれでもよかったのです。(といっても数か月前の話です。)

いろいろ機能追加されてきて、4GBないとインストールすら失敗する状況です。また必要ライブラリが出てきたりしてるので躓くケースもあるかと思います。
なのでこれも2024年10月時点でのインストール方法ではありますが今後は似たところをきをつければ対処できると思います。

1.EC2を立ち上げよう

前提

早速ですがEC2を立ち上げましょう。AWSアカウントはあってEC2とはざっくり何かまでぐらいは理解しておいてほしいです。全くのIT知識ゼロだと厳しいと思います。
IT系のセールスの方とか、エンジニアではないけどパソコンに触れる機会が多い方とか。EC2はわかるけど実際には使ったことはない。そういった方がオススメかもしれません。

そして一番の注意事項です。AWSは従量課金制で始めやすいです。ただ最初のころに特にやりがちなのが、

・一番は消し忘れて料金がかかる。
・回数ではなく時間単位でかかるサービスとの違いが分かっていない。
・そもそもどのぐらい料金かかるサービスなのか把握せず使ってしまう。
・何と連動しているのか把握していない。(例えばEC2とEBSの関係性。そしてEBS単体でも料金がかかるとか)


ここら辺が王道のミスです。そしてあとから何万円なんて請求きてびっくりというトラブルを生みます。
そのためにもCost Explorerでのチェックは必須ですし、そもそもとしてAWSのサービス知見を高めることはコストもセキュリティもベストプラクティスへの道であるのでその点は肝においてください。

EC2を立ち上げよう

前置き長くなりました。EC2を立ち上げましょう。
メモリ4GBはほしいのでt3.midium (4GiBジビバイト)で設定していきます。今回の設定内容は以下の通りでいきます。

名前:好きな名前(今回はDify_EC2にしました)
Amazon マシンイメージ (AMI):Amazon Linux 2023 AMI
アーキテクチャ:今回はx86(Armでも行けます。料金はArmの方が多少安いです。)
インスタンスタイプ:t3.medium 2vCPU 4 GiB メモリ
キーペア:キーペアなしで続行
セキュリティグループを作成:ひとまず以下の三つをすべて許可
 ・(任意の場所 0.0.0.0/0)からの SSH トラフィックを許可
 ・インターネットからの HTTPS トラフィックを許可
 ・インターネットからの HTTP トラフィックを許可
ストレージを設定:15GB(gp3)

です。インスタンスを起動を押してください。
ちなみに容量を15GBにしました。インストール直後の使用状況を見てみました。

[ec2-user docker]$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 766M 1.3M 765M 1% /run
/dev/nvme0n1p1 15G 13G 2.7G 83% /
tmpfs 15G 0 15G 0% /tmp
/dev/nvme0n1p128 10M 1.3M 8.7M 13% /boot/efi
tmpfs 383M 0 383M 0% /run/user/1000

13GB/15GB(笑)あとから容量アップできはします。最小限度を心掛けましたので適切な数値に変更をされてください。

ちなみに、EC2 t3.mediumは x86のLinuxベース 料金: 0.0544 USD 1 時間あたりオンデマンドです。
30日と想定して720時間 ≒ 39USDです。
もちろんEBS料金は別でかかりますし、その他接続でかかる料金もあります。
リザーブドインスタンスという長期割引を使う方法もありますが、別の回で解説予定ですが使用してないときは止めるような設定をすることで料金を節約する方法もあります。

なお、セキュリティグループは社内やのちほどALBなどを立てる際には適切な設定をすることをもちろん推奨します。以下は上記設定のスクショです。

2.EC2に接続しよう

インスタンスを起動をすると、以下の画面になるのでEC2に接続していきましょう。

真ん中の「インスタンスに接続」をクリック。

次の画面に行き、「EC2 Instance Connect」のままそのまま右下の接続をクリックしましょう

こんな黒い画面に接続できたらOKです。操作が早すぎるとまだEC2が準備中なのでブラウザを更新するなりして少し時間を待ちましょう。

3.コマンドを打ってインストールしよう

複数行一気にいけるところもありますが、最初の内は主に一行づつの方がミスがないと思います。
一行づつ入力して、$の横に入力をしてEnterをしていきましょう。

こちらでコピーしてるのに画面上にペーストできないときは「Ctrl+Shift+V」で行けると思います。
まずは全ステップを記載します。特に書き換えも不要です。そのままコピペで。

ステップ1: パッケージの更新

sudo su – ec2-user
sudo yum update -y

ステップ2: /tmp の一時的なリサイズ

sudo mount -o remount,size=15G,noexec,nosuid,nodev /tmp

ステップ3: Pythonと必要ライブラリのインストール

sudo yum install python3-pip -y
pip3 install –upgrade pip
pip3 install –no-cache-dir -v torch torchvision torchaudio
pip3 install –no-cache-dir -v flax

ステップ4: GitとDockerのインストール

sudo dnf install -y git docker
sudo usermod -aG docker $USER

ステップ5 再ログイン

exit logout
sudo su – ec2-user

ステップ6: Docker Composeのインストール

DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p $DOCKER_CONFIG/cli-plugins

-EC2インスタンスのアーキテクチャに応じて適切なバイナリを選択

if [ “$(uname -m)” = “x86_64” ]; then
curl -SL https://github.com/docker/compose/releases/latest/download/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
else
curl -SL https://github.com/docker/compose/releases/latest/download/docker-compose-linux-aarch64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
fi

chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
sudo systemctl enable docker
sudo systemctl start docker

ステップ7: Difyのクローンと起動

git clone https://github.com/langgenius/dify.git
cd dify/docker
docker compose up -d

ステップ8 初回アクセス

http://EC2のIPアドレス/install

if [ “$(uname -m)” = “x86_64” ]; then
curl -SL https://github.com/docker/compose/releases/latest/download/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
else
curl -SL https://github.com/docker/compose/releases/latest/download/docker-compose-linux-aarch64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
fi

ちなみに、ステップ6のここだけはこれで一つと考えてください。アーキテクチャをx86かArmどちらを選んでもエラーを起きないようにしています。

すすめていくと

例えばこんな感じ。
ひとつづつ入力してEnterを押していくと最後は

こんな画面で終わります。少し時間はかかります。ステップ7まで進めてください。
ここまで完了すれば黒画面はブラウザのタブごと閉じてもOKです。

4.起動しよう

前回のステップ8にある「http://{EC2のIPアドレス}/install」をします。
停止中だと以下のように記載されていませんが、上記の通りに設定できていれば起動中だとここにIPアドレスが記載されているのと思います。

ここを
http://000.000.000.000/install

のようにしてこれをブラウザのアドレスバーに打ち込みます。

そうすると

このような画面になると思います。少し時間がたつか最初から(そんなに時間がかからないです。)

このような画面になります。もしならければブラウザを更新しましょう。
ここがメモリが足りないと永久に上のローディング中で固まったままになることがあってセットアップできない感じです。

ここまでこれればあとはセットアップして通常通り使うだけです。

以降はhttp://000.000.000.000(ここはあなたのEC2のIPアドレス)に接続すれば可能です。
ただしEC2を停止すると再度起動させなきゃいけないのでコマンドが必要です。(別の回に説明します。)

次回予告

これであなたの環境でDifyが使えます。
つづいてEC2を停止したときに再度起動の手間をなくす設定をしていこうと思います。
常時起動であれば問題ありませんが、停止することがあれば設定しておくと便利です。

ただこのままではSSL化されてないですし、ビジネス利用には遠いところもありますのでそれは引き続き別回で進めていきます。

この記事を書いた人

スムーズロゴ
SMOOZ
enterprise-smooz

資料
ダウンロード

マスターデータのメンテナンスに関わる機能をまとめたSaaS「SMOOZ
SMOOZはリレーショナルデータベースの課題を解決するサービスです。
ご興味ございましたら資料をダウンロードください。