LoginSignup
1
5

More than 3 years have passed since last update.

自動デプロイ Capistrano EC2 環境構築

Last updated at Posted at 2019-08-05

6dc39833855ffc6409888b12874167b9.png

Nginx(エンジンエックス)の導入と設定

Nginxとは?

簡単に言うとWebサーバの一種です。
参考: Nginxとは?Apacheとの違いについてエンジニアに聞いてみた

インストールする

ログインしていなければ先にログインしておきます。EC2の設定が終わっていない場合はこちらから進めていきましょう。
参考: AWS デプロイ 手動 画像で解説

$ cd .ssh/
$ ssh -i キーペアの名前.pem ec2-user@Elastic IP
[ec2-user@ip-000-00-00-00 ~]$ sudo yum install nginx

Nginxの設定ファイルを編集する

[ec2-user@ip-000-00-00-00 ~]$ sudo vim /etc/nginx/conf.d/rails.conf

i キーを押して変更モードに切り替えます。

upstream app_server {
  server unix:/var/www/アプリ名/tmp/sockets/unicorn.sock;
}

# {}で囲った部分をブロックと呼ぶ。サーバの設定ができる
server {
  # このプログラムが接続を受け付けるポート番号
  listen 80;
  #  下記にEC2のElastic IPに変更すること
  server_name Elastic IP;

# 接続が来た際のrootディレクトリ
  root /var/www/アプリ名/public;

# assetsファイル(CSSやJavaScriptのファイルなど)にアクセスが来た際に適用される設定
  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;
}

変更ができたら esc(エスケープキー) を押して :wq を入力してリターンキーで変更を保存します。

[ec2-user@ip-000-00-00-00 ~]$ cd /var/lib
[ec2-user@ip-000-00-00-00 lib]$ sudo chmod -R 775 nginx
Nginxを再起動して設定ファイルを再読み込みします
[ec2-user@ip-000-00-00-00 lib]$ cd
[ec2-user@ip-000-00-00-00 ~]$ sudo service nginx restart

unicorn.rbを修正する

config/unicorn.rb
listen 3000

↓以下のように変更しましょう

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

変更が完了すればmasterにpullして下記のコマンドを実行しましょう。

[ec2-user@ip-000-00-00-00 アプリ名]$ git pull origin master

ブラウザでElastic IPにアクセスする

Elastic IPにアクセスすると画面が表示されていると思います。
うまく表示できない場合はユニコーンを起動してください。

[ec2-user@ip-000-00-00-00 アプリ名]$ RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D

Capistranoで自動デプロイ

Capistranoとは

簡単にいうとオープンソースで提供されている、複数のサーバ上で同時にスクリプトを実行するためのソフトウェアツール。
いくつかの記事に目を通したい方は以下をご覧ください。
参考: (Capistrano編)世界一丁寧なAWS解説。
参考: Capistrano で Rails アプリケーションの自動デプロイ

Capistrano導入準備

こちらはやらなくても問題ありませんが、念の為書いております。
JavaScriptでリテラル記法(`)をしているときはエラーがでるので事前に対処しておくための記述になります。

config/environments/production.rb
こちらをコメントアウトします
# config.assets.js_compressor = :uglifier

Gemをインストールする

Gemfileに下記を追加しましょう。環境を間違えずにしてください。

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

追加できたらローカル環境で下記を実行します。gemを追加したらお決まりの作業なので忘れなく。

$ bundle install

続いてcapファイルのインストールをします。

bundle exec cap install

実行するといくつかファイルが生成されます。

capfile

Capistranoの機能を提供するコードはいくつかのライブラリ(Gem)に分かれています。
Capistranoを動かすにはいくつかのライブラリを読み込む必要があり、ライブラリの指定ができます。

deploy.rb/production.rb/staging.rb

このファイル達は、主にデプロイの設定を書いていくファイルになります。
Githubへの接続に必要なssキーの指定、デプロイ先のサーバのドメイン、AWSサーバへのログインユーザー名、サーバにログインしてからデプロイのために何をするか、といった設定を記載します。

Capfileを編集する

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 }

production.rbを編集する

server 'Elastic IP', user: 'ec2-user', roles: %w{app db web}

deploy.rbを編集する

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

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

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

# バージョンが変わっても共通で参照するディレクトリを指定
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のバージョン>' #カリキュラム通りに進めた場合、2.5.1か2.3.1です

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

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

# Unicornの設定ファイルの場所
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

capistranoのバージョンは、gemfile.lockを確認しましょう。

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