AmazonLinuxが入ったEC2インスタンスを立ち上げてNginxとRuby on Railsをインストール&設定したので、その時の手順書です。
初期ログインユーザは ec2-user
で行っており、サーバのポートは80番と3000番(これは一時的な動作確認のため)を開けている前提です。
Nginxのインストールと自動起動設定
yumでnginxをインストールして立ち上げ、あとサーバが再起動した際に自動起動するように設定しておきます。
// インストール
$ sudo yum install -y nginx
// 自動起動設定
$ sudo chkconfig nginx on
// 起動
$ sudo service nginx status
nginx is stopped
$ sudo service nginx start
Starting nginx: [ OK ]
$ sudo service nginx status
nginx (pid 12200) is running...
ブラウザで http:// Public IPアドレス にアクセスしてnginxの初期画面が表示されればOK。
Ruby on Railsアプリケーションの構築
AmazonLinux ver2017.03に入っているrubyのバージョンは2.0.0であり、記事投稿時の最新版である2.4.1と比べて古い、しかしシステムのRubyに変更を加えたくないので、rbenvをインストールして2.4.1を使おうと思います。
rbenvとruby2.4.1のインストール
ec2-user
でsudoを使って作業しているとrbenvの初回起動時やrubyインストール時などにパーミッション関係のエラーが出るのが面倒なので、ここではrootユーザで作業します。
// rootユーザになる
$ sudo su -
#
// rubyのインストール必要な所々のソフトウェアをインストール
# yum -y install gcc-c++ glibc-headers openssl-devel readline libyaml-devel readline-devel zlib zlib-devel libffi-devel libxml2 libxslt libxml2-devel libxslt-devel sqlite-devel git
// rbenvをgit clone
# git clone https://github.com/sstephenson/rbenv.git /usr/local/rbenv
# git clone https://github.com/sstephenson/ruby-build.git /usr/local/rbenv/plugins/ruby-build
// /etc/profile.d/rbenv.shに以下の内容を記述
export RBENV_ROOT="/usr/local/rbenv"
export PATH="${RBENV_ROOT}/bin:${PATH}"
eval "$(rbenv init -)"
// ファイルの読み込み
# source /etc/profile.d/rbenv.sh
// rbenvのインストール確認とruby2.4.1のインストール
# rbenv --version
rbenv 1.1.1-2-g615f844
# rbenv install --list
(中略)
# rbenv install 2.4.1
Downloading ruby-2.4.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.bz2
Installing ruby-2.4.1...
Installed ruby-2.4.1 to /usr/local/rbenv/versions/2.4.1
# rbenv versions
* system (set by /usr/local/rbenv/version)
2.4.1
# rbenv global 2.4.1
railsのインストール
ruby2.4.1のインストールができたので、railsをインストールします。
// そのままrootユーザでやってます
# gem update --system
# gem install --no-ri --no-rdoc rails
# rbenv rehash
webappユーザの作成
railsアプリケーションを作成する前に、nginxとrailsアプリケーションを動かすユーザを作成しておきます。
// ここもrootユーザでやってます
# cp -p /etc/passwd /etc/passwd.ORG
# cp -p /etc/shadow /etc/shadow.ORG
# cp -p /etc/group /etc/group.ORG
# groupadd webapp
# useradd webapp -g webapp -d /home/webapp -s /bin/bash
# id webapp
uid=501(webapp) gid=501(webapp) groups=501(webapp)
webappユーザでrailsアプリケーションの作成
railsアプリケーションを作成します。
// webappユーザになる
$ sudo su - webapp
// アプリケーションの作成
$ rails new railsapp --skip-bundle
$ cd railsapp/
// このままだとjsの実行環境が無いと怒られたのでGemfileに `gem 'therubyracer'` を追記
$ echo 'gem 'therubyracer'' >> Gemfile
$ bundle config build.nokogiri --use-system-libraries
$ bundle install --path=vendor/bundle
$ bundle exec rails s -b 0.0.0.0
ブラウザで http:// Public IPアドレス:3000 にアクセスしてrailsの初期画面が表示されたらOK。
nginxからpumaに接続するように設定
pumaの設定と起動
nginxからunix socketを使って接続するためにpumaの設定ファイルに設定を記載します。
echo 'bind "unix://#{app_root}/tmp/sockets/puma.sock"' >> config/puma.rb
pumaをデーモンとして実行。
$ bundle exec puma -d -C config/puma.rb
nginxの設定と再起動
ここはsudo
を使うためにec2-userでやってます。
nginxの実行ユーザをrailsアプリケーションの実行ユーザと同じwebappに変更。
$ sudo vim /etc/nginx/nginx.conf
- user nginx;
+ user webapp;
/etc/nginx/conf.d/webapp.conf
に設定を記載。
upstream railsapp {
# Path to Puma SOCK file, as defined previously
server unix:///path/to/railsapp/tmp/sockets/puma.sock fail_timeout=0;
}
server {
listen 80;
server_name サーバ名;
root /path/to/railsapp/public;
try_files $uri/index.html $uri @railsapp;
location / {
proxy_pass http://railsapp;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
}
error_page 500 502 503 504 /500.html;
client_max_body_size 4G;
keepalive_timeout 10;
}
/var/lib/nginx
にファイルが有るとwebappユーザでnginxを起動した時にキャッシュ関係のエラーが出ることがあったので、ディレクトリのownerをwebappユーザに変更しておきます。
$ sudo chown -R webapp /var/lib/nginx
nginxを再起動。
sudo service nginx restart
Stopping nginx: [ OK ]
Starting nginx: [ OK ]
ブラウザで http:// Public IPアドレス にアクセスしてrailsの初期画面が表示されたら完了。
参考
- EC2(Amazon Linux)に Nginx をインストールしてBasic認証する | Developers.IO
- Rails5.0.0 + puma3.6 + nginx1.10.1連携 - Qiita
- rails5+puma+nginxで本番環境を構築してみる – 不動産屋のエンジニアリング日記
- Vagrant & VirtualBox上のUbuntuでRuby + Rails5 + Puma + Nginx - Qiita
- Rails 5 + Unicorn + Nginx 環境構築メモ(自動起動設定も) - Qiita
- Amazon LinuxにRuby on Rails環境構築(rbenv + ruby-build + Ruby 2.2.1 + Rails 4.2.1インストール) - Qiita
- rails5 + puma + nginx で AWSテスト環境を構築してみる - ウォンツテック
- ruby on rails - how to start puma with unix socket - Stack Overflow
- CentOS6.4でRuby2.0+Rails4+pumaデーモン+Nginx - Qiita
- ruby on rails - rails5, puma, nginxで繋げる事ができない。 - スタック・オーバーフロー
- Rails 4.2 + Unicorn + Nginx でアプリケーションサーバの構築 - Qiita
- CentOSでrbenv + Rails4 + puma + Nginxを使う - Qiita
- Rails5 on Nginx on CentOS7 環境構築