はじめに
ApacheとPassengerを使って、Ruby(Ruby on Rails)を本番環境で動かすことを試みました。しかし、結論から言うとこの構成での運用は断念することになりました。
本記事は、Apache + Passenger で Ruby の本番環境を構築する手順をまとめたものですが、構築の途中で 断念することになりました。
記事は構築を進めながらリアルタイムに記録したものであり、試行錯誤したすべての内容をそのまま残しています。
そのため、これから同様の環境を検討する方にとって、判断材料の一つとなれば幸いです。
前提条件
本記事では、以下の環境が構築済みであることを前提としています。
- Apacheがインストール済みで、HTTPでアクセス可能な状態であること
- Ruby環境(rbenv+ruby-buildなど)を構築済みであること
- Passengerに対応したRailsアプリが配置されていること(※本記事では確認用にRedmineを使用します)
Ruby環境の構築がまだの方は、以下の記事も参考にしてください。
また、動作確認用にRedmineを使う場合は、以下の記事を参照してください。
PassengerをインストールしてApacheに導入する
ApacheでRubyアプリを動かすために、Passengerを導入します。
Passengerは、ApacheとRubyアプリの橋渡しをしてくれるアプリケーションサーバーです。インストールすることで、Apache経由でRubyアプリを実行できるようになります。
手順
リポジトリとGPGキーを追加(Phusion公式)
Phusionの公式リポジトリを利用できるようにし、信頼された署名付きでPassengerをインストールできるようにします。
sudo apt install -y dirmngr gnupg
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 561F9B9CAC40B2F7
sudo apt-add-repository 'deb https://oss-binaries.phusionpassenger.com/apt/passenger focal main'
sudo apt update
PassengerモジュールとApacheモジュールをインストール
ApacheとRubyアプリの橋渡しをするPassengerのApache連携モジュールをインストールします。
sudo apt install -y libapache2-mod-passenger
Apacheモジュールを有効化
インストールしたPassengerモジュールをApacheに反映させ、有効化します。
sudo a2enmod passenger
sudo systemctl restart apache2
バージョン確認(任意)
Passengerが正しく導入されたかどうか、念のためバージョンを確認しておくと安心です。
passenger-config --version
passenger-install-apache2-module
は旧方式で、今はlibapache2-mod-passenger
を入れると自動的に設定される構成が主流です- Ubuntu 22.04(またはそれ以降)であれば、Phusionリポジトリの
focal
を使用して問題ありません(※必要に応じて調整)
Passengerの設定をApacheに追記する
Rubyアプリを動かすために、Passengerにアプリの場所や環境を教える設定を行います。
Apacheの設定ファイルに、Passenger用のディレクティブを追記することで、Passengerが正しくRubyアプリを読み込み、動作させるようになります。
ここでは、事前にインストール済みのRedmineを対象に設定を行い、動作確認まで進めていきます。
設定手順
Apacheの設定ファイルを作成
/etc/apache2/sites-available/
にPassenger用の設定を作成します。
sudo nano /etc/apache2/sites-available/redmine.conf
以下の内容を記述します(パスは環境に合わせて調整してください)
<VirtualHost *:80>
ServerName redmine.local
DocumentRoot /var/www/redmine/public
<Directory /var/www/redmine/public>
Require all granted
Options -MultiViews
</Directory>
PassengerEnabled on
PassengerAppEnv production
</VirtualHost>
サイト設定を有効化
作成した設定ファイルをApacheに有効化します。
sudo a2ensite redmine.conf
Apacheを再起動する
Apacheを再起動すると設定が反映されます。
sudo systemctl restart apache2
以上で、Passenger設定がApacheに反映されて、ブラウザからRubyアプリにアクセスできる状態になります!
動作確認(ブラウザからアクセス)
ブラウザで以下のURLにアクセスして、Railsアプリ(今回はRedmine)が表示されれば設定は完了です。
http://redmine.local
アプリが表示されない場合は、以下を確認してみてください。
- Apacheが起動しているか:
sudo systemctl status apache2
- エラーログの確認:
/var/log/apache2/error.log
- Redmineのインストールパス確認
- 名前解決できるか(ブラウザを使う機器が、ServerNameのredmine.localを認識できているか)
- DocumentRoot の書き間違い
結果:失敗
Apache+Passenger+rbenvによるRuby環境の構築は、断念しました。
表示されないのにエラーが出ず、原因の特定が困難だったため、運用に耐えないと判断しました。
Redmineが表示されない
実行してみると、以下の様に表示されRedmineの画面が表示されませんでした。ApacheのVirtual Host に設定した、Document rootに問題があると見直しなどをしてみましたが、変わらずの結果となりました。

内部処理に必要な libcrypto.so.1.1(OpenSSL 1.1)が見つからない
Apacheログを確認すると、エラーが発生していました。

ログから読み取れる、核心的なエラー内容は以下の部分です。
PassengerAgent: error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory
Passenger could not be initialized because of this error: Unable to start the Phusion Passenger watchdog
Passenger の内部処理に必要な libcrypto.so.1.1(OpenSSL 1.1)が見つからず、起動に失敗していることがわかります。
OpenSSL 1.1をインストールする
結果として、インストールできませんでした。試したコマンドは以下の二つです。
・aptによるインストール
sudo apt install libssl1.1
・旧版アーカイブから取得する
wget http://security.ubuntu.com/ubuntu/pool/main/o/openssl1.1/libssl1.1_1.1.1f-1ubuntu2.16_amd64.deb
sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2.16_amd64.deb
まとめ:Apache+PassengerでRubyの本番環境は失敗
残念ながら、結果としては失敗に終わりました。
今回分かったこと。
- Passenger 6.x は OpenSSL 1.1(libssl1.1, libcrypto.so.1.1)に依存
- Ubuntu 22.04 以降では libssl1.1 はパッケージ提供されておらず、導入困難
- Passenger 自体は更新が止まっており、実質的に非推奨構成
- Puma + Nginx(または Puma 単独)構成が現在の Rails/Ruby の主流
今回の試行は失敗しましたが、失敗を記録することにも意味があると考え、この内容を残しています。 今後の選定の参考になれば幸いです!
コメント