Apache+PassengerでRubyの本番環境の構築に失敗した話

目次

はじめに

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

2025年4月現在、Phusionの公式GPGキーは 561F9B9CAC40B2F7 が使われています

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>

PassengerAppEnv は、本番環境で運用する場合は production に設定します
Railsアプリ(Redmineを含む)では、動作モードに応じて開発用のdevelopment などに切り替えることもできますが、本番公開用の場合は production が推奨されています

サイト設定を有効化

作成した設定ファイルを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 の主流

今回の試行は失敗しましたが、失敗を記録することにも意味があると考え、この内容を残しています。 今後の選定の参考になれば幸いです!

  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次