前回の記事の続きです。

RailsアプリをAWSにイチからデプロイするまでの手順メモ

今回メモっておくのは、AWSにSSL対応の独自ドメインを設定するための手順です。なんでもAWS Certificate Manager(通称: ACM)を使うことで無償でSSL証明書発行を行えるとか。

また、SSL発行を申請するにあたってメールアドレスの認証を行わないといけないので、Amazon Simple Email Service(通称: SES)を使ってメール認証を行う手順もメモ。

まずはRoute53の登録とサーバーへの適用からスタートです。

Route53の設定

独自ドメインの発行や管理が行えるサービスです。

  1. 「Hosted Zone」からの「Create Hosted Zone」をクリック
  2. 画面右側の入力欄、Domain Nameに「ドメイン名 (example.com)」、Commentは適当に、Typeはそのままで「Create」
  3. 作成後の画面に表示される「Value」をメモっておく (ns-*で始まる4つセットになってるやつ)

ドメイン取得とネームサーバの設定

僕は学生時代から愛用しているムームードメインで取得しました。
ネームサーバは「GMOペパボ以外のネームサーバを使用する」に設定しておき、ネームサーバ1234の項目に先ほどメモっておいたns-*で始まるアドレスを入力して適用。

EC2へSSHログインし、下記コマンドで設定されているか確認してください。

1
2
3
4
$ nslookup
> set type=ns
> ドメイン名

表示された値が設定された値と一致していればネームサーバ設定は完了です。

ドメインを適用する

Route53に戻ります。

  1. 「Hosted Zone」からの「Create Record Set」をクリック
  2. 画面右側の入力欄、Nameに「www」、Valueに「Elastic IPで取得したIPアドレス」を設定
  3. 「Create」
  4. EC2にSSHログイン、下記コマンドで設定ファイルを開きserver_nameを変更

    1
    2
    3
    4
    server {
    listen 80;
    client_max_body_size 4G;
    server_name www.example.com; # <- ここ
  5. アプリのディレクトリへ移動し、Unicornのプロセス番号を確認

    1
    $ ps -ef | grep unicorn | grep -v grep
  6. 確認した番号でプロセスをkillして一旦停止(親の番号をkillすれば子も停まる)

    1
    $ kill プロセス番号
  7. Nginxを再起動

    1
    $ sudo service nginx restart
  8. Unicornを再起動

    1
    $ bundle exec unicorn_rails -c /var/www/projects/アプリ名/config/unicorn.conf.rb -D -E production
  9. 設定したドメインをブラウザに入力して表示されるか確認する

    1
    http://www.example.com

ここまでの手順はこちらの記事を参考にさせていただきました。

初心者向け:AWS(EC2)にRailsのWebアプリをデプロイする方法 ⑥

SSL証明書を発行する

httpのWebサービスなんて使い物になりませんよね?
AWS Certificate ManagerでSSL証明書を発行してセキュアな接続に変更しましょう。

  1. ACM「証明書のリクエスト」、ドメイン名に「ドメイン名(www.example.com)」を入力して次へ
  2. メールアドレスで認証を行うが、受信できるメールサーバーが無いよ、という場合はSESを利用して認証を行う。詳しくは下記の記事が参考になりました。
    【そんなときどうする?】メールサーバはないけれどACMを使いたい!
  3. 認証が通り状況が「発行済み」となっていれば完了

ELBのリスナーにHTTPSのポートを設定する

  1. EC2「ロードバランサー」、下部のタブの「リスナー」を選択し、「編集」からの「追加」
  2. ロードバランサーのプロトコルを「HTTPS(443)」、SSL証明書を「先ほど発行したACMのドメイン名」を選択
  3. 「保存」

セキュリティグループにHTTPSのポートを追加

  1. EC2「セキュリティグループ」、下部のタブの「インバウンド」を選択し、「編集」からの「追加」
  2. タイプを「HTTPS」、ポート範囲を「443」、ソースを「0.0.0.0/0」と入力
  3. 「保存」

Route53にSSL証明書をアタッチ

最後の仕上げです。

  1. Route53「Hosted zones」、「Go to Record Sets」をクリックし「Type A - IPv4 Address」の「Alias」をYesに変更し、Alias Targetに「SSL証明証を設定したELB」を選択
  2. 「Save Record Set」で保存
  3. EC2にSSHでログイン、念のためNginxとUnicornを再起動しておく
  4. しばらく経つと「https://www.example.com」で接続できるはず

ついでにRails側の設定

config/environments/production.rb の51行目あたり、config.force_ssl のコメントアウトを外して有効化します。

1
config.force_ssl = true

これで、httpでアクセスがあった場合にhttpsへ転送してくれます。

その他メモ

  • Route53はAWS無料枠で利用できないので注意、つまり有料
  • ACMで取得したSSL証明書は自動更新されるので安心
  • SSL化したら、ソース内のアセットのパスも全てhttps〜にしなければいけないので注意

ふり返り

ひとまずこれでAWSへのRailsアプリのデプロイ作業完了です。
色々試行錯誤してたら結構時間がかかってしまいました…

ほぼチュートリアルを見て進めただけなので、今後深掘りしてAWSを学習していく次第です。(特にVPCとかそのあたりがイマイチ理解できていない)

1月の初旬でRubyとRailsを勉強し開発を始め、中旬頃に素人ながらも形にし、下旬にはAWSでデプロイ、SSL化まで行うことができ、非常に充実した開発期間となりました。

終業後や空き時間で開発していたので思いの外時間がかかってしまった印象ですが、第一作目としてはまぁまぁな出来ではないでしょうか。

2018年2月13日にプレオープン予定です。
なぜ作ろうと思い立ったのかなど、またブログに書きます。

https://www.makepost.net

それでは!