2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails+Docker+AWS】開発環境構築から本番公開まで(3/3 デプロイ編)

Last updated at Posted at 2021-06-17

(この記事は続きです)
なんだか結構苦労したので、自分の整理のためにも記事におこしました。
初学者でポートフォリオをとりあえず公開したい方は参考になるかもしれません。

完成図

Ruby 2.5.1
Rails 5.2.0
MySQL 5.7
qiita用のインフラ構成図.png

全部で3記事あります。
(1)開発環境構築編 https://qiita.com/obr-note/items/a923e7acf77652a6994e
(2)AWSコンソール画面編 https://qiita.com/obr-note/items/f897762b831b6f3c273c
(3)デプロイ編 この記事

ローカル作業

### docker-compose.ymlファイル修正
ローカルのターミナルで作業します。

$ cd ~/project/webapp
$ vim docker-compose.yml

データベースはRDSを使うので、コメントアウトします。

version: "3"
services:
  app:
    build:
      context: .
    env_file:
      - ./environments/db.env
    # command: bundle exec puma -C config/puma.rb
    command: bundle exec rails server -e production
    volumes:
      - .:/var/www/webapp
      - public-data:/var/www/webapp/public
      - tmp-data:/var/www/webapp/tmp
      - log-data:/var/www/webapp/log
  #   depends_on:
  #     - db
  # db:
  #   image: mysql:5.7
  #   env_file:
  #     - ./environments/db.env
  #   volumes:
  #     - db-data:/var/lib/mysql
  web:
    build:
      context: containers/nginx
    volumes:
      - public-data:/var/www/webapp/public
      - tmp-data:/var/www/webapp/tmp
    ports:
      - 80:80
    depends_on:
      - app
volumes:
  public-data:
  tmp-data:
  log-data:
  db-data:

GitHubへPush

githubにレポジトリを作成して、コードをpushしておきます。
レポジトリがprivateだと、後でgit cloneするとき面倒なので、publicにしておきます。
セキュリティ的なことはよく知らないです。
https://github.com/
github.png

$ cd ~/project/webapp
$ git add .
$ git commit -m 'modified docker-compose.yml'
$ git remote add origin https://github.com/ユーザー名/webapp
$ git push origin master

EC2での作業

EC2のパブリックIPv4アドレスをコピーしておきます。
ec209.png

$ ssh -i ~/.ssh/webapp-ec2.pem ec2-user@xxx.xxx.xxx.xxx # EC2のパブリックIPv4アドレス

DockerをEC2にインストール

[ec2]$ sudo yum install -y docker
[ec2]$ sudo service docker start
[ec2]$ sudo usermod -G docker ec2-user
[ec2]$ exit
$ ssh -i ~/.ssh/webapp-ec2.pem ec2-user@xxx.xxx.xxx.xxx
[ec2]$ docker info

なんかいろんな情報が出てくればOKです。

docker-composeをインストール

[ec2]$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
[ec2]$ sudo chmod +x /usr/local/bin/docker-compose
[ec2]$ docker-compose -v

フォルダ作成

[ec2]$ sudo mkdir -p /var/www
[ec2]$ sudo chown ec2-user:ec2-user /var/www # 現ユーザーに権限付与

MySQLでデータベース作成とユーザーへ権限付与

RDSのエンドポイントをコピーしておきます。
rds.png

[ec2]$ mysql -u admin -p -h webapp-db.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com # RDSのエンドポイント
Enter password: admin_password
mysql> create database webapp_production;
mysql> create user db_user identified by 'db_password';
mysql> grant all privileges on webapp_production.* to db_user@'%';
mysql> quit

GitHubからコードをクローンする

[ec2]$ sudo yum -y install git # gitをインストール
[ec2]$ cd /var/www
[ec2]$ git clone https://github.com/ユーザー名/webapp.git

データベースのアクセス情報を書き換え

(簡単にするために、この記事では直接書き込んでいます。セキュリティとかに問題があるらしいので、環境変数とか使うらしいです。知らないです。)

[ec2]$ cd /var/www/webapp
[ec2]$ vim config/database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILES_MAX_THREADS") { 5 } %>
  username: <%= ENV.fetch("MYSQL_USER") { 'root' } %>
  password: <%= ENV.fetch("MYSQL_PASSWORD") { 'password' } %>
  host: db

development:
  <<: *default
  database: webapp_development

test:
  <<: *default
  database: webapp_test

production:
  <<: *default
  host: webapp-db.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com # RDSのエンドポイント
  database: webapp_production
  username: db_user
  password: db_password

Dockerイメージの作成

[ec2]$ cd /var/www/webapp
[ec2]$ docker-compose build # 数分かかります
[ec2]$ docker images

credentials.yml.encの設定

ここら辺はよく分からないけど、とりあえずcredentials.yml.encファイルを消して開いて閉じます。これで、作成されたmaster.keyと対応するらしいです。

[ec2]$ rm config/credentials.yml.enc
[ec2]$ docker-compose run -e EDITOR="vim" app bundle exec rails credentials:edit
(特に何も編集せずに、保存して閉じる(:wq))

マイグレーション

[ec2]$ docker-compose run app bundle exec rails db:migrate RAILS_ENV=production

プリコンパイル

[ec2]$ docker-compose run app bundle exec rails assets:precompile RAILS_ENV=production

dockerコンテナ立ち上げ

[ec2]$ docker-compose up -d

お疲れ様でした。
多分本番公開できていると思います。
EC2のパブリックIPv4アドレスにブラウザからアクセスしてみてください。
※ SSH認証していないので、http://xxx.xxx.xxx.xxxとなります。https://は使えません。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?