見出し画像

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

なぜ、クラウドに構築するのか?

今回はOSS版のDifyをGoogleCloud上、つまりクラウドサービス上に構築します。しかし、DifyにはOSS版のだけでなくクラウド版も提供されています。
ではなぜ、わざわざOSS版のをクラウドに構築するのでしょうか?

OSS版をクラウド上に構築することのメリットしては一般的なクラウドサービスが受けるメリットだけでなく、自分が作ったワークフローやナレッジとして格納したデータを自身の管理下のクラウド上にて管理できるため、より柔軟に周辺環境(認証機能など)の拡張することがしやすくなります。

自分たちがやりたいことに対してDifyを柔軟に利用できるようにするために今回はDifyをGoogleCloudに構築することを試していきます。

実行環境

クラウド
 ・ Google Cloud : Google Compute Engine(GCE)
ローカル
 ・Widows11 WSL Ubuntu
 ・Cursor

注意事項

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

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

仮想マシンを作ろう!

前段が長くなりましたが早速準備していきましょう!
まずはGoogleCloudのアカウントを作成とプロジェクトの作成をします。
ここでは仮想マシンの作成から進めるため、アカウントとプロジェクトの作成はこちらが参考になります。

ではGoogle CloudのGoogle Compute Engine(GCE)を使ってインスタンス(ここでは仮想マシンのこと)を作成していきます。
仮想マシンとは超ざっくり言えばインターネット上にあるPCやサーバのことです。
GoogleCloudの「ようこそ」画面にある検索バーから「Compute Engine」を検索して、表示されたCompute Engine選択してください。

Compute Engine画面が表示されたら「インスタンス作成」を選択します。

以下のようにインスタンス作成画面が表示されますのでここから仮想マシンの作成を行っていきます。

インスタンス作成画面

仮想マシンを作成する前にDifyの要件を確認して設定していきましょう。

CPU 2Core,RAM 4GBが最低条件っぽい

では、ここからは具体的にDifyをセットアップする仮想マシンを作成していきます。

リージョン、ゾーン

リージョンとは、Google Cloudのデータセンターが存在する地理的な場所のことです。例えば、東京リージョン(asia-northeast1)、大阪リージョン(asia-northeast2)などがあります。
ゾーンとは各リージョン内には、複数のゾーンが存在します。ゾーンとは、リージョン内の独立した場所のことで、それぞれ独自の電源、ネットワーク、冷却装置を持っています。
今回は東京リージョンを選択し、ゾーンは東京リージョンを選択したら自動的に設定される場所にします

選択されている画面

マシンの構成

マシンはDifyの最低要件を満たしている、E2を選択します。

Difyの最低要件を満たしてそう

ブートディスク

ブートディスクはContainer-Optimized OSを選択します。
Container-Optimized OSはDocker コンテナの実行に適したOSイメージであり、DifyはDockerコンテナであるためこのブートディスクを選択します。
サイズなどの設定はそのままで大丈夫です。

Container-Optimized OSを選択している状態です

ファイアウォール

Difyは作成したアプリをAPIとして外部から呼び出すこともできるため、接続できるようにHTTP/HTTPSのトラフィックは許可しておきます。

HTTP/HTTPSを許可した状態

仮想マシンの作成

上記の設定を終えたら「作成」ボタンをポチっと押して仮想マシンを作成しましょう。
無事に作成できると以下のような画面が表示されます。

こんな感じの画面が表示されればOK

仮想マシンのIPアドレスを取得

ネットワークインターフェースから外部IPアドレスをコピーします。
この外部IPアドレスは後で使いますのでメモに残してください。

WSLからGoogleCloudに繋ごう!

ここからかなりプログラムチックな作業が増えていきます。難しいですが是非ともチャレンジしてみましょう!
今回はWSL(ubuntu)から作成した仮想マシンに接続していきます。

WSLでSSH鍵の作成

今回は自身の過去の経験や学びを得るため、画面操作は極力行わずコマンドラインベース(CLI)で操作を行っています。
まずはローカル(WSL ubuntu)とクラウド(Compute Engine)を接続するためSSH鍵を作成します。
下記シーケンシャル図の1~5の処理です。シーケンシャル図は
Claude Opusに作成してもらいました。

1-5はSSH鍵作成、6-11はSSH接続

