Railsアプリをデプロイするまでの備忘録として書き留めています。
ゴールは、開発環境のCloud9からAWSサービスを連携してデプロイすることです。
GitHubは使いません。

本記事のゴール

ゴールイメージ

ゴールイメージはシンプルです。

Cloud9でgitコマンドで本番環境へデプロイさせます。

今回は複数のAWSサービス(有料含む)を使用するため、本記事と同様の流れで進めていくと費用がかかる可能性があります、あらかじめご了承ください。

ゴールイメージを実現させるために、具体的には下記図の構成を目指します。

EC2(本番環境)
ruby 2.6.6
Rails 6.1.3.2
Web Server Nginx
Application Server Unicorn
database MySQL
EC2(開発環境)
ruby 2.6.6
Rails 6.1.3.2
AWS Cloud9
database MySQL

事前共通認識

記事の中で出てくる単語を紹介します。
DC … デンタルクラウドの頭文字で、筆者が開発中のWebサービスです。
DC_product … DCのアプリケーション名として捉えて頂ければと。
セキュリティグループやサブネットの名前としてDCやdcを使っています。

ドメイン取得

ドメインは、お名前.comで取得しています。
これから進める場合、何かドメインを取得しておいてください。

記事の流れ

各パート毎で記事を分けております。
上から順番に進めていくとRailsアプリをデプロイすることができます。(たぶん)

目次

1 AWS環境構築①
┝ VPC
┝ サブネット
┝ インターネットゲートウェイ
┝ ルートテーブル
┝ セキュリティグループ
└ データベース

2 AWS環境構築②
┝ EC2インスタンス
┝ Elastic IP
└ ロードバランサー

3 本番環境構築
┝ ssh接続
┝ 各種パッケージのインストール
┝ MySQLインストール
┝ Nginxインストール
┝ マスターキー設定
└ 時間設定

4 デプロイ(CodeCommit編)
┝ リポジトリ作成
┝ 接続ステップ①
┝ 接続ステップ②
┝ 接続ステップ③
└ 接続ステップ④

5 デプロイ(CodeDeploy・CodePipeline編)
┝ 事前準備
┝ CodeDeploy
└ CodePipeline

6 ドメイン設定&HTTPS化
┝ ドメイン設定
┝ HTTPS化
└ 最後に

7 Appendix ~ よく使うコマンド集 ~
┝ ターミナル(ssh接続時)
┝ ターミナル(共通)
└ ターミナル(Cloud9)

8 Appendix ~ エラー対応記録 ~
┝ 本番環境構築時の一部始終
┝ デプロイ時のエラー
└ デプロイ後のエラー

注意事項

・本記事では、本番環境のEC2でec2-userを使用しておりますが、セキュリティ的に宜しくないので、運用時は別ユーザーを作って設定してください。
・費用がかかる可能性があります、不要になったらサービス停止等行ってください。
・何か気づいた事、ご意見等ありましたら、Twitterまでご連絡いただけると大変助かります🙏

筆者より

ここまで読まれた、ということは、割と興味を持ってくれている方ですね。
ご覧いただきありがとうございます。嬉しいです。

Railsアプリを、AWSだけで開発〜デプロイまで一貫して行いたいものの、紹介している記事がなかなかないですよね。。
筆者がちょうど新しいサービスのデプロイを試みようとしたタイミングだったため、実際に自分自身でも勉強しながら、アウトプットして、世の中に少しでも貢献できたら、という思いで記録を取り始めました。

今回の設計でデプロイできれば、サービスが今後スケールしたときに、必要な分だけサーバー環境を増築することができます。

例:サービスのトラフィックが増えたため、サーバーをすぐに増やして対応したい
  => EC2インスタンスを追加して、ALBで分散できます。

例:デプロイ中に本番環境を停止させないといけない
  => CodeDeployのLoad balancerを使えば、停止させずにデプロイできます
  ※EC2インスタンス2つ以上必要

最初は慣れないかもしれませんが、デプロイ頑張りましょう!
作業は大変ですが、デプロイして、HTTPSでドメイン名で接続できたときの達成感は格別です。

本記事を通して、少しでも参考になれば幸いです。

Special Thanks!!

進めていく中で複数のサイトの情報を参考にさせていただきました。
貴重な情報ありがとうございました。みなさまに感謝です。

Special Thanks