【備忘録】CentOS7 + apache + passengerで「rails6」の構築をする

★環境
 OS:CentOS 7
 Webサーバー:Apache/2.4.6
 rbenv:1.2.0-6-g304cb7b
 ruby:3.0.3p157
 Rails:6.1.4.1
 passenger:6.0.12
 nodejs:11.15.0
 yarn:1.22.17
 sqlite:3.8.11

目次

SELinuxを無効にする

apacheがpassengerのモジュールを読み込む際、SELinuxが有効だとエラーになる可能性があります。

まずは無効にしておきます。

※管理者権限で実行します

setenforce 0

上記コマンドで一時的に無効に出来ますが、再起動しても無効にするには、以下の内容を書き変えます。

vi /etc/selinux/config
#SELINUX=enforcing
SELINUX=disabled

パッケージのインストール

必要なパッケージをインストールします。

※管理者権限で実行します

パッケージのアップデート

yum update

パッケージインストール:各種必要なパッケージ

yum install gcc gcc-c++ glibc-headers openssl-devel readline libyami-devel readline-devel zlib zlib-devel bzip2

パッケージインストール:git

yum install git

パッケージインストール:apache

yum install httpd httpd-devel curl-devel

パッケージインストール:sqlite

wget https://kojipkgs.fedoraproject.org//packages/sqlite/3.8.11/1.fc21/x86_64/sqlite-devel-3.8.11-1.fc21.x86_64.rpm

wget https://kojipkgs.fedoraproject.org//packages/sqlite/3.8.11/1.fc21/x86_64/sqlite-3.8.11-1.fc21.x86_64.rpm

yum install sqlite-3.8.11-1.fc21.x86_64.rpm sqlite-devel-3.8.11-1.fc21.x86_64.rpm

※「yum install sqlite-devel」でインストールすると、現時点(2021.12.10)でバージョン違いによるエラーが発生します。

Your version of SQLite (3.7.17) is too old. Active Record supports SQLite >= 3.8.

Extracted source (around line #328):
def check_version # :nodoc:
if database_version < “3.8.0”
raise “Your version of SQLite (#{database_version}) is too old. Active Record supports SQLite >= 3.8.”
end
end

rails6のRuntimeError

パッケージインストール:nodejs

yum install https://rpm.nodesource.com/pub_11.x/el/7/x86_64/nodesource-release-el7-1.noarch.rpm

yum install nodejs

npm install -g yarn

ディレクトリへの権限・所有設定

※管理者権限で実行します

chmod -R 777 /var/www/html/

chown -R apache:apache /var/www/html/

rbenvをインストールしてpathを通す

※ユーザー権限で実行します
 これをroot権限で実行すると、後にpassengerモジュールを使用する際にpermissionエラーになる可能性があります

git clone https://github.com/sstephenson/rbenv.git ~/.rbenv

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

echo '# rbenv' >> ~/.bash_profile

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile

echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

exec $SHELL --login

rbenvでrubyをインストール

※ユーザー権限で実行します

rbenv install --list

インストール可能なリストが表示されます。

今回は「3.0.3」をインストールします

rbenv install 3.0.3

rbenv global 3.0.3

Ruby on Rails6をインストール

※ユーザー権限で実行します

gem install rails

ファイアーウォールを設定

※管理者権限で実行します

ファイアーウォールで必要なポートを開けてリロードします。

※今回はhttp(80番ポート)、https(443番ポート)、テスト用の8080番ポートと3000番ポートを開けます

firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --permanent --zone=public --add-port=8080/tcp
firewall-cmd --permanent --zone=public --add-port=3000/tcp

firewall-cmd --reload

apacheのサービスの起動と自動起動

※管理者権限で実行します

apacheのサービスを自動起動し、ついでにサービスも起動します。

systemctl enable httpd.service
systemctl start httpd

rails6アプリを生成

※ユーザー権限で実行します

この場合は「/var/www/html」にrailsアプリ「rails6_app」を生成します。

生成したら「rails c」と「rails s」が実行できればOKです。

cd /var/www/html

rails new rails6_app

cd rails6_app/

rails c

rails s

passengerのインストール

※ユーザー権限で実行します

gemコマンドでpassengerをインストールします。

「passenger-install-apache2-module」を実行し、全てEnterを押します。

必要なパッケージがない場合は教えてくれるので、それを実行します。
 ※以下に紹介してます

gem install passenger

passenger-install-apache2-module

パッケージが揃ったら「passenger-install-apache2-module」を再び実行します。

OKなら暫く時間が経って完了します。

環境に応じて、以下のapacheに記述する内容が出力されますのでメモしましよう。
 ※実行環境毎に異なります

   LoadModule passenger_module /home/masa/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/passenger-6.0.12/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /home/masa/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/passenger-6.0.12
     PassengerDefaultRuby /home/masa/.rbenv/versions/3.0.3/bin/ruby
   </IfModule>

passengerをインストールする際に必要なパッケージのインストール例

※必要なパッケージが「passenger-install-apache2-module」の結果揃っていれば、インストールする必要はありません

#「curl-devel」のインストール
$ yum install curl-devel
 
#「httpd-devel」のインストール
$ yum install httpd-devel
 
#「apr-devel」のインストール
$ yum install apr-devel
 
#「apr-util-devel」のインストール
$ yum install apr-util-devel

passengerインストールの参考

俺の開発研究所
Linux(CentOS)のApache+PassengerでRuby on Railsを動かす Linux(CentOS)のApache+PassengerでRuby on Railsを動かす手順を紹介します。

apacheに設定を記述してサービス再起動

※管理者権限で実行します

先程出力されたapacheの記述をconfに書きます。

ここでは「/etc/httpd/conf/httpd.conf」のデフォルトを書き換えます。

# デフォルトのドキュメントルートをコメントアウト
#DocumentRoot "/var/www/html"

# 先程出力された設定を記載
LoadModule passenger_module /home/masa/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/passenger-6.0.12/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
    PassengerRoot /home/masa/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/passenger-6.0.12
    PassengerDefaultRuby /home/masa/.rbenv/versions/3.0.3/bin/ruby
</IfModule>

# rails6をインストールしたパスを設定
DocumentRoot "/var/www/html/rails6_app/public"
<Directory /var/www/html/rails6_app/public>
    RailsEnv development
    PassengerEnabled On
    AllowOverride all
    Options -MultiViews
</Directory>

書き換えたらサービスを再起動します。

systemctl restart httpd

これでrails6の環境が構築されます。

よかったらシェアしてね!
目次
閉じる