Rails5 on Nginx on CentOS7 環境構築 (4)

Webサーバー環境を設定します。

今回はPails5に標準搭載されたPumaをアプリケーションサーバーとして使用し、Nginxをリバースプロキシサーバーとして使用することにします。

nginx 環境構築

nginxをインストールします。

sudo su
yum -y install nginx
nginx -v

nginx version: nginx/1.10.2

nginxをスタートします。自動起動の設定もしておきます。

systemctl start nginx
systemctl enable nginx

サービス設定状態を見るにはこれで確認。前バージョンではchkconfig –listコマンドですね。

systemctl list-unit-files --type=service

Railsとの接続

NginxとPumaはUnix-socketで接続します。

動作確認にはRails5インストールで作成したサンプルアプリケーションを使用します。
まずはNginxの設定から、

vim /etc/nginx/conf.d/sample.conf
# pumaで生成した socket に接続
upstream backend {
    server unix:///home/sample/tmp/sockets/puma.sock;
}

server {
    listen 80;
    server_name sample;
    location / {
        proxy_pass http://backend/;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

構文チェックしてから再起動します。

nginx -t
systemctl restart nginx

次にPumaの設定ファイルにソケットにbindする設定を追加します。

vim /home/sample/config/puma.rb
# Unix-socketにbind
bind "unix:///home/sample/tmp/sockets/puma.sock"

pumaをデーモンで起動します。

bundle exec puma -C /home/sample/config/puma.rb -d

ブラウザから http://xxx.xx.xx.xx にアクセスしてみます。

さて、このpumaですが本格運用をするためには自動起動する必要があります。

systemdユニットを作成します。

vim /etc/systemd/system/puma.service
[Unit]
Description=Puma Application Server
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/home/sample
Environment=RAILS_ENV=development
ExecStart=/usr/local/rbenv/shims/bundle exec puma -C /home/sample/config/puma.rb
TimeoutSec=300
Restart=always

[Install]
WantedBy=multi-user.target

pumaをスタートしてみます。自動起動の設定もしておきます。

chmod +x /etc/systemd/system/puma.service
systemctl start puma.service
systemctl enable puma.service

reboot後にpumaデーモンプロセスが起動しているはずです。

phpとの接続

NginxとphpもUnix-socketで接続します。

まず最新のphpをインストールするためにRemiリポジトリを追加します。

yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

インストールします。

yum -y install --enablerepo=remi-php71 php php-cli php-common php-devel php-fpm php-gd php-mbstring php-mysqlnd php-pdo php-pear php-pecl-apcu php-soap php-xml php-xmlrpc

文字コード設定などを追加しておきます。

vim /etc/php.ini

追加設定例

error_log = /var/log/php_errors.log
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
mbstring.detect_order = auto
expose_php = off
date.timezone = Asia/Tokyo

PHPのFastCGIの設定を変更します。

vim /etc/php-fpm.d/www.conf
; プロセスのユーザー/オーナーをapacheからnginxに変更
;user = apache
user = nginx
;group = apache
group = nginx

; TCP接続からソケット接続に変更
;listen = 127.0.0.1:9000
listen = /run/php-fpm/php-fpm.sock

; リスナーソケットのユーザー/オーナーをnginxに設定
listen.owner = nginx
listen.group = nginx

構文チェックしてから起動します。

php-fpm -t
systemctl start php-fpm
systemctl enable php-fpm

Nginx側にテスト用ページの設定をします。

vim /etc/nginx/conf.d/test.conf
server {
    listen 80;
    server_name test;

    root /home/html;

    location / {
        index index.php;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
        include fastcgi_params;
    }
}

構文チェックしてから再起動します。

nginx -t
systemctl restart nginx

PHPテスト用ページを作成

vim /home/html/index.php
<html>
<head>
 <title>PHP Test</title>
</head>
<body>
<?php
 function show_text($text) {
 echo "$text<br>";
 }
 show_text("Hello PHP");
 show_text(phpversion());
?>
</body>
</html>

ブラウザから http://xxx.xx.xx.xx にアクセスしてみます。

これでRails5/PHP7 on Nginx on CentOS7 の環境構築まで完了しました。
次回はRailsアプリケーションのバージョンアップや、Let’s Encryptのサーバー引き継ぎなどです。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする