Rails+Passenger+Debian


この記事では、Debian(Google Cloud PlatformのVMを利用)でRails環境を構築した手順についてまとめています。(2019/09/02)

https://www.linode.com/docs/development/ror/ruby-on-rails-apache-debian/
https://symfoware.blog.fc2.com/blog-entry-423.html
こちらの記事を参考にしました。

バージョン情報

rails 6.0.0
Ruby 2.6.3

GCPのVMインスタンスを作成(省略。Debian9を選択)
システムのアップデート
ターミナル
$ sudo apt-get update && sudo apt-get upgrade
RVMとRubyのインストール
ターミナル
$ sudo apt install dirmngr
$ gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
$ curl -sSL https://get.rvm.io | bash -s stable --ruby
$ source /home/username/.rvm/scripts/rvm
$ rvm requirements
Railsのインストール
ターミナル
$ gem install rails
Railsアプリの作成
ターミナル
$ rails new example-app
$ cd example-app
$ bundle
passengerのインストール
ターミナル
$ gem install passenger
$ passenger-install-apache2-module

エラーメッセージに従って不足しているプログラムをインストールする。

ターミナル
$ sudo apt-get install libcurl4-openssl-dev
$ sudo apt-get install apache2-mpm-worker
$ sudo apt-get install apache2-dev
$ sudo apt-get install libapr1-dev
$ sudo apt-get install libaprutil1-dev
$ sudo apt-get install apache2

再度、apache2-moduleをインストール(けっこう時間がかかる)

ターミナル
$ passenger-install-apache2-module
apacheの設定ファイルの確認(usernameの所は環境による)
ターミナル
$ passenger-install-apache2-module --snippet
LoadModule passenger_module /home/username/.rvm/gems/ruby-2.6.3/gems/passenger-6.0.2/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /home/username/.rvm/gems/ruby-2.6.3/gems/passenger-6.0.2
  PassengerDefaultRuby /home/username/.rvm/gems/ruby-2.6.3/wrappers/ruby
</IfModule>
passenger.confの作成(usernameの所は環境による)
ターミナル
$ vi /etc/apache2/mods-available/passenger.conf
<IfModule mod_passenger.c>
  PassengerRoot /home/username/.rvm/gems/ruby-2.6.3/gems/passenger-6.0.2
  PassengerDefaultRuby /home/username/.rvm/gems/ruby-2.6.3/wrappers/ruby
</IfModule>
passenger.loadの作成(usernameの所は環境による)
ターミナル
$ vi /etc/apache2/mods-available/passenger.load
LoadModule passenger_module /home/username/.rvm/gems/ruby-2.6.3/gems/passenger-6.0.2/buildout/apache2/mod_passenger.so
000-default.confの変更(ip_address、usernameの所は環境による。ポート番号80はデフォルト)
ターミナル
$ vi /etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>
        ServerName ip_address:80
        ServerAdmin webmaster@localhost
        DocumentRoot /home/username/example-app/public
        RailsEnv development
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        <Directory "/home/username/example-app/public">
            Options FollowSymLinks
            AllowOverride All
            Require all granted
        </Directory>
</VirtualHost>
モジュールの有効化
ターミナル
$ a2enmod passenger
apacheの再起動
ターミナル
$ sudo /etc/init.d/apache2 restart
ブラウザでipにアクセス

apacheのエラーログ確認方法(メモ)
ターミナル
$ cat /var/log/apache2/error.log
感想

途中色々なエラーが出ました。(bundlerがありません、bundlerのバージョンが合ってません、apache2-mpm-workerなんてありません、サーバの権限がありません、authz_core:error等。) これらのエラーはパッケージのバージョンを合わせる、パスを正確に書く、設定ファイルを見直すことで解決しました。コピペするだけじゃなく、エラーログをググって原因を特定できるようにしたいです。