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を選択）


######システムのアップデート


```Bash:ターミナル
$ sudo apt-get update && sudo apt-get upgrade
```


######RVMとRubyのインストール


```Bash:ターミナル
$ 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のインストール

```Bash:ターミナル
$ gem install rails
```
######Railsアプリの作成

```Bash:ターミナル
$ rails new example-app
$ cd example-app
$ bundle
```


######passengerのインストール


```Bash:ターミナル
$ gem install passenger
$ passenger-install-apache2-module
```

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

```Bash:ターミナル
$ 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をインストール(けっこう時間がかかる)

```Bash:ターミナル
$ passenger-install-apache2-module
```


######apacheの設定ファイルの確認(usernameの所は環境による)


```Bash:ターミナル
$ 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の所は環境による)


```Bash:ターミナル
$ 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の所は環境による)


```Bash:ターミナル
$ 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はデフォルト)

```Bash:ターミナル
$ 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>
```

######モジュールの有効化

```Bash:ターミナル
$ a2enmod passenger
```

######apacheの再起動

```Bash:ターミナル
$ sudo /etc/init.d/apache2 restart
```

######ブラウザでipにアクセス
![190901_1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490464/10840ab4-e3c9-c5e1-9255-cb5549a91060.png)
######apacheのエラーログ確認方法（メモ）

```Bash:ターミナル
$ cat /var/log/apache2/error.log
```

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