見出し画像

Docker×Rails×Nuxtデプロイの知識をまとめてみる

自身で制作しているアプリがある程度形になってきたのでデプロイしようと思います。

そのための事前学習として使う技術をまとめてみました。

開発環境で使っている技術

https://qiita.com/Shogo1222/items/8b8fc4c65632844a453f

Docker

画像1

仮想環境を構築するためのツール

https://engineer-life.dev/docker/

引用してざっくり説明すると

「あるアプリに必要な環境をOSレベルでパケージ化してま止めた箱」

メリットとしては

環境構築の難易度が下がる。

環境に依存せずに動作する。

そのため個人のPCの違いに関わらず同じ環境で作業することができます。

DockerCompose

画像2

コンテナ同士を一つのコマンドでどういう感じで動かすかを設定できるファイル

私の環境だと
 db→PostgreSQL
 api→Rails
 front→Nuxt

この3つのコンテナがあります。

これを3つ同時に起動してくれる便利なやつです。

docker-compose がないとそれぞれのコンテナをdocker-start dbなどして3つコマンドを打たなくてはならず、なおかつdb→api→front の順番で起動しなければならないので順番にも気をつけなければなりません。

この「コンテナをそれぞれを順番通りに全て起ち上げて」という処理をdocker-compose.ymlファイルに記述しておくと「docker-compose up」というコマンドで全部やってくれるというのがdocker-compose

PostgreSQL

画像3

今回使用するデータベース。

Userのデータなどを保存しておくところです

github

画像4

コードを保存しておき、かつ変更履歴の管理をしてくれるもの

CircleCI

これが私には全然馴染みが無いものでした

Saas型のCI/CDサービス。

SaaS型?
 
SaaSとは「Software as a Service」の略で、日本語だと「サービスとしてのソフトウェア」という意味です。従来パッケージソフトとして提供されていた機能が、クラウドサービスとして提供される形態のことであり、わかりやすくいうとSaaSはクラウドの一部です。

CI?
 
CIとは、Continuous Integrationのこと。「継続的インテグレーション」といいます。開発中にmaster(main)ブランチに頻繁に結合するプロセスです。1回の変更量を小さくして頻繁に結合しようよという感じ

CD?
 Continuous Delivery or Deploymentのこと。「継続的デリバリー/デプロイ」 継続的に「デプロイ可能な状態」にしようということです。

結局CircleCIって?

githubと連携してmainブランチにpushしたら勝手にテストをして勝手にデプロイ環境に反映してくれるシステム


ECR(AWSのサービスの一つ)

ECRとは Amazon Elastic Container Registry完全マネージド型のDockerコンテナレジストリのことを指します

今回はここにdockerのimageを保存します

柔軟に、コンテナーに、イメージを、登録出来るサービス

ECS


DockerComposeと同じようなオーケストレーションツール

開発環境ではDockerとDockerComposeを使っていましたが、本番環境ではECRとECSを用います。

ALB

Application Load Balancer

ロードバランサーって?
 Webサイトへのアクセス集中やサーバー故障などの場合でも、アクセス中の利用者に安定したサービス提供を継続可能にする機能
 
https://www.kagoya.jp/howto/it-glossary/network/loadvalancer/

https://www.wafcharm.com/blog/difference-between-alb-and-elb/

Route53

AWSアカウントにドメインを紐づけします。

ACM

Route53で登録したドメインに、証明書を発行でき、簡単に常時SSL化出来ます。SSL化っていうのは「http」じゃなくて「https」でアクセス出来るということ

terraform

引用:Terraformとは、HashiCorp社により開発されているオープンソースのインフラ自動構築ツールです。TerraformではAWSなどのクラウドサービス上のインフラリソース(例えばサーバやネットワークなど)をコードで定義します。

VPC

Amazon Virtual Private Cloud

上記記事引用:AZは、ap-northeast-1a、ap-northeast-1c、ap-northeast-1dといったように、複数のゾーンに分けられます。
これらのAZには、基本的には同じ内容のコピーが置かれます。もし、1aに災害が起こったときに、1cに置いてあるコピーにアクセス出来るように・・・といったような使い方がされます。

サブネットは、AZの中でさらに分けられたエリアのことです。サブネットはAZを跨ぐことができません。このサブネットに、EC2インスタンスなどを配置してネットワーク上にアサイン出来ます。すごい!
これらのサブネットには、みんなが見れるようにインターネットにアクセス出来るように設定したパブリックサブネットと、みんなが見れないようインターネットにアクセス出来ないように設定したプライベートサブネットという概念が存在します。

VPC>AZ>サブネットというレイヤーになっています。

東京ディズニーランドと、中国ディズニーランドがあって、東京が地震とかでいけなくなったら中国のディズニーランド行けるよねって感じの発想。トゥーンタウンとかがパブリックサブネットで、スタッフルームはプライベートサブネット。



この記事が気に入ったらサポートをしてみませんか?