見出し画像

Difyをクラウドで構築しよう!(Azure編)


CLI(Command Line Interface)で構築にチャレンジ!

前回のGoogle Cloudでの構築に続いて、今回はAzure上でOSS版のDifyを構築します。今回の手順ではCLI(Command Line Interface)をメインに使って構築をしていきます。WindowsですとコマンドラインやPowershell、Macですとターミナルを使ってAzureと対話をしながら構築を進めていきます。

Windowsのコマンドライン

多くの方はCLIには普段触れることは無く、視覚化されたGUI(Graphical User Interface)で直感的に操作を行われていると思います。

AzureのGUIで仮想マシンを作っている様子

ではなぜ、多くの方にとって馴染みが薄いCLIを使って構築をするのか?
この辺りは好みの部分が多いと思いますが筆者は「ログとして残せる」「GUIの変化に左右されづらい」という点に利点を感じています。
誰かにやり方を教える、もう一度同じ作業をする、トラブルを解析するとなった場合、ログ(テキストデータ)として残せているほうが効率よく進められます。ChatGPTやClaudeに質問をしながら進められる方もいらっしゃると思いますが、「こう操作をしたらこうなった」という説明を伝えるより、実行したコマンドと出力された結果を伝えて回答を得るほうがずっと楽だと思います。

前置きが長くなりましたが、そんなわけで今回はCLIをメインで使っての高地にチャレンジしていきます!

実行環境

クラウド
 ・ Azure : Vitual Machines
ローカル
 ・Widows11 WSL Ubuntu
 ・Cursor

注意事項

  • クラウドサービスを利用することで料金が発生する場合がありますので手順を試される際はご注意ください。試してみるだけなら検証を終えたらインスタンスは削除したほうが無難です。

  • 本記事ではお試し環境であるためセキュリティの設定については言及していません。懸念される方はSSL証明書や接続するIPアドレスを絞るなどの追加をご検討ください。

アカウント作成・サブスクリプションの作成

Difyを構築する仮想マシンを作る前にMicrosoftのアカウント作成とサブスクリプションにサインアップをします。
以下の記事を参考にして進めてください。1つ目の記事に従ってアカウントが作成出来たら2つ目の記事の「Azure サブスクリプション サインアップ の手順」から進めてください。

仮想マシンを作ろう!

Azure CLIをインストール

AzureをCLIを使って対話できるようにするため、Azure CLI(Azure Command Line Interface)
をインストールします。ここからはコマンドを使った操作になります。
筆者は基本的にコマンドはすべてcursorのターミナルから実行しており、かつWSLのUbuntu上で実行しているためLinuxで使用するコマンドを実行しています。
Windowsなどで実行される方は代替となるコマンドを調べた上で実行してください。ChatGPTやclaudeなどで聞くと楽です。

cursorのターミナル画面


自分の環境にあったコマンドをChatGPTに聞いている画面

ターミナルにて以下のコマンドを実行してAzureCLIをインストールします。

curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

インストールが終了したら以下のコマンドを実行してAzureにログインします。
通常は以下のコマンドを実行して表示されるウェブブラウザからAzureにログインを行います。

az login

筆者のようにWSLの環境で構築を進めている場合は、ウェブブラウザが起動できない場合がありますので、その場合は以下のコマンドを実行してください。

az login --use-device-code

上記コマンドを実行すると以下のように「enter the code XXXXXXXXXX to authenticate. 」というメッセージの10 桁のコードが出力されますので"https://microsoft.com/devicelogin"にウェブブラウザにアクセスして10桁のコードを入力しAzureのログインを進めてください。

To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code XXXXXXXXXX to authenticate.

リソースグループの作成

Azureではサブスクリプションの下にリソースが作られ、その下に仮想マシンなどを作成することになります。
サブスクリプションは作成しているので次はリソースグループの作成に進みます。

Azureの管理スコープのイメージ
https://learn.microsoft.com/ja-jp/azure/azure-resource-manager/management/overview#understand-management-scope

ではリソースグループを作成していきます。
今回は以下を設定しています。az group createを使って作成し、az group listで作成されたかを確認しています。
- name : dify
- location : japaneast
※複数のサブスクリプションを持っている場合は、作成先のサブスクリプションを選択する必要があるので注意してください。

az group create --name dify --location japaneast
az group list --output table

成功すると以下のように出力されます。

az group create --name dify --location japaneast
{
  "id": "/subscriptions/XXXXX/resourceGroups/dify",
  "location": "japaneast",
  "managedBy": null,
  "name": "dify",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}

WSLでSSH鍵の作成

SSHの鍵作成については以前投稿したこちらの記事に載せていますのでこちらを参照して作成してください。SSHの構成ファイル(config)については仮想マシンのIPアドレスが必要になるのでまだ作成する必要ありません。

仮想マシンの作成

では、az vm createを使って仮想マシンの構築に進んでいきます。
設定は以下の通りです。
- resource-group : dify → 作成したリソースグループ
- name : difyvm    → 任意の名前
- image : UbuntuLTS  → LinuxベースのOSを今回は選択
- admin-username : azure-user → 任意の名前
- ssh-key-values : "$(cat ~/.ssh/id_rsa.pub)" → 作成したSSH鍵を指定

az vm create \
   --resource-group dify \
   --name difyvm \
   --image Ubuntu2204 \
   --admin-username azure-user \
   --ssh-key-values "$(cat ~/.ssh/id_rsa.pub)"

成功すると以下のように出力がされます。表示された中にpublicIpAddressがありますが、ここに表示されるIPアドレスをメモしてください。また、仮想マシン作成時に指定したadmin-usernameもメモしておきましょう。SSHの構成ファイルの設定に必要です。
仮想マシンはこれで作成完了です。

