0
0

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.

[AWS]デプロイ手順その②(デプロイ編)

Last updated at Posted at 2020-04-23

背景

その①の続きからの手順。

その①
https://qiita.com/ren0826jam/items/76c826c3c4c5af3c525d

その③
https://qiita.com/ren0826jam/items/22153a9e3def565c93f6

手順

1.EC2サーバのSSH鍵ペアを作成する(ec2-userログイン状態で)


$ ssh-keygen -t rsa -b 4096
# 入力を求められるがエンターで進む

2.SSH公開鍵を表示しコピーする(ec2-userログイン状態で)


$ cat ~/.ssh/id_rsa.pub

3.GitHubに移動し、設定の「SSh and GPG keys」に移動する

4.SSHkeysにタイトルを入力し、公開鍵をコピーしたら保存する。

5.Gemfileに以下を記述する

group :production do
  gem 'unicorn', '5.4.1'
end

忘れず実行する。

bundle install

6.config/unicorn.rbを作成し以下を記述する。

unicorn.rb

app_path = File.expand_path('../../', __FILE__)
# サーバ上でのアプリケーションコードが設置されているディレクトリを変数に入れておく

worker_processes 1
# アプリケーションサーバの性能を決定する

working_directory app_path
# アプリケーションの設置されているディレクトリを指定

pid "#{app_path}/tmp/pids/unicorn.pid"
# Unicornの起動に必要なファイルの設置場所を指定

listen 3000
# ポート番号を指定

stderr_path "#{app_path}/log/unicorn.stderr.log"
# エラーのログを記録するファイルを指定

stdout_path "#{app_path}/log/unicorn.stdout.log"
# 通常のログを記録するファイルを指定

timeout 60
# Railsアプリケーションの応答を待つ上限時間を設定

preload_app true
GC.respond_to?(:copy_on_write_friendly=) && GC.copy_on_write_friendly = true

check_client_connection false

run_once = true

  before_fork do |server, worker|
    defined?(ActiveRecord::Base) &&
      ActiveRecord::Base.connection.disconnect!

    if run_once
      run_once = false # prevent from firing again
    end

    old_pid = "#{server.config[:pid]}.oldbin"
    if File.exist?(old_pid) && server.pid != old_pid
      begin
        sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
        Process.kill(sig, File.read(old_pid).to_i)
      rescue Errno::ENOENT, Errno::ESRCH => e
        logger.error e
      end
    end
end

after_fork do |_server, _worker|
  defined?(ActiveRecord::Base) && ActiveRecord::Base.establish_connection
end

7.config/environments/production.rbの以下の記述をコメントアウトする

production.rb

config.assets.js_compressor = :uglifier

8.GitHubにプッシュする

9./var/wwwディレクトリを作成し、権限をec2-userに変更する。(ec2-userログイン状態で)


$ sudo mkdir /var/www/
# mkdirコマンドで新たにディレクトリを作成

$ sudo chown ec2-user /var/www/
# 作成したwwwディレクトリの権限をec2-userに変更

10.GitHubから、「Clone or download」をクリックしURLをコピーする

11./var/www/に移動し、コードをクローンする。(ec2-userログイン状態で)


$ git clone コピーしたURL

12.以下の手順でスワップ領域をを用意する(ec2-userログイン状態で)


$ cd
# ホームディレクトリに移動
$ sudo dd if=/dev/zero of=/swapfile1 bs=1M count=512
# 処理に時間がかかります

512+0 レコード入力
512+0 レコード出力
536870912 バイト (537 MB) コピーされました、 7.35077 秒、 73.0 MB/
# この様に表示されれば成功

$ sudo chmod 600 /swapfile1

$ sudo mkswap /swapfile1

スワップ空間バージョン1を設定します、サイズ = 524284 KiB
ラベルはありません, UUID=74a961ba-7a33-4c18-b1cd-9779bcda8ab1
# この様に表示されれば成功

$ sudo swapon /swapfile1

$ sudo sh -c 'echo "/swapfile1  none        swap    sw              0   0" >> /etc/fstab'
# 間が空いているがこの様に記述する

13.クローンしたリポジトリに移動する。(ec2-userログイン状態で)

14.ruby -v で、2.5.1と表示されているか確認(ec2-userログイン状態で)


$ ruby -v

15.bundler -v で、bundlerのバージョンを確認する(ローカル環境で)

$ bundler -v

16.本番環境用のbundlerをインストールし、bundle installする(ec2-userログイン状態で)


