はじめに
RailsアプリケーションのサーバーをItamaeで管理しているます。
環境構築時にELBを立てず、サーバー直接でアクセスさせる場合、サーバーへのSSL証明書の設定が必要になります。
サーバーはAmazon Linux2で、SSL証明書はLet's Encriptで取得するのをItamae化してみました。
nginx, Itamae, Certbotのインストール、構築は既に済んでいるものとします。
環境
-
サーバー
EC2 -
OS
Amazon Linux2 -
バージョン
Rails: 5.x.x(複数プロジェクト)
Ruby: 2.x.x
手動構築手順
簡単に説明すると、下記コマンドを打つ
$ sudo certbot --nginx
すると、対話式でメールアドレス、対象ドメイン、規約への同意などなどの確認があったのち、SSL証明書が作成され、nginx.confに自動的に設定される.
その対話をコマンドオプション指定でなくすことができるかどうかが今回の争点!
結論
- cookbooks/certbot/default.rb
execute 'download EPEL7' do
user 'root'
command "wget -r --no-parent -A 'epel-release-*.rpm' http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/"
end
execute 'install EPEL7' do
user 'root'
command "rpm -Uvh dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-*.rpm"
end
execute 'enable EPEL7' do
user 'root'
command 'yum-config-manager --enable epel*'
end
package 'certbot'
package 'python2-certbot-nginx'
execute 'SSL証明書を作成' do
user 'root'
command "certbot --nginx -d #{node[:dns][:server_name]} --agree-tos --register-unsafely-without-email -n"
end
やったこと
- Amazon Linux 2 でEPEL7を使用可能にする。
- certbotとpython2-certbot-nginxをインストール
- 証明書の作成
- オプション
- -d example.com # => DNSを指定。nginx.confのserver_nameと同じにする
- --agree-tos # => 規約に同意
- --register-unsafely-without-email # => メールを登録しない(非推奨)
- -n #=> 対話をなくす
- オプション
certbot自体のオプションはそのまま流用可能なようなので、registerする場合は
--email test@example.com
などの指定も可能。
これでめっちゃ手軽にLet's Encript生活!!
事後作業
証明書更新のCronの設定は適宜参照してください。===>> 上記URL
参考にさせていただいたサイト