🤖

Dify Community版をAWS(EC2)で動かす

に公開

はじめに

本記事ではDifyのCommunity版をAWS上で動作させてみます。シンプルに1台のEC2上で稼働させるもので、個人用やワークショップなどでの利用を想定しています。

概要

本記事では、CloudFormationを使って次の図のような環境を構築します。

Difyを動作させるEC2は1台で、c7g.xlargeを利用します。EC2のSecurity Groupは特定のIPからのHTTP、SSHを通すように設定し、インスタンスプロファイルとしてBedrock Full Accessを持つロールを付与します。

作成したインスタンス上で、docker/docker-composeの設定が済んだ状態になっています。そこからSSHでログインし、Difyを起動するところまでの手順を紹介しています。

EC2上のDifyはインスタンスプロファイルからAWSクレデンシャルを取得するので、設定の手間も少なく便利です。

事前準備

このCloudFormationは下記のパラメーターを必要とします:

  • VPCのCIDR(デフォルトは10.1.0.0/16)
  • EC2のキーペア名
  • 自分のPCのglobal IP(デフォルトは0.0.0.0/0)

VPCのCIDRはデフォルトでも問題ありません。EC2のキーペアはsshに必要なので、もしなければAWSコンソール等から作成して、秘密鍵をダウンロードしておいてください。
自分のPCのglobal IPはセキュリティグループに設定されます。デフォルトだと全世界に公開されてあまりよろしくないので、ワークショップの場合でも固定のIPを指定しておくと良いでしょう。

下記コマンドで調べることができます:

$ curl ipinfo.io
{
  "ip": "xxx.xxx.xxx.xxx",
  ..省略..
}%

CloudFormationの実行

CloudFormationスクリプトはこちらです。dify-aws-toolsのスクリプトをベースにしていますが、不要な権限を削除したり、セキュリティグループを追加したりしています。

https://gist.github.com/bohnen/365f81c893977a31b29f013da324eb1d

これをダウンロードして、AWSコンソールのCloudFormationから実行します。

次のステップで、必要なパラメーターを入力します。EC2のキーペアと、IPアドレスは指定しましょう。

このスタックではIAMロールを作成するので、次のステップのチェックボックスにチェックを入れる必要があります。

後は作成して、完了するまで待てばOKです。

Difyの起動

それでは、Difyを動かしてみます。

EC2へログイン

スタックの実行が正常に終了すると、スタック詳細画面の 「出力」 タブに、SSHでアクセスするための情報が出力されています。

この出力を参考に(SSH秘密鍵の場所は自分の環境に合わせて修正してください)、SSHでEC2にログインします。

Dify Community版のgit clone

まずは、Dify Community版をgit cloneします。ここでは、タグ1.1.3を指定しています。

$ git clone -b 1.1.3 https://github.com/langgenius/dify.git

Difyの起動

git cloneできたら、dify/docker ディレクトリに移動し、.envファイルを作成します。

$ cd dify/docker
$ cp .env.example .env

あとは、docker-composeを使って、Difyを起動します。

$ docker-compose up -d
[+] Running 11/11
 ✔ Network docker_default             Created                                                                                                  0.1s
 ✔ Network docker_ssrf_proxy_network  Created                                                                                                  0.1s
 ✔ Container docker-ssrf_proxy-1      Started                                                                                                  0.9s
 ✔ Container docker-db-1              Started                                                                                                  1.0s
 ✔ Container docker-redis-1           Started                                                                                                  0.9s
 ✔ Container docker-sandbox-1         Started                                                                                                  0.5s
 ✔ Container docker-web-1             Started                                                                                                  1.1s
 ✔ Container docker-plugin_daemon-1   Started                                                                                                  1.6s
 ✔ Container docker-worker-1          Started                                                                                                  2.0s
 ✔ Container docker-api-1             Started                                                                                                  2.0s
 ✔ Container docker-nginx-1           Started

初回はイメージのダウンロード等があり、少し時間がかかります。

Dify管理者アカウントのセットアップ

スタックの出力にHTTPアクセスのための情報も記載されていますので、そちらのURLへアクセスします。(SSHでも利用した[EC2のグローバルIPアドレス:80]です)

この画面が表示されれば、正しく起動できています。管理者パスワードを設定して、ログインしてください。

Difyのモデル設定

Difyの利用開始にあたって、最低限LLMモデルを設定する必要があります。ここではBedrockを利用して、Amazon Nova Liteを標準モデルとして設定します。

Difyログインコ後、右上のユーザー名のメニューから、 「設定」 を選びます。
左側のメニューから 「モデルプロバイダー」 を選択し、モデルプロバイダーをインストールすると書かれた一覧から、 Amazon Bedrock をインストールします。

その後のセットアップでは、 AWS Region だけを設定します。AWSクレデンシャルはEC2のインスタンスプロファイルから取得するので設定する必要はありません。ここではOregonを指定しています。

次に、「システムモデル設定」 を選択して、下記のように設定します。注意点は、Nova LiteやProなどは、(US.Cross Region...)と書いてあるものを利用するというところです。そうしないと、LLM実行時にエラーとなってしまいます。

これでDifyのセットアップは完了です。お疲れ様でした!

Difyの停止

Difyを止めるには、docker-compose down を同じディレクトリで実行します。

スタックの削除

Difyのお試しが完了したら、スタックを削除することで作成したリソースを削除できます。
スタック詳細画面から、「削除」 を選択します。

参考:DifyをAWS上で動作させるためのスクリプト類

DifyをAWS上で動作させるスクリプトは他にも多くのものがありますが、AWS SamplesにあるこちらのCDKスタックがよく利用されているようです。

https://github.com/aws-samples/dify-self-hosted-on-aws

また、Dify公式にマーケットプレースから提供されているものもあります(有料)

https://aws.amazon.com/marketplace/pp/prodview-t22mebxzwjhu6

本番としての運用を考える場合は、こちらを利用すると良いと思います。

Discussion