CentOS7にnginx+Unicorn+Ruby 2.2(rbenv)+Rails 4.2

  • 投稿日:
  • by
  • カテゴリ:

順番に入れていく。まだローカルでテストしてる段階なので、VPSに入れる時にはオプションとか変更するかも。

以下、特に断りがないかぎりバージョンは本記事公開時点の最新を選択。

CVMUプロジェクト自体、安定性より最新を重視してるので、さすがにdevelopment・canary・nightlyやβ版、RC版は使わないけど、正式リリースであれば出たばっかりのバージョンでもどんどん使っていくつもり。

※コマンドの先頭が「#」になってるものはroot権限が必要という意味で、実際はsudoでやってる場合もある。

Nginx

もちろんmainline(1.9.6)。

centos7 + nginx-mainline - Qiita

リポジトリ設定

/etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=1

インストール

# yum install --enablerepo=nginx nginx

開始

# systemctl start nginx.service

起動時開始設定

$ systemctl list-unit-files -t service | grep nginx
nginx.service                               disabled
# systemctl enable nginx.service
ln -s '/usr/lib/systemd/system/nginx.service' '/etc/systemd/system/multi-user.target.wants/nginx.service'
$ systemctl list-unit-files -t service | grep nginx
nginx.service                               enabled

ファイアウォールに追加

$ firewall-cmd --list-all
public (default, active)
  interfaces: enp0s3 enp0s8
  sources:
  services: dhcpv6-client ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:


# firewall-cmd --add-service=http --zone=public --permanent
success
# firewall-cmd --add-service=https --zone=public --permanent
success

# firewall-cmd --reload
success

$ firewall-cmd --list-all
public (default, active)
  interfaces: enp0s3 enp0s8
  sources:
  services: dhcpv6-client http https ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

設定

全体設定のほうは、とりあえずサーバートークン(ヘッダやエラーページのバージョン表示)OFFのみ変更。

/etc/nginx/nginx.conf
(略)
http {
    server_tokens off;
(略)

バーチャルサーバ(ホスト)の設定は、まずはこんな感じ。SSLに関しては別記事で。

/etc/nginx/conf.d/cvmu.conf
server {
    listen       80;
    server_name  cvmu.local;
    rewrite ^(.*) https://cvmu.local$1 permanent;
}
server {
    listen       443 default_server;
    server_name  cvmu.local;

    ssl                  on;
    ssl_certificate      /etc/nginx/ssl/cvmu_local/server.pem;
    ssl_certificate_key  /etc/nginx/ssl/cvmu_local/server.key;
    ssl_dhparam          /etc/nginx/ssl/cvmu_local/dhparam.pem;

    ssl_protocols        TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers          'kEECDH+ECDSA+AES128 kEECDH+ECDSA+AES256 kEECDH+AES128 kEECDH+AES256 kEDH+AES128 kEDH+AES256 DES-CBC3-SHA +SHA !aNULL !eNULL !LOW !kECDH !DSS !MD5 !EXP !PSK !SRP !CAMELLIA !SEED';
    ssl_prefer_server_ciphers   on;

    ssl_stapling on;
    ssl_session_cache    builtin:1000 shared:SSL:10m;
    ssl_session_timeout  10m;

    add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;';

    location / {
        root   /usr/share/nginx/html/cvmu_local;
        index  index.html index.htm;
    }

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}

rbenv+Ruby

2.2.3を入れる。本番では変わるかも(trunkは既に2.3)。

rbenv で ruby の環境を整える - Qiita

必要環境(※1)のインストール

# yum install -y gcc openssl-devel libyaml-devel libffi-devel readline-devel zlib-devel gdbm-devel ncurses-devel

rbenv/ruby-buildのインストール

$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

rbenv初期設定

~/.bashrcに追記

[[ -d ~/.rbenv  ]] && \
  export PATH=${HOME}/.rbenv/bin:${PATH} && \
  eval "$(rbenv init -)"

Rubyのインストール

$ rbenv install 2.2.3
$ rbenv global 2.2.3
$ ruby -v
ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-linux]

...やっぱりシステム全体に入れよう。

ということで「必須環境のインストール」の次からやり直す。

rbenvをシステムワイドにインストールする ≫ つくば日記(仮)

【Linux】CentOS6.5にrbenvをsudoで呼び出せるよう環境構築 | Web活

visudoの設定

# visudo
/etc/sudoers
(略)
Defaults    env_keep += "(略)"
Defaults    env_keep += "PATH RBENV_ROOT" ←追加
(略)
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/rbenv/bin:/usr/local/rbenv/shims ←rbenv関連のパスを追加

rbenv/ruby-buildのインストール

# git clone git://github.com/sstephenson/rbenv.git ${RBENV_ROOT}
# git clone git://github.com/sstephenson/ruby-build.git ${RBENV_ROOT}/plugins/ruby-build

rbenv初期設定

# rbenv init -
$ bash -c 'cat <<\__EOT__ >> ~/.bash_profile
export RBENV_ROOT="/usr/local/rbenv"
export PATH="${RBENV_ROOT}/bin:${PATH}"
eval "$(rbenv init -)"
__EOT__'

2つ目のコマンドは、rbenvを使いたいユーザーで実行。反映させるためにexec ${SHELL} -l

Rubyインストール

# rbenv install 2.2.3
# rbenv global 2.2.3
$ ruby -v
ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-linux]

Rails+Unicorn

本当は5を入れたいけどまだ出てないから4.2.4で。

Rails 4.2 + Unicorn + Nginx でアプリケーションサーバの構築 - Qiita

上記記事を参考に、最小限のテストプロジェクトを作って動かす。

まだMariaDBセットアップしてないから、DBはsqlite3。なのでsqliteの開発ライブラリを入れる。

# yum install sqlite-devel

あと、therubyracerでg++が足りなかったので追加でインストール。

# yum install gcc-c++

調べるまで知らなかったけど、Unicornってbundleでアプリごとに入れられるみたい。

てっきりPhusion Passengerみたいにシステムgemで入れるものだと思ってた。


ちょっと時間がなくて急ぎ足でごちゃごちゃっと入れちゃったから、nginxとUnicornのところは後日再確認して復習かな。

  1. ※1Suggested build environment