Cent OSにRuby on Rails + puma + nginx の構成で環境を作ってみた

2018年7月4日水曜日

nginx puma Rails Ruby

t f B! P L

Cent OSにRuby on Rails + puma + nginx の構成で環境を作ってみた

準備

git のインストール

$ sudo yum install git

yum で必要なライブラリをインストール

$ sudo yum -y install openssl-devel readline-devel zlib-devel

rbenv のインストール

公式 git から clone します

$ cd /opt/
$ sudo git clone git://github.com/sstephenson/rbenv.git
$ sudo mkdir /opt/rbenv/plugins
$ cd /opt/rbenv/plugins
$ sudo git clone git://github.com/sstephenson/ruby-build.git

/etc/profile 設定

vi エディタ等で、/etc/profile に以下の3行を追加します。

export RBENV_ROOT="/opt/rbenv"
export PATH="${RBENV_ROOT}/bin:${PATH}"
eval "$(rbenv init -)"

以下のコマンドを入力して反映

$ source /etc/profile

rbenv にパスが通った事とバージョン確認

$ rbenv -v

rbenv を使用して Rubyのインストール

インストール可能な Ruby のバージョンを一覧表示

rbenv install -l

Ruby 2.3.1 をインストール

rbenv install 2.3.1

トラブルシューティング

以下のようなエラーが出る場合、Cent OS の libcurl が古い可能性があるので、
libcurlをアップデートする必要がああります。

error: failed to download ruby-x.x.x.tar.bz2

アップデート手順

Ciry-fanリポジトリの追加
sudo rpm -Uvh http://www.city-fan.org/ftp/contrib/yum-repo/city-fan.org-release-2-1.rhel6.noarch.rpm

*上記 URL 2018/6/14時点のものです、
バージョンアップ等で変わっている可能性があるため、以下のサイトで最新のURLを確認して下さい。
http://www.city-fan.org/ftp/contrib/yum-repo/

設定ファイル編集

追加したリポジトリが無効になっている場合、有効にします。 (enabled=0)

$ sudo vim /etc/yum.repos.d/city-fan.org.repo

[city-fan.org]
name=city-fan.org repository for Red Hat Enterprise Linux (and clones) $releasever ($basearch)
#baseurl=http://mirror.city-fan.org/ftp/contrib/yum-repo/rhel$releasever/$basearch
mirrorlist=http://mirror.city-fan.org/ftp/contrib/yum-repo/mirrorlist-rhel$releasever
#enabled=1
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-city-fan.org
–enablerepo=city-fan.org をつけてlibcurlをアップデートします。
$ sudo yum update --enablerepo=city-fan.org libcurl
以下のコマンドで正常にインストールされたか確認します

バージョンが変わっていれば、インストール成功です。

$ yum info libcurl

名前  : **libcurl**
アーキテクチャ  : x86_64
バージョン  : 7.60.0

Ruby 2.3.1をシステム標準のバージョンとして設定します
rbenv global 2.3.1
Rubyのバージョンを確認
ruby -v

Rails のインストール

gem のアップデート

gem のバージョンを確認します。

gem -v

gem のアップデートを行います。

環境によっては、管理者権限が必要な場合があります。

$ gem update --system

Rails のインストール

sqLite がインストールされている事を確認します。
以下のコマンドでバージョンが表示できればOKです。

$ sqlite3 --version

以下のコマンドで、Rails をインストールします。

$ gem install rails

~~ インストールが終わると以下のような表示があります~~
38 gems installed 

インストール後、バージョンを確認します。

$ rails --version

~~ バージョンの表示 ~~
Rails 5.2.0

Rails アプリケーションの作成

# ソースコードを格納するフォルダへ移動します
cd path/to/dir

# 以下のコマンドを実行してアプケーションを作成します
rails new アプケーション名

# 作成された Rails アプリケーションフォルダに移動します
cd アプケーション名

トラブルシューティング

アプリケーション作成中に、sqLite の箇所で以下のようなエラーが表示される事があります。

An error occurred while installing sqlite3 (1.3.13), and Bundler cannot continue.

sqlite-devel インストールされていない可能性があるため、
以下のコマンドでインストールします。

sudo yum install sqlite-devel

アプリケーションの再作成が必要な為、作成したフォルダを削除します。

rm -rf アプリケーションのディレクトリ

削除後、rails new アプケーション名 で Rails アプリケーションを再度作成します。


WEBサーバの起動

以下のコマンドを入力し、開発用 webサーバを起動します。

rails server

起動後、localhost:3000 にアクセスし、Rails の初期ページが表示されれば成功です。

nginx + puma + rails 連携

本番環境では、webサーバ + puma + rails で運用するのが一般です。
nginx + puma + rails の連携について記載していきます。

config/puma.rb の編集

以下の内容を、puma.rb の先頭に追記して下さい。

_proj_path = "#{File.expand_path("../..", __FILE__)}"
_proj_name = File.basename(_proj_path)
pidfile "/var/run/puma/rails_#{_proj_name}.pid"
bind "unix:/var/run/puma/rails_#{_proj_name}.sock"
directory _proj_path

nginx の conf ファイルを作成

## xxxx の部分はは、作成した Rails アプケーション名に変更してください。
upstream app {
 server unix:/var/run/rails_xxxx.sock;
}

## listen, server_name, root は環境に合わせて書き換えて下さい。
server {
    listen 3001;
    server_name 127.0.0.1;
    root /path/to/rails_app_root/public;
    try_files $uri/index.html $uri @app;

    location / {
        proxy_pass http://app;
        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 100m;
    keepalive_timeout 10;
}

nginx を再起動

sudo service nginx restart

sock ファイル格納ディレクトリ作成

config/puma.rb`で指定した名前のディレクトリを作成します。

mkdir /var/run/puma

puma の起動 (開発環境用)

puma -w 4

puma の起動 (本番環境用)

rails assets:precompile RAILS_ENV=production
SECRET_KEY_BASE=$(rake secret) RAILS_SERVE_STATIC_FILES=true 

トラブルシューティング

puma コマンドが見つからないエラーになった場合

rbenv の shims ディレクトリに、puma 用のプロキシシェルが存在するか確認します。

# cd /opt/rbenv/shims
# ls

上記で puma が存在しない場合、他のプロキシシェルをコピーして、
puma 用のプロキシシェルを作成します。

# 中身は同じなので、適当に ruby のプロキシシェルをコピー
# cp ruby puma

puma コマンドが正しく通るか確認するため、バージョンを表示

# puma -version

Puma starting in single mode...
* Version 3.11.4 (ruby 2.3.1-p112), codename: Love Song
* Min threads: 0, max threads: 16
* Environment: rsion

502 Gateway エラーになる場合

sock ファイルの所有者および、sock ファイルを格納しているディレクトリの所有者が
nginx を実行しているユーザでないと、正しく動作しない事があるので、
ファイルおよびディレクトリの所有者を変更してみて下さい。


スポンサーリンク

QooQ