本記事では、Azure仮想マシンにインストールしたDifyをHTTPS対応させる方法について解説します。
※前回作成したAzure仮想マシンのHTTPS対応を行う方法について解説します。
今回は、Let's Encryptを利用して証明書を取得し、ACMEクライアントであるCertbotを用いてHTTPS化を行います。
Let’s Encryptとは?
Let’s Encryptは、Internet Security Research Group(ISRG)が提供する無料の公開鍵証明書を発行する認証局です。
Let’s Encryptを利用することで、Webサイトの通信を暗号化し、ユーザーのデータを安全に保護することができます。
Let’s Encryptの主な特徴は以下の通りです。
- 無料で商用利用可能
- 誰でも無料で証明書を取得できるため、コストを抑えてWebサイトのセキュリティを向上させることができます
- 自動化された証明書発行と更新
- ACMEクライアントを使用して証明書の発行と更新を自動化することができます
- 管理者の負担を軽減し、証明書の有効期限切れを防ぐことができます
- 広範なブラウザ互換性
- Let’s Encryptが発行する証明書は、多くの主要なブラウザでサポートされており、ユーザーが警告なしに安全にサイトにアクセスできます
Certbotとは?
Certbotは、Let’s Encryptから無料のSSL/TLS証明書を取得および更新するための、オープンソースのACMEクライアントです。
証明書の取得と自動更新を簡単に実行できます。
Certbotの主な特徴は以下の通りです。
- 簡単なインストールと使用
- 主要なLinuxディストリビューションで利用可能で、簡単にインストールすることができます
- コマンドラインツールとして動作し、シンプルなコマンドで証明書の取得や更新が可能です
- 自動化
- 証明書の取得および更新プロセスを自動化できます
- 定期的に実行することで、証明書の有効期限が切れる前に自動的に更新されるよう設定することができます
- 幅広いWebサーバーのサポート
- ApacheやNginxなどの主要なWebサーバーと互換性があり、これらのサーバーの設定を自動的に更新してHTTPSを有効にします
- 柔軟性
- Webサーバーを停止せずに証明書を取得する「webroot」モードや、DNSレコードを利用して証明書を取得する「DNS」モードなど、さまざまな取得方法をサポートしています
環境
本記事で使用した環境です。
- Azure仮想マシンのOS:Linux (ubuntu 24.04)
- Difyのバージョン:v0.8.3
本記事で記載しているDifyが稼働しているドメイン名とは、下記画像の白枠の箇所の名称です。
例)hogehoge.dify.net
httpsに対応する手順については、下記サイトを参考にしました。
本記事で紹介したupdate-cert.shで実行されているcertbot renewコマンドは、証明書の有効期限が30日以内の場合、証明書を更新します。
User Guide — Certbot 2.11.0 documentation
HTTPS対応の作業手順
環境変数を修正する
/dify/docker/.envファイルの下記の箇所を修正します。
- NGINX_SSL_CERT_FILENAME=fullchain.pem
- NGINX_SSL_CERT_KEY_FILENAME=privkey.pem
- NGINX_ENABLE_CERTBOT_CHALLENGE=true
- CERTBOT_DOMAIN=Difyが稼働しているドメイン名
- CERTBOT_EMAIL=連絡先メールアドレス
Certbotに関連するコンテナを起動する
docker network prune docker compose --profile certbot up --force-recreate -d
証明書を取得する
docker compose exec -it certbot /bin/sh /update-cert.sh
環境変数を修正する
/dify/docker/.envファイルの下記の箇所を修正します。
- NGINX_HTTPS_ENABLED=true
nginxコンテナを再起動する
docker compose --profile certbot up -d --no-deps --force-recreate nginx
Difyが稼働しているドメイン名にhttpsでアクセスできるか確認します。アクセスできれば、証明書の取得とDifyのhttps対応は出来ています。
例)https://hogehoge.dify.net
証明書が更新できるか確認する手順
Let's Encryptでは、証明書の発行に一定の制限があり、証明書更新を頻繁に行うとレート制限に抵触する可能性があります。
レート制限 - Let's Encrypt - フリーな SSL/TLS 証明書
証明書の更新確認には、--dry-runオプションを使用してください。
環境変数を修正する
/dify/docker/.envファイルの下記の箇所を修正します。
- CERTBOT_OPTIONS=--dry-run
Certbotコンテナを再起動する
環境変数の修正を反映させます。
docker compose --profile certbot up -d --no-deps --force-recreate certbot
--dry-runが設定されている事を確認する
certbotコンテナにログインします。
docker compose exec -it certbot /bin/sh
ルート配下にあるupdate-cert.shの内容を確認します。
catコマンドなどでupdate-cert.shの内容を確認します。
※OPTIONSに--dry-runが記載されている事を確認します。
証明書が更新できるかテストする
docker compose exec -it certbot /bin/sh /update-cert.sh
successと表示される事を確認します。
環境変数を元に戻す
/dify/docker/.envファイルの下記の箇所を修正します。
- CERTBOT_OPTIONS=
上記で説明したcertbotコンテナの再起動を実行し、update-cert.shのOPTIONSに--dry-runが記載されていないことを確認して下さい。
証明書を自動更新する手順
cronを使用すれば、証明書を自動更新できます。
例)Azure仮想マシンでDifyをインストールしたユーザーで設定する場合
crontab -e
下記を設定します。
※15日おきの午前3時に証明書更新が実行されます。
0 3 */15 * * docker compose exec -T certbot /bin/sh /update-cert.sh && docker compose exec nginx nginx -s reload > /var/log/certbot-renew.log 2>&1
Certbotコンテナは、初期設定では自動起動されません。
Azure仮想マシンを再起動するとCertbotコンテナは停止します。
cronによる証明書の自動更新を行う場合は、下記設定を/dify/docker/docker-compose.yamlに追記して下さい。
※restart: alwaysを追記する。(Certbotコンテナが自動起動します)
ただ、docker-compose.yamlを直接編集するとDifyのアップデート時に上書きされる可能性があります。
/dify/docker/docker-compose.override.yamlを作成して対応する方法もあるので、ご検討下さい。
services: certbot: restart: always
まとめ
本記事では、Azure仮想マシン上でDifyをHTTPS対応する手順を解説しました。
Let’s EncryptとCertbotを活用することで、証明書の発行と更新を自動化し、運用コストを削減できます。
これらのツールは商用利用にも適しており、セキュリティ強化と運用効率化を実現できます。
本手順を活用し、DifyのHTTPS対応に取り組んでみてください。