🌐

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

2024/05/06に公開

ゴール:DifyのHTTPS環境をデプロイする(AWS LightSail)

ネットワーク・Dockerの知識がなくてもDifyをHTTPS化できることをゴールにします。
Difyを使い始めた人の助けになれば嬉しいです!☺️

やってみた結果

「Difyのソースコードを読む, AWSのドキュメントを読む, Claudeに聞く, 技術記事を漁る」
など、 一つずつ調べながら何とかHTTPS化することができました。
インフラを勉強するとても良い機会だったので、アウトプットとして記事も書いてみます!
参考にさせていただいた記事は、最後にまとめておきます。

開発環境

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

やったこと

  1. AWS LightSailでDifyをクローンする
  2. LightSailコンソールから独自ドメイン作成
  3. LightSailの静的IPを作る
  4. 静的IPと独自ドメインを紐づける
  5. SSL証明書を発行する
  6. docker-compose.yamlとdefault.conf をvimで編集
  7. Dockerを再起動

1. AWS LightSailでDifyをクローンする

まずは、AWSLightSailでDifyをクローンします。
@gijigaeさんのnoteに全ての手順が書いてあります。
手順通りに進めると、10分ほどでhttp://IPアドレス でDifyにアクセスできるようになります。
https://note.com/sangmin/n/nbb4db69784e8

2. LightSailコンソールから独自ドメイン作成

https://docs.aws.amazon.com/ja_jp/lightsail/latest/userguide/amazon-lightsail-register-new-domain.html#reg-new-domain-steps

(1) [ドメインと DNS] タブを選択します。
(2) [ドメインの登録] を選択し、登録するドメインを指定します。

(3) 取得したいドメインを入力

(4) 自動更新の設定、連絡情報を入力

(5) ドメインの登録

3. LightSailの静的IPを作る

(1) メニューバーからインスタンスを選択
(2) 作成したインスタンスを選択

(3) ネットワーキングタブを選択
(4) 静的IPをアタッチを選択
※静的IPをアタッチしないと、インスタンスを再起動した際にIPアドレスが変更されてしまいます。

(5) 静的IPの区別する任意の文字列を入力します
(6) 静的IPを作成

(7) IPv4 ファイアウォールのルールを追加

(8) HTTPSのポートを許可します
(9) ルール作成

4. 静的IPと独自ドメインを紐づける

(1) サイドバーからドメインとDNSを選択
(2) DNSゾーンの作成

(3) 独自ドメインを選択
(4) DNSゾーンの作成

(5) 割り当てタブに移動
(6) 作成した静的IPリソースと静的IPアドレスを選択
(7) 割り当てる

(8) Aレコードが作成されている事を確認
※自分の場合は、自動で追加されていました。

(9) ドメインタブに移動
(10) ドメインに移動を選択

(11) 詳細タブに移動
(12) Lightsail ネームサーバーを使用

※しばらくすると完了します。

5. SSL証明書を発行する

(1) インスタンスタブに移動
(2) SSHを使用して接続

(3) 下記のコマンドを順番に実行
AWSのドキュメント1を参考に、certbotをインストール

sudo snap install core;
sudo snap refresh core;
sudo snap install --classic certbot

(4) 下記のコマンドを順番に実行
AWSドキュメント2を参考に、SSL証明書を取得

sudo service apache2 stop
sudo certbot certonly --standalone -d example.com

↓実行の成功例

証明書とキーが下記のパスに保存されている事を確認します。

Certificate is saved at: /etc/letsencrypt/live/example.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/example.com/privkey.pem

6. docker-compose.yamlとdefault.confを修正

vimエディタを使用して、2つのファイルを修正していきます。
vimに慣れていない方は、vimのよく使うコマンドの記事を見ながら進めると良いと思います。

(1) /Dockerディレクトリに移動する

cd ~/dify/docker/

(2) docker-compose.yamlをvimで開く

sudo vi docker-compose.yaml 

(3) 377行目以降の下記の2行を変更
vimコマンドモードで:377を実行すると、377行にジャンプできます。

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
      - /etc/letsencrypt:/etc/letsencrypt <--変更
    depends_on:
      - api
      - web
    ports:
      - "80:80"
      - "443:443" <--#を削除する

コマンドモードで:wqで保存してvimを終了

次にdefault.confを修正します。
(4) /conf.dディレクトリに移動する

cd ~/dify/docker/nginx/conf.d/

(5) default.confをvimで開く

sudo vi default.conf 

(6) 3行目のserver_nameに独自ドメインを記載

default.conf
server_name 独自ドメイン;

(7) 31行目以降のコメントを全てコメントを外す

default.conf
listen 443 ssl;
ssl_certificate ./../ssl/your_cert_file.cer;
ssl_certificate_key ./../ssl/your_cert_key.key;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

(8) 下記の2行を修正

default.conf
ssl_certificate ./../ssl/cert_file.cer;
ssl_certificate_key ./../ssl/your_cert_key.key;

ssl_certificate /etc/letsencrypt/live/独自ドメイン/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/独自ドメイン/privkey.pem;

7. Dockerを再起動

sudo docker-compose down
sudo docker-compose up -d

めちゃくちゃ長かったですが、これにてHTTPS化終了です!!!🎉
https://独自ドメイン にアクセスして表示を確認してください!
お疲れ様でした!!

8. 上手く行かない場合

  • sudo docker ps -aでDockerが立ち上がっているか確認する
  • sudo docker exec -it docker_nginx_1 /bin/bashでnginxコンテナに入り、ログを確認する
    など試してみると不具合が見つかるかもしれません!

おわりに

今回初めてDockerの環境をSSL化してみました。
docker-compose.yamlにSSL化の設定を記述する方法もあるみたいなので、今後挑戦してみようと思っています。
今回で環境構築のブログを書く大変さを知ったので、これから技術ブログを読む時は心を込めて読むことにします。
HTTPS化されたDifyで様々なプロダクトが開発されるのを楽しみにしてます☺️

参考文献

https://note.com/sangmin/n/nbb4db69784e8
https://qiita.com/tomokei5634/items/a5dfb8504989ed93c31b
https://docs.aws.amazon.com/ja_jp/lightsail/latest/userguide/amazon-lightsail-register-new-domain.html#reg-new-domain-steps
https://repost.aws/ja/knowledge-center/lightsail-install-certbot-package
https://repost.aws/ja/knowledge-center/lightsail-standard-ssl-certificate
https://qiita.com/moko_Swallows/items/be918efda9cfebcbf6b6

Discussion