Difyを最速でHTTPS化する方法 (https-portal)
ゴール:https-portalを使用して最速でDifyをHTTPS化する
https-portalというDockerイメージを使用して、Difyを最速でHTTPS化できるようにします。
記事の内容
過去の記事はSSL証明書の更新を手動で行いましたが、今回は自動で行われるようになります。
https-portalとは
HTTPS-PORTALは、Nginx、Let's Encrypt、および Dockerを利用した、完全自動化されたHTTPSサーバーです。 これを使用することで、追加の設定を1行だけ加えることで、既存のWebアプリケーションをHTTPS上で動作させることができます。
SSL証明書は、Let's Encryptから自動的に取得および更新されます。
要するに、
めちゃくちゃ楽にHTTPS化できて、さらに自動更新もやってあげるよ!
という知ってしまったら使わない手はないDockerイメージです。
早速、https-portalを使ってDifyをHTTPS化していきましょう!
開発環境
- AWS LightSail
- Ubuntu (22.04 LTS)
- Docker
- Dify(v0.6.6)
実際の手順
DifyをHTTPSでデプロイする(AWS LightSail)
まずは過去の記事の手順1~4までを終了している状態にしてください。
その上で下記の5~7の手順を進めていきます。
- docker-compose.https-portal.yamlを作成
- docker-compose.yamlを修正
- Dockerを再起動
5. docker-compose.https-portal.yamlを作成
https-portalのイメージを使用するため、Dockerファイルを作成します。
(1) dockerディレクトリに移動します
cd ~/dify/docker/
(2) docker-compose.https-portal.yaml
を作成します。
sudo vi docker-compose.https-portal.yaml
(3) vimを開けたら下記の内容をペーストします。
example.com
は独自ドメインに書き換えてください。
include:
- docker-compose.yaml
services:
https-portal:
restart: always
image: steveltn/https-portal:1
volumes:
- ssl_certs:/var/lib/https-portal
ports:
- '80:80'
- '443:443'
environment:
DOMAINS: 'example.com -> http://nginx:80, example.com =>
https://example.com'
STAGE: 'production'
container_name: dify_https-portal
volumes:
ssl_certs:
(4) vimでペーストするとインデントがずれる時があるので、下記の記事を参考にして修正してください。
6. docker-compose.yamlを修正
80ポートへのアクセスはhttps-portalが使用するので、デフォルトのnginxのポートを修正します。
(1) docker-compose.yamlをvimで開く
sudo vi docker-compose.yaml
(2) 470行目のportsの値を8000:80に修正
vimコマンドモードで:470を実行すると、470行にジャンプできます。
nginx:
image: nginx:latest
restart: always
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/proxy.conf:/etc/nginx/proxy.conf
- ./nginx/conf.d:/etc/nginx/conf.d
#- ./nginx/ssl:/etc/ssl
depends_on:
- api
- web
ports:
- "8000:80" <-修正する
#- "443:443"
7. Dockerを再起動
(1) Dockerを立ち上げている場合はdownする
sudo docker compose down
(2) docker-compose.yaml
とdocker-compose.https-portal.yaml
を同時に実行する
sudo docker compose -f docker-compose.https-portal.yaml up -d
以上終了です!はやい!
https://example.com にアクセスしてHTTPS通信ができるか確認してください。
SSL証明書が自動で更新されるので、今後SSL証明書のことは何も考えずに済みます。
HTTPS化されたDifyでLLMアプリを作りまくりましょう!
お疲れ様でした☺️
8. 上手く行かない場合
-
docker-compose.https-portal.yaml
の内容が正しくペーストできているか確認してください。 - 自分の場合は、includeのiが抜けていたり、volumesのインデントがずれていたのでその辺もチェックしてみてください。
おわりに
- 今回は
https-portal
を使用してDifyをHTTPS化してみました。 - certbotをインストールして自力でコマンドを叩くよりも、遥かに楽に実装できました。
- なぜDifyで
https-portal
を使用しないのかorできないのか気になるので、OSSコミットチャレンジしてみようかと思います。
参考文献
Discussion
Dify が 0.6.12-fix1 (2024/6/30 現在)にver.upされたことに伴い、yamlの記載仕様が変わっているように思います
docker-compose.https-portal.yaml を作成せずとも、difyのdocker-compose.yaml を以下のように修正することで対応できるかと思いました。
①
web:
image: langgenius/dify-web:0.6.12-fix1
のポート設定している
312行目がコメントアウトされているので
- "3000:3000"
のコメントアウトを外す
②以下を追記
https-portal:
image: steveltn/https-portal:1
ports:
- '80:80'
- '443:443'
links:
- web
environment:
DOMAINS: 'example.com -> http://web:3000'
STAGE: 'production'
FORCE_RENEW: 'true'
networks:
- default