Edited at

Apache上でRailsのアプリケーションを動かすためにやったこと

More than 1 year has passed since last update.

apache-logo.png

先日、8時間ほどかけて、RailsのアプリケーションをApache上で動くように設定した。Passengerを使うことでスムーズにRailsアプリを実行できると思いきや、いくつかハマってしまった点があったので、それらも含めて、簡潔にまとめておく。


環境

Rails : 5.1.6

OS : CentOS Linux release 7.4


Apache(アパッチ)とは

Apache HTTP Serverは、世界中でもっとも多く使われているWebサーバソフトウェアである。コンピュータにApache(Webサーバソフトウェア)を入れると、そのコンピュータはWebサーバとしての仕事ができるコンピュータになる。


Passengerとは

Passengerは、Railsアプリを実行するためのApacheモジュールで、Apache単独でRailsアプリケーションを実行できるようにするもの。


Apacheのインストール

yum(linuxのパッケージ管理システム)を使ってインストールを行う。Apacheはhttpdというパッケージ名で提供されているので、yum installコマンドにパッケージ名httpdを指定してインストールする。

$ yum -y install httpd


Passengerのインストール

passengerはgemからインストールする。

$ gem install passenger


ApacheにPassengerモジュールをインストール(連携)

$ passenger-install-apache2-module

上記のコマンドを実行すると、インストールに必要なモジュールのチェックが実行され、チェックの結果が表示される。インストール必要なモジュールがある場合、以下のような指示がなされてインストールが途中で終了する。


terminal.例

 * To install Curl development headers with SSL support:

Please run yum install curl-devel as root.


指示に従い、必要なモジュールをインストールする。

$ yum -y install curl-devel


もう一度コマンドを実行

$ passenger-install-apache2-module

が、、いつまでたってもインストールが終了しないので、『ctrl+c』でコマンドを強制終了。結論としては、仮想環境のLinuxに割り当てたメモリが少なかったことが原因だった。Linuxをシャットダウンして、Virtual Boxでメモリ割り当ての設定を500MBから1000MBに変更し、再度実行。

参考:VirtualBox - 仮想マシンのメモリ容量を変更

インストールがうまく進むと、以下のような画面が表示されて一旦処理が止まる。


terminal.実行結果の一部

--------------------------------------------

Almost there!

Please edit your Apache configuration file, and add these lines:

LoadModule passenger_module /home/vagrant/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/passenger-5.1.4/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
PassengerRoot /home/vagrant/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/passenger-5.1.4
PassengerDefaultRuby /home/vagrant/.rbenv/versions/2.4.1/bin/ruby
</IfModule>

After you restart Apache, you are ready to deploy any number of web
applications on Apache, with a minimum amount of configuration!

Press ENTER when you are done editing.

--------------------------------------------


上記の

LoadModule passenger_module /home/vagrant/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/passenger-5.1.4/buildout/apache2/mod_passenger.so

<IfModule mod_passenger.c>
PassengerRoot /home/vagrant/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/passenger-5.1.4
PassengerDefaultRuby /home/vagrant/.rbenv/versions/2.4.1/bin/ruby
</IfModule>

の部分が、Apache設定ファイルへの追記に必要なのでメモしておく。


Apacheの設定


passenger.confの設定

passenger-install-apache2-moduleで出てきた情報(先ほどメモした情報)を、apacheのconfigに記述。(ディレクトリ(/etc/httpd/conf.d/)にpassenger.confファイルとして記述)※passenger.confファイルは新規に作成する。

$ vi /etc/httpd/conf.d/passenger.conf


/etc/httpd/conf.d/passenger.conf

LoadModule passenger_module /home/vagrant/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/passenger-5.1.4/buildout/apache2/mod_passenger.so

<IfModule mod_passenger.c>
PassengerRoot /home/vagrant/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/passenger-5.1.4
PassengerDefaultRuby /home/vagrant/.rbenv/versions/2.4.1/bin/ruby
</IfModule>


httpd.confの設定

ServerNameを変更しておく。

$ vi /etc/httpd/conf/httpd.conf


/etc/httpd/conf/httpd.conf

ServerName localhost:80

#自分のサーバのドメインやIPアドレスに変更



Apacheのバーチャルホストを指定

rails.confファイルに、DocumentRoot(Railsのファイルへのパス)やポート番号を記述。


/etc/httpd/conf.d/rails.conf

<VirtualHost *:80>

ServerName localhost:80
# 自分のサーバのドメインやIPアドレスに変更

DocumentRoot /home/vagrant/rails_app/public
#DocumentRootは、各自Railsアプリケーションのpublicが置かれているパスを記述。

RailsEnv development
PassengerEnabled on
ErrorLog /var/log/httpd/error_log
CustomLog /var/log/httpd/access_log combined
AddDefaultCharset UTF-8

<Directory /home/vagrant/rails_app/public>
#Directoryも同じく、Railsのpublicが置かれている場所のパスを記述

AllowOverride all
Require all granted
Options -MultiViews
</Directory>

</VirtualHost>


※ここで、Directoryのパスを記述するのを忘れていて、「Apacheは正常に起動しているのに、ブラウザでRailsのアプリケーションを表示できない」と2時間ほどハマった。Firewallなどの設定を見直していたが、ディレクトリの場所が指定されていなかっただけだった。。


httpd.confの設定をチェック

Apacheを起動させる際、設定ファイルである「httpd.conf」に誤った記述があると、エラーが発生してApacheを起動することができないので、事前に文法エラーがないかどうかチェックを行う。

$ apachectl configtest

> Syntax OK


Apacheの起動

$ sudo systemctl start httpd.service

これで、localhost:80、もしくは「CentOS7で設定したIPアドレス:80」でRailsのアプリが表示されれば終了。※startの部分をrestartに変えると再起動、stopでApacheは停止する。


Apacheの自動起動を設定する

自動起動設定ON

$ systemctl enabled httpd.service

自動起動設定OFF

$ systemctl disable httpd.service

自動起動設定をONにしていると、CentOS7が起動すると、Apacheも自動で起動してくれるようになるので便利。


参考:

Apache上でRuby on Railsアプリケーションを動かす

Passenger のインストール、Apacheとの連携

CentOS 7 サービス自動起動設定