前置き
前回、ラズパイでRuby on Railsを動かすための環境構築をしました。
しかし、実際にWebサーバーを運営するためには、常時稼働するWebサーバーアプリが必要となります。
また、Railsは、Webサーバーから呼び出すために、連携用モジュールが必要となります。
今回は、WebサーバーにはApache、連携モジュールはPassengerを使って設定します。
ちなみに、Apacheのインストールする方法について一切触れていませんが、aptなりyunなりで入れるだけなのですっぱりキッパリ割愛します。
それでは。行ってみましょう!
Passengerのインストール
まずはApacheの連携モジュールである、Passengerからインストールしていきます。
Passengerは、RubyのGemパッケージとして提供されているので、gemコマンドでインストールします。(※ユーザー権限で実行)
gem install passenger
これだけでは終わらず、Apacheとの連携モジュールのインストールです。
インストールはコマンドが提供されているので、以下のコマンドを実行すればOKです。
passenger-install-apache2-module
しかし、たいていの場合はモジュールが不足と言われるでしょう。
今回のラズパイOSLiteの場合は、以下のようなメッセージが表示されました。
Installation instructions for required software * To install Curl development headers with SSL support: Please run apt-get install libcurl4-openssl-dev or libcurl4-gnutls-dev, whichever you prefer. * To install Apache 2 development headers: Please install it with apt-get install apache2-threaded-dev * To install Apache Portable Runtime (APR) development headers: Please install it with apt-get install libapr1-dev * To install Apache Portable Runtime Utility (APU) development headers: Please install it with apt-get install libaprutil1-dev If the aforementioned instructions didn't solve your problem, then please take a look at our documentation for troubleshooting tips: https://www.phusionpassenger.com/library/install/apache/ https://www.phusionpassenger.com/library/admin/apache/troubleshooting/
いくつかのソフトが不足しているとのこと。
基本的に指示どおり、apt-getでインストールすればよいのですが、環境によってパッケージ名が違う場合があるため、適宜変更して実行する必要があります。
今回の環境では、このようにしました。
apt-get install libcurl4-openssl-dev apt-get install apache2-threaded-dev → apt-get install apache2-devに変更してインストール apt-get install libapr1-dev → 不要。上記でインストールされる。 apt-get install libaprutil1-dev → 不要。上記でインストールされる。
apache2-threaded-devというパッケージは存在しませんでしたが、apache2-devに含まれるようです。
libapr1-dev、libaprutil1-devは、apache2-devに含まれるようなので、インストール不要です。
で、先程のコマンドを再実行。
passenger-install-apache2-module
以上でPassengerのインストールは終了です。
実行結果に、Apacheの設定ファイルに追記する内容が表示されます。
設定手順は次で説明します。
Apacheの設定
passengerの設定
Passengerモジュールのインストール結果に出力された設定内容を、Apacheに設定していきます。
apache2.confに設定しろなどと言われますが、今回は設定ファイルは分けておきます。
設定ファイルは、/etc/apache2/conf-available配下に、passenger.conf として新規ファイルを作成しました。
ファイル名はお好みで構いません。
passenger-install-apache2-moduleの結果で表示されていた設定内容を入力して保存します。
LoadModule passenger_module /home/ユーザー名/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/passenger-6.0.7/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c> PassengerRoot /home/ユーザー名/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/passenger-6.0.7 PassengerDefaultRuby /home/ユーザー名/.rbenv/versions/2.7.2/bin/ruby </IfModule>
また、passengerのデフォルトユーザーがrootなので、以下の設定も追加します。
# passengerユーザーの設定 PassengerUserSwitching off PassengerDefaultUser ユーザー名
さらに、一定時間ごとにアップデートのチェック処理が走り、エラーが出てしまっていたので、無効化しておきました。
# セキュリティアップデートのチェック無効 PassengerDisableSecurityUpdateCheck on
conf-available配下の設定は、そのままでは有効になりません。
apacheのコマンド a2enconf にて、作成した設定ファイルを有効化することができます。
a2enconf passenger
passengerの部分は、設定ファイルの.confを除いた部分です。
このコマンドによって、/etc/apache2/conf-enabledに、passenger.confへのシンボリックリンクが作成されます。
conf-enabledにシンボリックリンクがある状態だと、該当の設定ファイルが有効になります。
apacheの設定変更
apacheの実行ユーザーを変更しておきます。
デフォルトはrootなので、セキュリティ上よろしくありません。
/etc/apache2/envvars のAPACHE_RUN_USER、APACHE_RUN_GROUPを、実行するユーザーに変更します。
このコマンドによって、/etc/apache2/conf-enabledに、passenger.confへのシンボリックリンクが作成されます。
conf-enabledにシンボリックリンクがある状態だと、該当の設定ファイルが有効になります。
apacheの設定変更
apacheの実行ユーザーを変更しておきます。
デフォルトはrootなので、セキュリティ上よろしくありません。
/etc/apache2/envvars のAPACHE_RUN_USER、APACHE_RUN_GROUPを、実行するユーザーに変更します。
export APACHE_RUN_USER=ユーザー名 export APACHE_RUN_GROUP=ユーザー名
サイトの設定
Railsアプリを、Apacheと紐付けるための設定を行います。
今回は、バーチャルホストの設定を行い、その中でRailsのアプリを指定する方法を取ります。
/etc/apache2/sites-availableに、以下のようなファイルを作成します。
<VirtualHost *:80> ServerName サーバーURL # Tell Apache and Passenger where your app's 'public' directory is DocumentRoot railsアプリのパス/public PassengerRuby /home/ユーザー名/.rbenv/shims/ruby RailsEnv production <Directory railsアプリのパス/public> Allow from all Options -MultiViews # Uncomment this if you're on Apache > 2.4: Require all granted </Directory> </VirtualHost>
この設定も、conf-availableと同様で、このままでは有効になりません。
Apacheのコマンドで有効化します。
a2ensite site
Railsアプリの設定
Railsアプリ側にて、許可するアクセス方法(URL指定)を設定します。
バーチャルホスト設定で、URL指定でのアクセスになるため、そのURLでのアクセスをRailsでも許可しておく必要があります。
railsアプリの config/environments/development.rb に以下を追加。
config.hosts << "サーバーURL"
これで、Apache経由でRailsアプリが実行できるようになります。
Passengerの設定がなにげにややこしいのですが、やはりやり方がわかってしまえばどうってことは無いです。
ApacheとRailsの連携といいながら、Apache自体の設定や、バーチャルホストの設定なども混ざってしまいましたが、Railsで動かそうと思ったらだいたいこんな設定になるでしょう。