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を修正する
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.assets.js_compressor = :uglifier
Gemをインストールする
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を編集する
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を確認しましょう。