1
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/37b827343cd1128c3c0e

手順

1.Gemfileを下記の記述をする。

group :development, :test do
  gem 'capistrano'
  gem 'capistrano-rbenv'
  gem 'capistrano-bundler'
  gem 'capistrano-rails'
  gem 'capistrano3-unicorn'
end

忘れず実行する。

$ bundle install

2.bundle exec cap install を実行し、ファイルを作成する

$ bundle exec cap install

3.Capfileに以下を記述する。

require "capistrano/setup"
require "capistrano/deploy"
require 'capistrano/rbenv'
require 'capistrano/bundler'
require 'capistrano/rails/assets'
require 'capistrano/rails/migrations'
require 'capistrano3/unicorn'

Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r }

4.production.rbを下記のように記述する
※書き換え部分は以下の5点です
・3行目のはご自身のバージョンを記述
・6行目の<自身のアプリケーション名>はご自身のものを記述
・9行目の/<レポジトリ名>も同様に、ご自身のもの記述
・15行目の<このアプリで使用しているrubyのバージョン>はご自身のものを確認して記述
・19行目の<ローカルPCのEC2インスタンスのSSH鍵(pem)へのパス>も同様に、ご自身のもの記述

production.rb

server '<用意したElastic IP>', user: 'ec2-user', roles: %w{app db web}

5.deploy.rbの記述をすべて削除し、以下を記述する

deploy.rb

lock '<Capistranoのバージョン>'
# config valid only for current version of Capistrano -->
# capistranoのバージョンを記載。固定のバージョンを利用し続け、バージョン変更によるトラブルを防止する

set :application, '<自身のアプリケーション名>'
# Capistranoのログの表示に利用する

set :repo_url,  'git@github.com:<Githubのユーザー名>/<レポジトリ名>.git'
# どのリポジトリからアプリをpullするかを指定する

set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', 'public/system', 'public/uploads')
# バージョンが変わっても共通で参照するディレクトリを指定

set :rbenv_type, :user
set :rbenv_ruby, '<このアプリで使用しているrubyのバージョン>' 

set :ssh_options, auth_methods: ['publickey'],
                  keys: ['<ローカルPCのEC2インスタンスのSSH鍵(pem)へのパス'] 
# どの公開鍵を利用してデプロイするか

set :unicorn_pid, -> { "#{shared_path}/tmp/pids/unicorn.pid" }
# プロセス番号を記載したファイルの場所

set :unicorn_config_path, -> { "#{current_path}/config/unicorn.rb" }
set :keep_releases, 5
# Unicornの設定ファイルの場所

after 'deploy:publishing', 'deploy:restart'
namespace :deploy do
  task :restart do
    invoke 'unicorn:restart'
  end
end
# デプロイ処理が終わった後、Unicornを再起動するための記述

6.unicorn.rbの記述を編集する

unicorn.rb
app_path = File.expand_path('../../', __FILE__)

worker_processes 1

working_directory app_path
pid "#{app_path}/tmp/pids/unicorn.pid"
listen "#{app_path}/tmp/sockets/unicorn.sock"
stderr_path "#{app_path}/log/unicorn.stderr.log"
stdout_path "#{app_path}/log/unicorn.stdout.log"

# ↓↓↓↓↓↓↓ 以下のように変更 ↓↓↓↓↓↓

app_path = File.expand_path('../../../', __FILE__)

worker_processes 1
working_directory "#{app_path}/current"

listen "#{app_path}/shared/tmp/sockets/unicorn.sock"
pid "#{app_path}/shared/tmp/pids/unicorn.pid"
stderr_path "#{app_path}/shared/log/unicorn.stderr.log"
stdout_path "#{app_path}/shared/log/unicorn.stdout.log"

7.エディタを起動させる

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

8.内容を削除し、下記の記述をし保存する

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

server {
  listen 80;
  server_name <Elastic IPを記入>;

  client_max_body_size 2g;

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

  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
    root   /var/www/<アプリケーション名>/current/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;
}

9.変更したら、再読み込み、再起動する(ec2-userログイン状態で)

$ sudo service nginx reload

$ sudo service nginx restart
    
$ sudo service mysqld restart
    

10.unicornのプロセスをkillする(ec2-userログイン状態で)

$ ps aux | grep unicorn

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

11.GitHubにプッシュする

12.自動デプロイする

$ bundle exec cap production deploy

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

1
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
1
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?