$ gem install bundler -v 確認したbundlerのバージョン

17.rake secret を実行して表示されたものをコピーする(ec2-userログイン状態で)

$ rake secret

18.sudo vim /etc/environment で環境変数を設定できる画面が出る。(ec2-userログイン状態で)

$ sudo vim /etc/environment

19.iを押すと入力モードになるため以下を記述

DATABASE_PASSWORD='MySQLのrootユーザーのパスワード'
SECRET_KEY_BASE='先程コピーしたsecret_key_base'

20.escキーで戻り、:wqを入力して保存します

21.環境変数を適用させるため一旦ec2-userをログアウトし、再びログインする

22.環境変数が適用されているか以下の手順で確認する


$ env | grep SECRET_KEY_BASE
# SECRET_KEY_BASE='secret_key_base'

$ env | grep DATABASE_PASSWORD
# DATABASE_PASSWORD='MySQLのrootユーザーのパスワード'

23.EC2インスタンスの選択画面で対象のインスタンスを選択し、セキュリティグループのリンクを選択

24.「インバウンド」→「編集」をクリック

25.モーダルが開き、ルールを追加をクリックし下記の条件を設定し保存する
タイプを「カスタムTCPルール」、プロトコルを「TCP」、ポート範囲を「3000」、送信元を「カスタム」「0.0.0.0/0」に設定

26.以下の手順でユニコーンを起動する(ec2-userログイン状態で)


$ cd /var/www/リポジトリ

$ bundle exec unicorn_rails -c config/unicorn.rb -E production -D

27.database.ymlを以下のように記述する(下3行が追記部分)

database.yml

production:
  <<: *default
 database: # それぞれのアプリケーション名によって異なる。これは編集しない
  username: root
  password: <%= ENV['DATABASE_PASSWORD'] %>
  socket: /var/lib/mysql/mysql.sock

28.GitHubにプッシュする

29.ec2-userログイン状態で現在のリポジトリに移動してから、プルする

$ git pull origin master

30.データベースを作成しマイグレーションを実行する(ec2-userログイン状態で)


$ rails db:create RAILS_ENV=production

$ rails db:migrate RAILS_ENV=production
# 上記でエラーが出る場合はMySQLが起動してない可能性があるため起動する

31.Railsを起動する(ec2-userログイン状態で)

$ bundle exec unicorn_rails -c config/unicorn.rb -E production -D

32.アセットコンパイルを実行する

$ rails assets:precompile RAILS_ENV=production

33.Unicornのプロセスを確認する

$ ps aux | grep unicorn

34.Unicornのプロセスを停止する

$ kill <確認したunicorn rails masterのPID>

35.Unicornが停止されているか確認する

$ ps aux | grep unicorn

36.再度Unicornを起動する

$ RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D

37.ブラウザで、http://<Elastic IP>:3000/にアクセスして確認

38.Nginxをインストールする(ec2-userログイン状態で)

$ sudo yum -y install nginx

39.rails.confファイルをvimで開く(ec2-userログイン状態で)

$ sudo vim /etc/nginx/conf.d/rails.conf

40.iを押すと入力モードになるため下記を記述し、保存する。(:wq)

upstream app_server {
  server unix:/var/www/<アプリケーション名>/tmp/sockets/unicorn.sock;
}

server {
  listen 80;
  server_name <Elastic IP>;
  client_max_body_size 2g;

  root /var/www/<アプリケーション名>/public;

  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  try_files $uri/index.html $uri @unicorn;

  location @unicorn {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://app_server;
  }

  error_page 500 502 503 504 /500.html;
}

41.nginxの権限を変更(ec2-userログイン状態で)

$ cd /var/lib
    
$ sudo chmod -R 775 nginx 

42.Nginxを再起動して設定ファイルを再読み込みする(ec2-userログイン状態で)

$ cd ~
    
$ sudo service nginx restart

43.unicorn.rbの記述を変更する

unicorn.rb

listen 3000

# ↓以下のように修正

listen "#{app_path}/tmp/sockets/unicorn.sock"

44.GitHubにプッシュする

45.ローカルの変更点を本番環境へ反映させる


$ cd /var/www/リポジトリ名
    
$ git pull origin master
    

46.Unicornを再起動させる

$ ps aux | grep unicorn
    
$ kill <確認したunicorn rails masterのPID>
    
$ RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D
    

47.ブラウザで確認する(Elastic IPでアクセス)

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?