初めてのAWSデプロイ備忘録(Rails)
1年ほど前、プログラミングを勉強して数ヶ月の頃、AWSにRailsアプリをデプロイしようとして失敗して以来、AWSは触らなかったのですが、最近になってAWS関連の記事を色々読み漁っていたところ、「あれ、意外と簡単じゃね?」と思い、1年ぶりにチャレンジしてみたら割と簡単にできました🙆♂️
業務でAWSはまだ使わないような気がするので、今後忘れないためにもこの記事を書いています。
また、今回は最小限(?)の構成でデプロイします。
ちなみにAWSのデプロイ関連の良質な記事はかなりたくさんあるので、今回は参考記事の紹介と自分なりに行なった部分の解説のみにします。
大まかな流れと参考記事
流れ
以下は大雑把な全体の流れです。
1. AWSアカウントの作成
2. VPC、サブネット、ec2の作成
3. ssh接続しec2インスタンス内でgit cloneから環境構築
参考記事
VPC + EC2 + Docker でアプリケーションをデプロイする。
上記記事はNuxtアプリをデプロイしているのですが、記事内のdocker-compose up
するところまで同じです。まあ、ほぼ全部同じです。
自分なりに追加で行なったこと
Railsアプリケーションの場合はここからもうひと手間加えます。
まず、docker-compose up
して、Ipv4アドレス:3000にアクセスすると、アクセス自体はできるのですが、No detabase
のエラーが表示されます。(Dockerfileとかにrails db:create
記述してる場合は必要ないかも)
そこで、新しいターミナルを開いて、ssh接続したあと、
[ec2-user@ip~~~~ (cloneしたrailsアプリ名)]$ docker-compose exec web rails db:create
を実行してdbを作成。再びhttp://Ipv4アドレス:3000
にアクセスすると、
いつものrailsの画面が表示されました!!
これで完了です!
dockerについて
今回ec2でまたrails環境を作るのは面倒だったので、dockerを導入しています。
以下は、Dockerfile
とdocker-compose.yml
です。
FROM ruby:2.7.4
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs default-mysql-client vim
RUN mkdir /app
WORKDIR /app
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
RUN bundle install
COPY . /app
version: '3'
services:
db:
image: mysql:5.7
environment:
MYSQL_USER: user
MYSQL_ROOT_PASSWORD: password
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/app/
ports:
- 3000:3000
depends_on:
- db
volumes:
mysql_data:
dockerを導入している場合、docker-compose build
でどこでも簡単に環境を構築できるので楽です。
dockerでのrailsの環境構築はこちらの記事が非常にわかりやすかったです。
今回は以上となります。質問や間違いの指摘などがありましたらコメントお待ちしております。
ありがとうございました🙏
Discussion