(CI/CDまでの道6)2022/01/23に公開・約8,800字ツイートDockerRailsEC2techはじめに前回はRailsをProductionモードで起動しました。今回はEC2にDockerをインストールして、そのうえでProductionモードで起動して、独自のドメインで実際にアクセスできるところまでチャレンジしていきます。作成に利用するリポジトリはこちら注意このハンズオンでは以下の書籍を用います。安全で堅牢な本番環境のつくり方このハンズオンですべてインフラ環境構築の手順を画像付きで載せてもよかったのですが、ほぼこの本通りになってしまい、本を模写することになってしまい著作権に触れてしまう可能性があるためほぼ書籍通りに環境構築をおこないながら進めていきます。一部変更箇所があるのでそこだけ説明を別途入れたいと思います。EC2にドメインでアクセスできるような環境があればインフラ構築は飛ばしていただいて大丈夫です。本ハンズオンの構成は以下となります。上で説明した通り基本的には書籍通りにインフラ環境を行います。一部だけ変更がありますのでそこは説明を行います。AWSをはじめよう今回は関係ないのでスキップで大丈夫です。関係ないのでスキップで大丈夫です。ロードバランサーを用意しようここは一部修正を行います。書籍のハンズオンではNginxのポートを3000番で開いているためロードバランサーはEC2の3000番をみにいくように設定していますが、私たちの作成している環境はNginxが80番ポートで受け付けているのでターゲットグループ作成で3000と設定しているところを80に変更します。具体的な修正箇所は以下です。ここの80は変更せずターゲットグループを作成します。このように設定をします。belowでしっかりと登録してからターゲット登録するのを忘れないようにしてください。3000をしていますが、これは今回80番ポートにしたので動作確認はできません。その代わりに実際にデプロイして確認します。データベースサーバーを用意しよう基本的には書籍通りです。データベースのパスワードに関してはこのハンズオンではpasswordにしたいと思います。あとで.envにこのパスワードを設定しますが、passwordとしましたので各自読み替えて設定してください。9章以降についてこれ以降で行う必要があるのは10章のみとなりますが、これはデプロイ後に行いますので9章まで行ったらデプロイにチャレンジします。15章はこのハンズオンには不要です。EC2にデプロイするまずはWebサーバー(web01)にssh接続します。web01)を行ったあとにWSL2で多段階接続するといけました。Windows環境との競合などが発生しているようです。以下の記事を参考にEC2にDocker、docker-compose、Gitをインストールしていきます。git次にGitから作成したDocker環境をクローンしてきます。https://github.com/jinwatanabe/CICD_RoadVSCodeのリモートSSHを利用してweb01のCICD_Road/chapter05にはいります。web01のCI_CD_Road_4となっていますが、皆様の画面ではCICD_Roadとなっているかと思いますリモートSSHについては以下を参考に入れてみてください。上で開発するCICD_Road/chapter05のディレクトリに移動します。config/credentials.yml.encを削除します(ない場合は省略)前回作成したconfig/credentials.yml.encとconfig/master.keyをconfig/にコピーします。以下の記事を参考にProductionモードをEC2ように修正していきます。EC2上でRailsアプリケーションにDockerを導入する(Rails、Nginx、RDS)まずは.envの内容を以下に変更します。.envDB_USERNAME="admin"DB_PASSWORD="password"DB_HOST="RDSのエンドポイント名"DB_DATABASE="myapp"RDSのエンドポイント名のところには、書籍のP178で確認したエンドポイントを入れてください。次にDBのProduction時の設定を変えます。config/database.ymlのproduction部分を以下に修正します。%>今回はRDSを利用するのでdocker-compose.production.ymlのDBに関する部分をコメントアウトします。log-data:次にNginxの設定をします。containers/nginx/nginx.confのserver_nameを変更します。#修正(省略)Web01のプライベートIPをいれます。Web02の場合はWeb02のプライベートIPをいれます次にコンテナを起動するための準備としてコンパイルとDB作成(Web01とWeb02で共有しているのでWeb01でやる1回でOK)を行います。Dockerコマンド、docker-composeコマンドはすべてsudoで実行する必要があります。up実際にデプロイが成功しているか踏み台サーバーbastionから確認します。別のターミナル(Powershellなど)を開きbastionにssh接続して確認します。[web01のプライベートIP]/test以下のように出力されていればうまくデプロイができています。type='button'>Bootstrap適応</button>こんにちは/testがないとproductionモードでは404エラーになります。(万歳画面はなくなるので)ここまでできたら、Web02に関しても同じ手順でコンテナを起動します。nginx.confのプライベートIPをWeb02のプライベートIPにして、DB作成は行わないが違う点です。独自ドメインとDNSを用意しようを行います。こちらも書籍通りに行います。Webサイトを確認するhttps://www.自分のドメイン/testにアクセスしてページが表示され、CSSやJavascriptが適応されていれば成功です。JavascriptのアラートはChoromeだと最初の1回のみしか(リロードでは)表示されませんので注意してください。Choromeをすべて閉じてから再度開いてくださいChromeでアラートが表示されないときの対処方法/testを忘れるとNginxのエラー画面になるので注意してください。おわりに作成したものはこちらのリポジトリに用意しています。デプロイができるようになりました。この状態ではコンテナを差し替えるときに起動までの時間ユーザーに利用できない時間ができたり、手間がかかったりと問題は多いので次はコンテナに適したデプロイにチャレンジしていきたいです。Tokyo.バッジを贈って著者を応援しようバッジを受け取った著者にはZennから現金やAmazonギフト券が還元されます。データベースサーバーを用意しよう9章以降についてEC2にデプロイするドメインを登録するWebサイトを確認するおわりに参考Zennエンジニアのための情報共有コミュニティAboutZennについて運営会社お知らせ・リリースGuides使い方Publicationよくある質問LinksTwitterGitHubメディアキットLegal利用規約プライバシーポリシ。