az vm create \
>   --resource-group dify \
>   --name difyvm \
>   --image Ubuntu2204 \
>   --admin-username maru-azure \
>   --ssh-key-values "$(cat ~/.ssh/id_rsa.pub)"
{
  "fqdns": "",
  "id": "/subscriptions/xxxxx/resourceGroups/dify/providers/Microsoft.Compute/virtualMachines/difyvm",
  "location": "japaneast",
  "macAddress": "XX-XX-XX-XX-XX-XX",
  "powerState": "VM running",
  "privateIpAddress": "XX.XX.XX.XX",
  "publicIpAddress": "XX.XX.XX.XX",
  "resourceGroup": "dify",
  "zones": ""
}

ネットワークセキュリティグループの設定

仮想マシンを作成したらHTTP接続ができるようにネットワークセキュリティグループ(NSG)の設定を行います。先ほどの az vm create を実行すると自動的に新しく仮想ネットワーク、サブネット、パブリック IP アドレス、ネットワーク インターフェイスなどが作成されます。(詳細な設定方法等については割愛)
このままだと、DifyをAzure上に構築できたとしてもブラウザを使った接続(http://~)することができません。接続できるようにするために以下のコマンドを実行して設定を行います。

まずはaz network nsg createでNSGを作成します。設定は以下の通りです。
- resource-group : dify → 作成したリソースグループ
- name : difyvmNSG  → 任意の名前

az network nsg create --resource-group dify --name difyvmNSG

次にNSGにHTTP接続ができるようにaz network nsg rule createでルールを設定します。設定は以下の通りです。
- nsg-name difyvmNSG          → 作成したNSG
- resource-group dify             → 作成したリソースグループ
- name AllowHTTPInbound → 任意の名前
- priority 1000   → ルールの優先度(とりあえずはこのままでOK)
- access Allow   → 通信の許可するのでAllow
- protocol Tcp   → HTTP通信はTCPを使用するため指定
- direction Inbound  → 外部(ブラウザ)から仮想マシン側に向けた通信
-destination-port-ranges 80 → HTTP通信はポート80番を使用するため指定

az network nsg rule create \
  --nsg-name difyvmNSG \
  --resource-group dify2 \
  --name AllowHTTPInbound \
  --priority 1000 \
  --access Allow \
  --protocol Tcp \
  --direction Inbound \
  --destination-port-ranges 80

これで仮想マシンにブラウザ(HTTP)で接続する準備が整いました。

WSLでSSHの構成ファイルの作成

SSHで接続する仮想マシンの情報をWSL ubuntu上に登録します。以下のコマンドを実行してconfigファイルを作成します。ここでは未作成を前提に進めていきます。

touch ~/.ssh/config

configファイルを作成したらファイルを開きます。

vi ~/.ssh/config

viの使い方がわからない方はこちらに操作方法をご確認ください。
キーボードのInsertキーを押してinsertモードにしてください。

Host Azure-VM
  HostName XX.XX.XX.XX
  User azure-user
  IdentityFile ~/.ssh/id_rsa

設定をしたらescキーを押してinsertモードを終了してから以下のコマンド打って保存してください。保存してファイルを閉じるコマンドです。

:wq

以下のコマンドを実行して仮想マシンに接続できるか確認しましょう。
初回の接続時は警告が出ますが、yesと入力して許可してください。passphraseを設定された方はパスワードを入力してください。

ssh Azure-VM

以下のようにユーザ名@Azureの仮想マシン名となれば接続成功です
うまくつながらない場合は、SSHの構成ファイルに問題がある可能性が高いのでチェックしてみてください。

azure-user@difyvm:~$ 

仮想マシンにDocker composeのインストール

仮想マシンでDocker composeを使用できるようにします。コマンドが多いですが頑張っていきます。

手順1: パッケージリストの更新

sudo apt update

手順2: 必要な依存パッケージのインストール

sudo apt install -y ca-certificates curl gnupg lsb-release

手順3: Dockerリポジトリの公開鍵を保存するディレクトリの作成

sudo mkdir -p /etc/apt/keyrings

手順4: DockerリポジトリのGPG公開鍵のダウンロードと保存

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

手順5: Dockerのパッケージリポジトリの追加

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

手順6: 新しく追加したDockerリポジトリの情報の取得

sudo apt update

手順7: Docker本体、CLIツール、Containerd、Docker Composeプラグインのインストール

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

手順8: 現在のユーザーをdockerグループに追加

sudo usermod -aG docker $USER

手順9: 変更を反映するためにログアウトし、再度ログイン

exit

そして、再度SSHでAzure VMに接続します。

ssh Azure-VM

手順10: Docker Daemonが正常に動作していることを確認
エラーなく出力が表示されれば、Docker Daemonは正常に動作しています。

docker info

手順11: Docker Composeが正常に動作していることを確認
エラーなく出力が表示されれば、Docker Composeは正常に動作しています。

docker compose version

長かったですがここまでで、Difyをインストールする仮想マシンの準備が完了しました!

DifyをAzureにデプロイしよう!

Difyをクローンして立ち上げましょう!ここからはいつも通りの手順です。

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

正常に起動したら"http://{外部IPアドレス}/install"を検索バーに入力してDifyのユーザー登録画面が表示された成功です。
お疲れ様でした!

待ちに待ったこの画面

おわりに

今回はAzureにDifyをデプロイするというチャレンジをしてみました。しかもAzure CLIを使ってというおまけ付きで。
CLIで進めていくことで手順通りに進まなかったとしても、コマンドを実行したらエラーのログが出力されるため、エラーログを生成AIに聞いて対処を行っていく、という進め方がやりやすくなるため是非トライしてみてください!