コマンドを一つも打たずに Azure 上に Dify で遊べる環境をセットアップしてみた

# このドキュメントに書いてあること
Web ブラウザーベースの UI で Azure のリソースが管理できる、[Azure ポータル](https://portal.azure.com/) だけで、Dify を遊べる環境を簡単にセットアップできる方法を解説します。

# 前提の話
## Dify とは？
[Dify](https://dify.ai/jp) のサイトから引用します。

> DifyはオープンソースのLLMアプリ開発プラットフォームです。RAGエンジンを使用して、エージェントから複雑なAIワークフローまでLLMアプリを編成します。

というわけで、様々な AI モデルを使ったチャットボットやエージェントなどの、生成 AI を活用したアプリケーションを簡単に作れる方法として、生成 AI 界隈で話題になっている OSS かなと思います。

## Dify を Azure 仮想マシンで動かすには？
Dify は GitHub で OSS として公開されているうえ、まずはコンテナーとして簡単にデプロイできるような構成ファイルも用意されています。これをうまく使うことで、Azure 上に簡単に Dify を安全に利用できる環境を構築することが可能です。

今回は、Azure 仮想マシンの機能をうまく使い、Azure 初心者の方でもブラウザーからの操作だけで Dify が動作する環境を構築できることを目標にしました。

# Dify が動く Azure 仮想マシンを作成するまでの Step-by-Step
## Azure サブスクリプションの用意
もし、まだ Azure サブスクリプションをお持ちでない場合には、以下のリンクから Azure 無償評価版のサブスクリプションを取得してください。

https://azure.microsoft.com/ja-jp/pricing/purchase-options/azure-account?icid=azurefreeaccount

## Azure ポータルへアクセスする
Azure のリソースを一番簡単に管理する方法として、Azure ポータルから Web UI で管理をする方法が挙げられます。まずは Azure ポータルにアクセスしてみましょう！

https://portal.azure.com/

## Dify 入り仮想マシンをデプロイする
Azure ポータルにアクセス出来たら、以下の手順で Dify 入りの Azure 仮想マシンをデプロイしましょう！

### 仮想マシンの作成画面への遷移方法
1. まずは、ポータルの上の方の + 印のアイコン「リソースの作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/b8919e54-89f0-c725-8887-5adf39d14a66.png)
1. 「人気の Azure サービス」として「仮想マシン」が表示されている方は「作成」をそのままクリックします。そうでない方は画面上にある「サービスとマーケットプレースを検索してください」と書いてある検索窓から、「仮想マシン」を検索しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/dddece93-9fd1-d0be-0eef-66a773efd11a.png)
1. 仮想マシンの作成画面が開きますので、順番に設定をしていきます。

### 基本設定画面
1. 「リソースグループ」の「新規作成」ボタンをクリックし、開いた入力画面に任意の名前を入力します。（ここはこれから作るリソースをまとめて管理をするための論理的なコンテナーの名前なので、あとから自分が分かれば適当につけてしまっても OK です。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/d2054557-904f-4567-0d89-f23fe25a3f4c.png)
1. 仮想マシン名も任意の名前を設定して OK です。
1. リージョンも任意ですが、Japan East や、Japan West、East Asia あたりが良いと思います。
1. 可用性オプションは「インフラストラクチャ冗長は必要ありません」を選択します。（本番運用の際には、ここで可用性ゾーンや可用性セットといった構成も組むことが出来ます。）
1. イメージは "Ubuntu Server 24.04 LTS - x64 Gen2" を選択しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/7801c08a-25d1-2f34-feef-77d73a3a86ee.png)
1. 「サイズ」の選択では、ドロップダウンに既定で出てくる中で "Standard_D4s_v3" あたりで良いかと思います。コストとしては一時間あたり約40円程度になります。
もっとサクサクで動かしたいという方は、「すべてのサイズを表示」のリンクから他の候補を確認し、予算の範囲で自由に VM のサイズを変えてみても問題ありません。（また、今回の用途でしたら、バースト可能インスタンスであるBシリーズの仮想マシンを選択することで、もっと安く遊ぶことも可能ですが、手順をシンプルにするために詳細は割愛して既定で表示されているものとしています。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/838cdc91-f756-389f-efc9-1a9bf049245f.png)
1. 「管理者アカウント」の設定は SSH ログインして管理をする際に必要になります。簡単に設定できるのは "パスワード" を利用した設定なので、任意の「ユーザー名」と「パスワード」を設定してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/72f1ef82-f687-6596-2fc7-9de86b34d835.png)
1. 「受信ポートの規則」では、外部からの HTTP/HTTPS 通信を許可する設定を追加します。「受信ポートを選択」のドロップダウンから、"HTTP" ならびに "HTTPS" にチェックを入れましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/819a0d32-0046-1814-22a7-987533a354a6.png)
1. 画面最下部の「次: ディスク」をクリックし、次の画面に進みます。 

