Docker+RailsをAWSへデプロイするまでの道のり
AWS上にデプロイできる環境を準備する。
ある程度わかるよ〜という人は以下を参考に設定する
【Rails AWS Docker】既存Ruby on Rails + MySQLアプリをDockerで構築し、AWSにデプロイする(1) - Qiita
AWS全くわからないなら以下を参考にデプロイ編①
の8.EC2へのログイン
まで設定する。
yum install の部分はとばす。
(下準備編)世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで - Qiita
EC2を作成した後にsshでEC2にログインして以下を参考にswapを作成する。
(EC2のt.microインスタンス(無料枠)では bundle installで CPU使用率が100%になってしまい、EC2が動作を受け付けてくれなくなる場合がある)
【Linux】スワップ領域の作成 - Qiita
bundle installのjobsの設定は1もしくは指定しないほうが良い(t.microのCPUは1GBのためすぐにCPU使用率100%になる)
ただしswapを容易に作成するのはよろしくないので注意が必要
まぁ…スワップ使い始めると劇的にパフォーマンスが落ちるので、足りなくなったらメモリ増やすなり、AutoScalingなりでインスタンス数を増やせってことなんだと思いますが...
[Linux] スワップ領域を作成する
ハードディスクへのアクセスは遅いので、スワップアウトが多発するとパフォーマンスの低下に繋がります。どうしてもメモリが足りない場合、SWAP領域を利用します。
Linux|SWAP領域の確認と作成 - わくわくBank
メモリが足りないとコマンド自体がうまく動かなかったり、サービスがメモリ不足でkillされたりすることがあるので、スワップ領域は欲しいところです。
スワップファイル(swap)を作成して有効にする – CentOS/Rocky Linuxサーバ構築術 文具堂
EC2にdockerをインストールする場合は以下のコマンドを使用した
sudo amazon-linux-extras install docker -y
それ以降は以下を参考に dockerの起動、EC2起動時のdocker自動起動、docker-composeのインストールを行った
【Rails AWS Docker】既存Ruby on Rails + MySQLアプリをDockerで構築し、AWSにデプロイする(6) - Qiita
ちなみに私の場合は以下のように実行したらインストールされずdockerコマンドが使えなかった。
$ sudo yum install -y docker
#読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
#amzn2-core | 3.7 kB 00:00:00
#パッケージ docker は利用できません。
#エラー: 何もしません
#docker is available in Amazon Linux Extra topic "docker"
#To use, run
# sudo amazon-linux-extras install docker
#Learn more at
#https://aws.amazon.com/amazon-linux-2/faqs/#Amazon_Linux_Extras
$ docker -v
#-bash: docker: コマンドが見つかりません
Docker, docker-composeがインストールできたら以下を参考にEC2上からsshでGitHubに接続できるようにする
何回かdockerコマンドを実行していたら以下のログが表示された。
ERROR: Error processing tar file(exit status 1): write /vendor/bundle/ruby/2.7.0/cache/faker-2.19.0.gem: no space left on device
以下を参考にEC2のボリューム(EBS)の割り当てを増加する。
ちなみに1回ボリュームを増量してすぐに2回目のボリュームの増量はできない(最低6時間必要ぽい)
EC2 インスタンスの EBS ボリュームを拡張してみる | Wedding Park CREATORS Blog
原因は以下が分かりやすい
no space left on deviceとなった時の対応方法 - Qiita
RDSを使用する場合は以下を参考にすると良さそう
【初心者向け】RDS for MySQLを構築しEC2からアクセスしてみる | DevelopersIO
nginxの設定は以下を参考にした
Docker + Rails + Puma + Nginx + MySQL - Qiita
nginxの設定は以下が詳細にまとめてくれている
nginxについてまとめ(設定編) - Qiita
デプロイしたサイトで問題が発生しても開発環境のようにエラーを表示してくれない。
- 動作に問題(エラー)が生じた
以下を参考にしてエラーをslackへ通知するようにする
独自ドメインでサービスを運用する場合はAWS Route53を使用するのがよさそう
AWS Route 53を使って独自ドメインのWebページを表示させてみよう - Avintonジャパン株式会社
【画像付きで丁寧に解説】AWS(EC2)にRailsアプリをイチから上げる方法【その5〜ドメイン設定編〜】 - Qiita
SSL化(HTTPS化)するには以下を参考にするとよさそう
LetsEncryptを使用する
はじめる - Let's Encrypt - フリーな SSL/TLS 証明書
Dockerを使わない場合
【Ruby on Rails】Nginxとunicornを使ってHTTPS(SSL)対応する方法 | Y-hilite
AWS EC2にLet's Encryptを導入し、無料でSSL化する手順 | Enjoy IT Life
Dockerを使用した場合は以下が参考になりそう
Docker + Rails + Puma + Nginx(SSL) + MySQL - Qiita
docker環境のWebサーバーでLet's Encryptを使う - アクトインディ開発者ブログ
まずそもそもDocker+Railsのデプロイは以下のサイトを参考にした方がよさそう
無料!かつ最短?で Ruby on Rails on Docker on AWS のアプリを公開するぞ。 - Qiita
Route53を使用する場合は以下も参考にしたほうがよさそう
ACM、Route53、ALBの連携 | DevelopersIO
Route53+ACM+ALB+EC2でHTTPS接続するまで - Qiita
ECRを使う場合はruby の imageサイズ を気にした方がよいかも
Rubyのdistroless imageをmagicpakで構築できるのか? | うなすけとあれこれ
RailsのDockerイメージを一番小さくする方法 - Qiita
以下ではDistrolessについて紹介されているが、rubyでは結構大変みたい
軽量Dockerイメージに安易にAlpineを使うのはやめたほうがいいという話 - inductor's blog
Docker(alpineイメージ)+Railsで構成されているすごいわかりやすい記事
RailsのDockerイメージを一番小さくする方法 - Qiita
awsの設定をterraformでバックアップできそう
Terraformerを使用して既存のAWS環境をエクスポートする | zoo200's MemoMemo