HTTPS通信を有効化したDifyのデプロイ(Dockerイメージ利用)
ConoHa VPS(Ver.3.0)にて提供しているDockerイメージにて、Dify(コミュニティ版)をデプロイする手順例を記載します。
動作確認時の各種ソフトウェア情報
パッケージ | バージョン | ライセンス |
---|---|---|
Docker CE | 27.5.1 | Apache 2 |
Dify | v1.5.0 | Apache 2 |
https通信設定のため、事前に下記を準備してください。
- ・受信可能なメールアドレス
- ・ドメイン
メモ
設定可能なドメインがない場合、VPSの逆引きホスト名を活用ください。ConoHa VPS(Ver.3.0)では、VPSに設定されているグローバルIPアドレスの逆引きホストが標準で設定されており、該当グローバルIPアドレスに正引きされています。
Difyとは
Difyは、AIアプリケーションの開発を支援するオープンソースのプラットフォームです。GPTsのようにノーコードで開発も可能です。
Step 0: セキュリティグループについて
ConoHa VPS(Ver.3.0)ではサーバー毎にIPアドレスまたはポートでトラフィックを制御するセキュリティグループ(仮想ファイアウォール)が設定されます。
本テンプレートをご利用の場合は、予め利用するポートの通信許可設定が必要です。
詳細はセキュリティグループを参照してください。
今回は「Docker」イメージから作成するサーバーに以下セキュリティグループを設定します。
- ・IPv4v6-SSH
- ・IPv4v6-Web
Step 1: サーバーの準備
ConoHa VPS(Ver.3.0)の「Docker」イメージから作成したサーバーにコントロールパネルのコンソールやSSHでログインします。
Difyの最小システム要件を満たすVPSが必要です。
- CPU >= 2 Core
- RAM >= 4 GiB
鍵認証でのSSH接続コマンド例
ssh -i 秘密鍵ファイルのパス root@VPSのグローバルIPアドレス
Step 2: OS内ファイアウォールの設定
1. アプリケーションの登録
# cat <<EOF > /etc/ufw/applications.d/web-server
[web-server]
title=web-server
description=web-server
ports=80/tcp|443/tcp
EOF
2. アプリケーションの許可
# ufw allow web-server
3. ファイアウォール設定再読込
# ufw reload
4. ファイアウォールルール確認
# ufw status verbose
Status: active
Logging: on (low)
Default: reject (incoming), allow (outgoing), deny (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp (OpenSSH) ALLOW IN Anywhere
80/tcp (web-server) ALLOW IN Anywhere
443/tcp (web-server) ALLOW IN Anywhere
22/tcp (OpenSSH (v6)) ALLOW IN Anywhere (v6)
80/tcp (web-server (v6)) ALLOW IN Anywhere (v6)
443/tcp (web-server (v6)) ALLOW IN Anywhere (v6)
Step 3: 一般ユーザーの準備
1. 一般ユーザーの作成
ここでは「dify-user」というユーザーを作成します。コマンド実行後パスワード設定とユーザー情報設定を求められるので任意のパスワードとユーザー情報を設定ください。ユーザー情報は「ENTER」キーを押下することでデフォルト設定が可能です。
# adduser dify-user
2. sudoグループに追加
# usermod -aG sudo dify-user
3. ユーザーの切り替え
# su dify-user
4. 作業ディレクトリへ移動
ここでは一般ユーザーのhomeディレクトリとします。
$ cd ~
Step 4: Difyのクローン
Difyのソースコードをサーバーにクローンし、difyディレクトリに移動します。
$ git clone https://github.com/langgenius/dify.git
$ cd dify
Step 5: Difyの起動
1. 環境配置ファイルのコピー
$ cp docker/.env.example docker/.env
2. 設定ドメインとメールアドレスの変数設定
今回はLet’s EncryptでSSL証明書を取得します。事前に下記変数を設定します。
$ EMAIL=メールアドレス
$ DOMAIN=ドメイン名
3. Difyの.envファイルの設定更新
$ sed -i 's/^NGINX_SSL_CERT_FILENAME=.*/NGINX_SSL_CERT_FILENAME=fullchain.pem/' docker/.env
$ sed -i 's/^NGINX_SSL_CERT_KEY_FILENAME=.*/NGINX_SSL_CERT_KEY_FILENAME=privkey.pem/' docker/.env
$ sed -i 's/^NGINX_ENABLE_CERTBOT_CHALLENGE=.*/NGINX_ENABLE_CERTBOT_CHALLENGE=true/' docker/.env
$ sed -i "s/^CERTBOT_DOMAIN=.*/CERTBOT_DOMAIN=$DOMAIN/" docker/.env
$ sed -i "s/^CERTBOT_EMAIL=.*/CERTBOT_EMAIL=$EMAIL/" docker/.env
$ sed -i "s|^SERVICE_API_URL=.*|SERVICE_API_URL=https://$DOMAIN|" docker/.env
$ sed -i "s|^APP_WEB_URL=.*|APP_WEB_URL=https://$DOMAIN|" docker/.env
4. Dockerネットワークを整理し、コンテナを起動します
$ sudo docker network prune -f
$ sudo docker compose -f docker/docker-compose.yaml --profile certbot up --force-recreate -d
5. コンテナの稼働確認
$ sudo docker compose -f docker/docker-compose.yaml ps
この時点で、http通信にてDifyへのアクセスが可能ですが、通信が暗号化されていません。
http://ドメイン名/install
Step 6: SSL証明書の設定
1. SSL証明書の取得
$ sudo docker compose -f docker/docker-compose.yaml exec -T certbot /bin/sh /update-cert.sh
2. .envファイルのSSL設定
$ sed -i 's/^NGINX_HTTPS_ENABLED=.*/NGINX_HTTPS_ENABLED=true/' docker/.env
3. nginxコンテナの再作成
$ sudo docker compose -f docker/docker-compose.yaml --profile certbot up -d --no-deps --force-recreate nginx
準備は整いました。下記にアクセスしてDifyの管理者アカウントの設定を進めましょう。
https://ドメイン名/install
注意
今回の手順ではLet’s EncryptでSSL証明書を取得するため、接続元IP制限を行っておりません。悪意のある第三者もブラウザ経由でアクセス可能なため、速やかに管理者アカウントを設定してください。
外部リンク
項目 | URL |
---|---|
Dify公式リポジトリ | https://github.com/langgenius/dify |
Dify Docs | https://docs.dify.ai/ja-jp/getting-started/install-self-hosted/docker-compose |