### 特に操作する必要のない設定画面をスキップ
1. 次の画面は特に変更する項目は無いので、画面下部の「次:ネットワーク」をクリックし、次の画面に進みます。
1. 次の画面も特に変更する項目は無いので、画面下部の「次:管理」をクリックし、次の画面に進みます。
1. 次の画面も特に変更する項目は無いので、画面下部の「次:監視」をクリックし、次の画面に進みます。
1. 次の画面も特に変更する項目は無いので、画面下部の「次:詳細」をクリックし、次の画面に進みます。

### Dify を Azure 仮想マシンのデプロイ時に自動でセットアップするための構成
1. 「詳細」画面の「カスタムデータと cloud-init」のテキストボックスに、以下のコードをコピーして貼り付けます。
    ```yaml
    #cloud-config
    # change timezone
    timezone: Asia/Tokyo
    
    package_update: true
    package_upgrade: true
    
    # install packages
    packages:
      - git
      - docker.io
      - docker-compose
    
    # run custom cmd
    runcmd:
      - systemctl start docker
      - cd root
      - git clone https://github.com/langgenius/dify.git
      - cd dify
      - cd docker
      - cp .env.example .env
      - docker-compose up -d
    ```
1. 画面最下部の「確認及び作成」をクリックします

### Azure 仮想マシンのデプロイ
1. 最後に、デプロイ内容に問題が無いかの自動検証が走ります。画面上部に「検証に成功しました」と表示されているか確認しましょう。もしエラーが表示されているようでしたら、エラーになっている内容を修正してください。
1. また、同じ画面に一時間当たりの価格も書いてありますので、間違って高額なリソースを選択してはいないか、一応確認しておきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/2c1a7fb5-b28a-4e6a-0cd8-b6d13b457f7e.png)
1. 画面最下部の「作成」ボタンをクリックすると、デプロイ作業が始まります。あとはデプロイ完了まで待つだけです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/eb7e71bb-618f-120f-fe12-70c1877efa70.png)
1. デプロイが完了すると以下の画面になります。「リソースに移動」ボタンをクリックして、仮想マシンの管理画面に移動しましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/040e081c-0fcb-2cf1-c5f5-1d3096a0d8d8.png)

### 仮想マシンの IP アドレスを確認する
1. 仮想マシンの管理画面に移動すると、「基本」>「パブリック IP アドレス」という項目で、外部からアクセス可能な IPv4 のアドレスが表示されているはずです。この IP アドレスで HTTP/SSH でアクセス可能となりますのでメモをしておきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/0eeb6f2b-1b2c-8fb8-7ede-a7c98f05c8ac.png)

### Dify にブラウザーからアクセスして初期設定を行う
:::note info
Azure 仮想マシンが立ち上がったばかりの状態では、cloud-init を使ったパッケージのインストールや Docker イメージの Pull が間に合っておらず、HTTP でのアクセスが出来ない場合もあります。その場合には 10 分程度コーヒーブレイクを挟んでから、改めて試してみてください。
:::

1. ブラウザーのアドレスバーに、先ほどメモした IP アドレスをペーストしてアクセスしてみましょう。
1. Dify が立ち上がっていれば、「管理者アカウントの設定」という画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/c098ca63-58e2-5c07-408a-1f06b817fa83.png)
1. ここで、Dify の管理者アカウントに使うメールアドレス、ユーザー名、パスワードを設定したら、セットアップは完了です！

### Dify にログインする
1. 管理者アカウントの設定が終わると、次からはログイン画面が表示されるはずです。管理者アカウントに登録したメールアドレスとパスワードを入力してログインしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/6c9891b0-37ee-aead-1dd1-fce014e18789.png)
1. Dify の画面が表示されたら作業は完了です。お疲れさまでした！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/c9cb5495-a31f-d3e5-115a-e149b249bb3a.png)
1. あとは、一般的な Dify の使い方と同じですので、Web 上のドキュメントを色々と確認しつつ遊んでみてください！

::: note info
このあと、Azure OpenAI Service でホストした GPT-4 などのモデルにつなぐ部分くらいは、あとで手順を書こうと思っていますが、長くなってしまったのでまたの機会にしたいと思います。
:::

# まとめ
この記事では、ブラウザーからの操作だけで Dify を Azure 上で遊べる環境を構築する手順をご紹介いたしました！

# 注意事項
今回の手順で紹介した手順で立ち上げた Dify の環境は、シングルインスタンスの仮想マシンの上に稼働している状態になっています。可用性や負荷分散に関する考慮はされておりませんので、その点ご注意ください。

# 参考文献
https://dify.ai/jp

https://github.com/langgenius/dify

https://learn.microsoft.com/ja-jp/azure/virtual-machines/linux/quick-create-portal?tabs=ubuntu

https://learn.microsoft.com/ja-jp/azure/virtual-machines/linux/using-cloud-init

https://learn.microsoft.com/ja-jp/azure/virtual-machines/sizes/overview