いきなり表題と関係ありませんが、本日ユカシカドは2周年を迎えました!ぱちぱちぱち!
一言でいうと、あっ?!と言う間でしたね。2周年くらいではまだお一人様開発のままであります。。
今までは基本的に内向きのアプリケーションの開発しかしてこなかったので、VPSでだいたい事足りていたのですが、いよいよ外向きにサービスをリリースする準備に入りました。
そこでですね、今回その一環でやったことをまとめてみて、そうそう頻繁にやらない作業なので絶対に、絶対忘れるだろうと思い、メモしておきます。
この構成のそもそもの目的
- 将来的にサービスをスケールできるようにすること、という前向きな気持ち!と、
- アプリケーションサーバとして割り切って考える事でインフラ管理のコストを最小限にしたいという効率化と、
- イマドキの環境をいまのうちに(サービスに対する要求が緩やかなうちに)さわっておきたいという下心!
- (と、AWSムズカシイ)
流れ
herokuにアプリケーションをデプロイできているという前提で、
1. 秘密鍵を準備する
秘密鍵を作成
$ openssl genrsa -des3 -out server.orig.key 2048
パスワードを解除した鍵を作成
$ openssl rsa -in server.orig.key -out server.key
署名リクエストを作成
$ openssl req -new -key server.key -out server.csr
2. SSL証明書の購入と準備
Rapid SSLで¥4,300/年の証明書を購入しました。安いですねー。いつかはEV-SSL!
中間証明書を取得
$ curl https://knowledge.rapidssl.com/library/VERISIGN/ALL_OTHER/RapidSSL%20Intermediate/RapidSSL_CA_bundle.pem > rapidssl_bundle.pem
メールで送られてきたサーバ証明書からファイルを作成
$ touch server.orig.crt
$ vi server.orig.crt # 内容をコピペ。
中間証明書とサーバ証明書を結合
$ cat server.orig.crt rapidssl_bundle.pem > server.crt
3. herokuとDNSのセットアップ
もともとドメインはムームードメインで取得してDNSもそのまま使用していたのですが、herokuでルートドメインを使用する為には、IPアドレスが動的に変わってしまう為、特別な方法が必要となるようです。
そこで必須なのがゾーン情報にALIASレコードを設定できること。
ルードドメインのAレコードにはIPアドレスが必要ですが、それが動的に変わってしまう為、herokuから付与されたホスト名を設定できるようになるAWS向けのDNS独自拡張のようなもののようです。
参考
- Herokuでルートドメインを使用する
http://qiita.com/Oakbow/items/8f76ca074f51fc3bd89c - herokuにルートドメインを無料で設定する
http://qiita.com/Tkashiro/items/8249455477bbb5333118 - Herokuの本番環境にRailsでSSL(https)を導入する方法
http://qiita.com/GenTamura84/items/7a12ca611705017bcb0e
Gehirn DNS
海外も含めると今回の用途にあうDNSサービスがいくつかあるようですが、日本語で明快な説明があって、2ドメインまで無料のフリープランがある、Gehirn DNSへ移行して、設定をおこないました。
SSLアドオンを追加する
herokuのアドオンを追加します。このアドオンには$20/月がかかるので、事前にクレジットカードを登録しておく必要があります。
$ heroku addons:add ssl
herokuに証明書を追加する
$ heroku certs:add server.crt server.key
Resolving trust chain... done
Adding SSL Endpoint to my-app... done
my-app now served by ****.herokussl.com
Certificate details:
Common Name(s): mydomain.com
Expires At: 2016-03-12 19:06 UTC
Issuer: /OU=GT15485972/OU=See www.rapidssl.com/resources/cps (c)15/OU=Domain Control Validated - RapidSSL(R)/CN=mydomain.com
Starts At: 2015-03-10 14:14 UTC
Subject: /OU=GT15485972/OU=See www.rapidssl.com/resources/cps (c)15/OU=Domain Control Validated - RapidSSL(R)/CN=mydomain.com
SSL certificate is verified by a root authority.
DNSの設定
herokuに証明書を追加するとSSL対応のホスト名、****.herokussl.comが付与されるので、ターゲットのドメインにAliasレコードとして設定しました。
4. Railsの設定でAlways On SSL
Railsアプリケーション上の通信を常にSSLでおこうなう
特にそうしない理由はなく、Googleも強く推奨しているし、そもそものセキュリティ確保とそれ以外にもメリットがあるので、せっかくなのでこの設定を追加しておいたほうがよさそうです。
config/environments/production.rb
config.force_ssl = true
参考
- HTTPS をランキング シグナルに使用します
http://googlewebmastercentral-ja.blogspot.jp/2014/08/https-as-ranking-signal.html - SEOにも影響するWebページ全体HTTPS化(常時SSL)の効果と実装のポイント
http://web-tan.forum.impressrd.jp/e/2015/01/19/18932
やってみて
多少のお金で、デプロイ環境含めてインフラをそれぞれ切り離して考えられるのは思っていた以上にメリットがあると感じました。
正直スケールできることのメリットは、その必要に迫られたときしかわからないので、必要に迫られるように頑張っていこうと思います。
他にも、落とし穴と言われることもあるようですが、多少は頭ぶつける覚悟で対応していきます。