よしたかの日常

日常の事やイラスト投稿、開発している時の備忘録を書いています。

AWS EC2のfeed-generatorをHTTPSに対応させる

おはこんばんにちは!

今日も冷え込みますね..._(:3 」∠)_

先日、AWS EC2にfeed-generatorをやってみました。
feed-generatorを公開するためには、https接続が必要になってますので、備忘録?やったことメモになります。

HTTPSに対応させるために独自ドメインを取得

EC2インスタンスのパブリックDNSは、Let's Encryptに対応していないので独自ドメインを各自で取得する必要があります。
独自ドメインを取ったりするのは、省略〜_(:3 」∠)_

私は、お名前.comでドメインを管理しているので、お名前.comとの設定方法になります。

Route53に独自ドメインを割り当てる

まず、AWSコントロールパネルで、Route53へアクセスして、ホストゾーンの作成を行います。
ドメイン欄には、取得したドメインのサブドメインを入力します。

タイプ欄は、パブリックホストゾーンのままで、『ホストゾーンの作成』ボタンを押して作成します。


一覧に、作成したサブドメインが追加されているので、選択して詳細画面へ行きます。
詳細画面では、『レコードを作成』ボタンを押してレコードを追加します。

作成画面では、値の入力欄にEC2インスタンスのパブリック IPv4 アドレスを入力します。

本当はAWS Elastic IPでIPアドレスを固定した方が良いんですけど、自分用なので変わったら再設定すればいいや精神で、Elastic IPの設定を省略してます。


ホストゾーンの詳細のところを開いて、ネームサーバーの4つのアドレスを控えておきます。

お名前.com側のDNS設定

お名前.comへログインをして、メニュー画面から、『ドメインのDNSレコード設定(DNS設定/転送設定)』画面へ行きます。
『DNSレコード設定を利用する』画面へ向かって、NSを追加していきます。

登録済みの画像ですけど、上記のようになればOKです。
これはすぐに反映されないので、完了メールが来るまで気長に待ちましょう。

ネームサーバーの確認で、Route53で設定したEC2インスタンスのパブリックIPアドレスが表示されたら設定が終わっているはずです。

$ dig aws.example.com

# 下記のようなのが出力される
...
;; QUESTION SECTION:
; aws.example.com.          IN  A

;; ANSWER SECTION:
aws.example.com.        1   IN  A   123.45.678.90
...

証明書の取得

https接続するために、証明書やらの取得が必要になります。

# certbotのインストール
$ sudo yum install -y certbot

# 証明書の取得をするために80ポートを使用するため、一旦dockerを停止
$ sudo docker-compose down

# 証明書の取得
$ sudo certbot certonly --standalone -n --agree-tos --email example@example.com -d aws.example.com
 


実行すると下記パスにファイルが追加されているはずです。

# 証明書
/etc/letsencrypt/live/aws.example.com/fullchain.pem
# 秘密鍵
/etc/letsencrypt/live/aws.example.com/privkey.pem

プロジェクトフォルダ内にファイル追加・編集

プロジェクトフォルダ直下にDockerfile用の.envファイル追加

SSL_CRT_PATH=/etc/letsencrypt/live/aws.example.com/fullchain.pem
SSL_KEY_PATH=/etc/letsencrypt/live/aws.example.com/privkey.pem


docker-compose.ymlファイルを編集

...
    environment:
      # VIRTUAL_HOSTを変更
      - VIRTUAL_HOST= aws.example.com
      - VIRTUAL_PORT=3000
...
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./vhost.d:/etc/nginx/vhost.d:ro
      
      # 下記を追記
      - ${SSL_CRT_PATH}:/etc/nginx/certs/aws.example.com.crt
      - ${SSL_KEY_PATH}:/etc/nginx/certs/aws.example.com.key
...
 


feed-generatorの.env編集

# 設定したサブドメインに書き換え
FEEDGEN_HOSTNAME="aws.example.com"


ファイル名を変更する

vhost.dフォルダ内にある『ec2〜.compute.amazonaws.com』を
『aws.example.com』にファイル名を変更します。

docker-compose再ビルドして立ち上げ

編集したファイルたちを、EC2インスタンスへアップロードして、docker-composeコマンドを実行します。

$ sudo docker-compose up -d --build


下記URLにアクセスして、なんかjson情報が表示されるか確認してみます。

https://aws.example.com/xrpc/app.bsky.feed.getFeedSkeleton?feed=at://(DID ID)/app.bsky.feed.generator/whats-alf
 

参考サイト