SSH鍵は、リモートのコンピュータにログインするための「鍵」だと思ってください。自宅の玄関に鍵があるように、SSH鍵はリモートコンピュータの「玄関」を開ける鍵なのです。この鍵には2種類あります。

  1. 公開鍵:玄関ドアに取り付ける鍵。みんなに公開してOK。

  2. 秘密鍵:玄関ドアを開けるための鍵。自分だけが持っている。

リモートコンピュータにログインするときは、自分の秘密鍵とリモートコンピュータの公開鍵を使います。鍵が合えば、ログインできるという仕組みです。
※鍵は絶対に誰かに見せたり、誰でも見える場所に置いたりしないようにしましょう。

cursorのターミナルを操作して、任意のフォルダに移動し以下のコマンドを実行し、SSH鍵ペアを作成します。

ssh-keygen -t rsa

コマンドを打つと以下のようにpassPhrase(SSH接続するためのパスワード)の設定が求められます。入力せずにEnterで進めてもOKですが、パスワードを設定する方は設定したパスワードを忘れないようにしてください。

Generating public/private rsa key pair.
Enter file in which to save the key (/home/maru/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 

進めていくと以下のような文字列が表示されますが気にしないでください。うまくいってます。

Your public key has been saved in /home/maru/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:hogehoge
The key's randomart image is:
+---[RSA 3072]----+
|   .. ...        |
|   ........      |
|    ........     |
|     ........ . .|
|    .   ...... ..|
|   .   . ........|
|    . . .........|
|     .  .........|
|         .... ...|
+----[SHA256]-----+

次に作成された鍵の情報を以下のコマンド実行して表示します。表示されたテキストはすべてコピーが必要です

cat ~/.ssh/id_rsa.pub

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

次にSSHでのつなげ先である仮想マシンの情報をWSL ubutu上に登録します。以下のコマンドを実行してconfigファイルを作成します。作成済みか分からない場合はlsコマンドを打って存在するか確認しましょう。

touch ~/.ssh/config

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

vi ~/.ssh/config

viの使い方がわからない方はこちらに操作方法をご確認ください。
キーボードのInsertキーを押してinsertモードにしてください。
HostNameには先ほど取得した仮想マシンのIPアドレスを設定してください。
UserにはWSL Ubuntuにログインしているユーザーを設定してください。
事前にメモファイルに貼ってからコピペすると楽です。

Host GCE-instance
  HostName {外部IPアドレス}
  User {Linuxのユーザーアカウント} 
  IdentityFile ~/.ssh/id_rsa

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

:wq

Goole CloudでSSH鍵の登録

Compute Engineの画面に戻って、編集ボタンを押してください。

編集ボタンは上部のバーにある

インスタンスの編集画面からSSH鍵認証へ進み、SSH認証鍵の欄に先ほどコピーした鍵情報ファイルを張り付けて保存してください。

画面ではSSH認証鍵は2が開いてるが、何も設定していなければ1へ設定

ここまででSSH接続の準備ができました!ターミナルに戻って、以下のコマンドを実行してつながるか確認しましょう。
初回の接続時は警告が出ますが、yesと入力して許可してください。pasuhureを設定された方はパスワードを入力してください。

ssh GCE-instance

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

{ユーザ名}@{設定したインスタンス名} ~ $ 

ここからはCompute Engineに接続したままの作業となります。
なお、SSH接続を終了したいときはexitと入力すれば終了します。

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

Docker Composeをダウンロードする前に格納先のフォルダを作成します。

mkdir -p $HOME/bin

Docker Composeをインストールします。今回は1.29.2を使用します。

docker run docker/compose:1.29.2 version

docker-composeを使えるようにするためにエイリアスを設定します。

echo alias docker-compose="'"'docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$PWD:$PWD" \
-w="$PWD" \
docker/compose:1.29.2'"'" >> ~/.bashrc

最後にターミナルを再起動するコマンドを実行します。

source ~/.bashrc

これでDifyをデプロイする準備が完了しました!(長かった、、、)

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

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

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

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


おわりに

今回はGoogle CloudにDifyをデプロイするというチャレンジをしてみました。
SSH鍵やDocker composeのダウンロードなど、普段コマンド操作をしない方からするとハードルを高く感じたかもしれません。
コマンド操作に不安を感じる場合は生成AIにコマンドの意味などを聞きながら進めていくのがおすすめです。