パッケージのアップデート
sudo dnf -y update
sudo dnf -y update
EPELリポジトリをインストールするには以下のようにします。
sudo dnf -y install epel-release
Gitをインストールします。
sudo dnf -y install git
# インストールされたかバージョンで確認
git -v
Apacheをインストールするには、以下のコマンドを実行します。
sudo dnf -y install httpd httpd-devel
Apacheの起動と自動起動の設定を有効にしておきます。
sudo systemctl enable httpd
sudo systemctl start httpd
ファイアウォールの設定を変更します。以下のページを参考にしてください。
httpの80番ポートを許可する設定を追加します。
sudo firewall-cmd --permanent --add-service=http --zone=public
sudo firewall-cmd --reload
sudo systemctl enable firewalld
sudo systemctl start httpd
Rubyのバージョン管理ツールであるrbenvを利用してインストールします。
インストールについては、以下を参考にしてください。
Sinatraアプリのサンプルを利用する場合は、以下のコマンドを実行してください。
git clone https://github.com/beginnerP765/stapp.git
stapp内で利用するrubyを指定します。
cd stapp
rbenv local 3.3.6
ディレクトリのパーミッションを変更します。
sudo chmod 755 /home/rbuser
sudo chmod -R 755 /home/rbuser/stapp
Gemfileに記載されているgemをインストールします。
bundle config set path vendor/bundle
bundle install
Sinatraアプリが起動できるか、以下のコマンドを実行して確認します。
bundle exec rackup
起動することが確認できれば、「 Ctr+c 」で終了します。
Phusion Passengerとは、Sinatraアプリケーションを実行するためのApacheモジュールです。
gem install passenger
インストールが終われば、以下のコマンドを実行しApacheモジュールのビルドとインストールを行います。
passenger-install-apache2-module
上記コマンドを実行すると、まず必要なライブラリをチェックします。
もしインストールされていないライブラリがあれば、足りないライブラリのインストール方法を表示して終了します。
足りないライブラリをインストールし、「 passenger-install-apache2-module 」を再度、実行します。
最後に、Apacheにする設定が表示されるため、コピーしておきます。
もしコピーし忘れても以下のコマンドで確認することができます。
passenger-install-apache2-module --snippet
passenger-install-apache2-moduleを実行した際に、追加でインストールが必要になったライブラリは、「 gcc-c++ 」、「 libcurl-devel 」でした。
sudo dnf -y install gcc-c++ libcurl-devel
Passengerの設定のためのファイルを「 /etc/httpd/conf.d 」に作成します。ファイル名は「 passenger.conf 」にしておきます。
ファイル名は自由に決めることができますが「 *.conf 」形式で作成してください。
LoadModule passenger_module /home/rbuser/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/passenger-6.0.23/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
PassengerRoot /home/rbuser/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/passenger-6.0.23
PassengerDefaultRuby /home/rbuser/.rbenv/versions/3.3.6/bin/ruby
</IfModule>
# virtualhostの設定
<VirtualHost *:80>
# IPアドレスもしくは、ドメイン名、FQDNを指定します
ServerName xxx.xxx.xxx.xxx
# アプリのルート
DocumentRoot "/home/rbuser/stapp/public"
RackEnv production
<Directory /home/rbuser/stapp/public>
AllowOverride All
Options -MultiViews
Require all granted
</Directory>
PassengerRuby /home/rbuser/.rbenv/versions/3.3.6/bin/ruby
</VirtualHost>
ページが表示されない原因には、パーミッション・所有者・SELinuxの設定などが考えられます。
SELinuxが「 Enforcing 」になっていることが原因の場合は、「 Permissive 」に変更してページが表示されるか確認してみます。
「 Permissive 」の状態でページが表示されれば、SELinuxのポリシーの設定していきます。
audit2allowユーティリティーは、拒否された操作のログから情報を収集し、SELinuxポリシーの許可ルールを生成します。
audit2allowを使って設定するには、まずSELinuxを「 Permissive 」に設定し、Aacheを再起動します。
sudo setenforce 0
sudo systemctl restart httpd
ブラウザでSinatraアプリを表示していろいろ操作(ページ遷移、リンククリックなど)して監査ログを採取します。一通り操作が終われば、監査ログからSELinuxのポリシーの設定を作成します。
ユーザーディレクトリで以下のコマンドを実行します。
sudo grep httpd /var/log/audit/audit.log | audit2allow -M passenger
ユーザーディレクトリに「 passenger.pp 」と「 passenger.te 」というファイルが作成されます。作成された設定ファイルを以下のコマンドを実行して、設定を反映させます。
sudo semodule -i passenger.pp
SELinuxの設定を「 Enforcing 」に変更して、Apacheを再起動します。
sudo setenforce 1
sudo systemctl restart httpd
SELinuxが「 Enforcing 」でもページが表示されるか「 http://xxx.xxx.xxx.xxx/content 」にブラウザでアクセスしページが表示されるか確認します。
audit2allowを利用しても表示されない場合、ポリシーの設定を変更するのではなく、SELinuxによるドメインに対する制限を無くしてみます。
以下のコマンドを実行します。
sudo semanage permissive -a httpd_t