🥇

Difyを最速でHTTPS化する方法 (https-portal)

2024/05/26に公開1

ゴール:https-portalを使用して最速でDifyをHTTPS化する

https-portalというDockerイメージを使用して、Difyを最速でHTTPS化できるようにします。

記事の内容

https://zenn.dev/shoheiweb/articles/f5627d03019620#5.-ssl証明書を発行する
↑自分が過去に書いた記事のアップデートバージョンです。
過去の記事はSSL証明書の更新を手動で行いましたが、今回は自動で行われるようになります。

https-portalとは

HTTPS-PORTALは、Nginx、Let's Encrypt、および Dockerを利用した、完全自動化されたHTTPSサーバーです。 これを使用することで、追加の設定を1行だけ加えることで、既存のWebアプリケーションをHTTPS上で動作させることができます。
SSL証明書は、Let's Encryptから自動的に取得および更新されます。

https-portal日本語版のドキュメントより引用

要するに、
めちゃくちゃ楽にHTTPS化できて、さらに自動更新もやってあげるよ!
という知ってしまったら使わない手はないDockerイメージです。
早速、https-portalを使ってDifyをHTTPS化していきましょう!

https://github.com/SteveLTN/https-portal

開発環境

  • AWS LightSail
  • Ubuntu (22.04 LTS)
  • Docker
  • Dify(v0.6.6)

実際の手順

DifyをHTTPSでデプロイする(AWS LightSail)

まずは過去の記事の手順1~4までを終了している状態にしてください。
その上で下記の5~7の手順を進めていきます。

  1. docker-compose.https-portal.yamlを作成
  2. docker-compose.yamlを修正
  3. 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は独自ドメインに書き換えてください。

docker-compose.https-portal.yaml
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でペーストするとインデントがずれる時があるので、下記の記事を参考にして修正してください。
https://qiita.com/yukofeb/items/1706ce18b5a21031d266

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行にジャンプできます。

docker-compose.yaml
  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.yamldocker-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コミットチャレンジしてみようかと思います。

参考文献

https://qiita.com/yukofeb/items/1706ce18b5a21031d266
https://zenn.dev/shoheiweb/articles/f5627d03019620#5.-ssl証明書を発行する

Discussion

akinobukatoakinobukato

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