🐳

初めてのAWSデプロイ備忘録(Rails)

2021/08/18に公開

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を導入しています。
以下は、Dockerfiledocker-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