LoginSignup
16

More than 5 years have passed since last update.

AmazonLinuxにNginxとRailsをインストールして80番ポートからrailsに繋げる

Last updated at Posted at 2017-07-09

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の初期画面が表示されたら完了。

参考

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
16