CentOS 6.5 + Apache 2.2 + Ruby 2.0 + Rails 4.1 の構築手順

CentOS 6.5 + Apache 2.2 + Ruby 2.0 + Rails 4.1 の構築手順
===================================

面倒くさい事で評判のCentOS+PassengerでのRails4.1環境構築を出来るだけ簡略化してみました。

最近はChefやAnsibleでの構築が当たり前になってきているので、手動で構築する機会も減ってきていますが、 何事も基本が大事ということで共有します。

ちなみにこの手順はRuby2.0系ですが、おそらく2.1系で同じ方法でOKのはずです。

## 事前準備
必要となるパッケージを入れておきます。

```bash
$ sudo yum install gcc make openssl openssl-devel readline-devel
```

## rbenvインストール

Rubyのバージョンをお手軽に切り替えられるツールrbenvをインストールします。
実際に、本番環境でバージョンを切り替える事はほとんどないですが、以下の理由で入れています。

- Rubyのインストールがコマンドで出来るようになる。
    - CentOSのyumリポジトリでは、未だに1.8.7しか提供していない。
        - rbenvなしで1.9以降を入れたい場合はソースからコンパイルする必要がある。
    - ちなみに、1.8.7のサポート期限はちょうど今月末(2014/07/31)で切れますね。[参考URL](https://www.ruby-lang.org/ja/news/2014/07/01/eol-for-1-8-7-and-1-9-2/)
- gemもRubyのバージョン毎に管理してくれるので、後々Rubyのバージョンアップが楽。


```bash
$ cd /usr/local
$ git clone git://github.com/sstephenson/rbenv.git

$ sudo echo 'export RBENV_ROOT="/usr/local/rbenv"' >> /etc/profile
$ sudo echo 'export PATH="${RBENV_ROOT}/bin:${PATH}"' >> /etc/profile
$ sudo echo 'eval "$(rbenv init -)"' >> /etc/profile

$ mkdir /usr/local/rbenv/plugins
$ cd /usr/local/rbenv/plugins
$ git clone git://github.com/sstephenson/ruby-build.git

```

## Ruby2.0インストール

rbenvを利用して、Ruby2.0をインストールします。簡単です。

```bash
$ sudo rbenv install -v 2.0.0-p481
$ sudo rbenv global 2.0.0-p481          #システム標準を切り替える。
$ ruby -v
ruby 2.0.0p481 (2014-05-08 revision 45883) [x86_64-linux]
```

## Rails4.1.1インストール

既存のgemを最新版に更新してから、Railsをインストールします。

```bash
$ sudo gem update --system
$ sudo gem install rails --no-ri --no-rdoc --version "=4.1.1"
$ sudo rbenv rehash            #rbenvではgemをインストールしたら、このコマンドで反映させる必要がある。
$ rails -v
Rails 4.1.2
```

## ApacheとPassengerのインストール

一番の鬼門である、Apache+Passengerをインストールします。
この後の設定の項目も含めて、Passengerはバージョンによって手順がガラリと変わるので注意してください(これは4.0系の手順です)。

```bash
$ sudo yum install httpd httpd-devel curl-devel apr-devel apr-util-devel
$ sudo gem install passenger --version "=4.0.45"
$ sudo rbenv rehash                       #忘れず反映
$ sudo passenger-install-apache2-module   #言語を選ぶ所ではrubyのみを選択
$ /usr/sbin/httpd -v
Server version: Apache/2.2.15 (Unix)
Server built:   Apr  3 2014 23:56:16
$ passenger-config --version
4.0.45

```


## ApacheとPassengerの設定

Apache上でPassengerを認識させるための設定を行います。

```bash
$ passenger-install-apache2-module --snippet > /etc/httpd/conf.d/rails.conf    #新規作成
$ sudo echo "export PATH=/usr/local/rbenv/shims:$PATH" >> /etc/sysconfig/httpd

$ sudo /etc/init.d/httpd restart
```

最初の行で、PassengerをApacheに認識させています。
2行目は、ApacheがPassengerを起動する時に使うRubyをrbenvでインストールしたものに切り替えています。

続いて、Railsプロジェクト用にVirtualHostの設定をします。
色んな設定があるとは思いますが、とりあえず最低限、以下の設定を`rails.conf`に追加しておきましょう。

```apache:/etc/httpd/conf.d/rails.conf
<VirtualHost *:80>
    ServerName www.example.com        #サービスのFQDN
    DocumentRoot /var/www/app/public   #Railsアプリのデプロイ先のpublic

    <Directory /var/www/app/public>     #Railsアプリのデプロイ先のpublic
        AllowOverride all
        Options -MultiViews
    </Directory>

    ErrorLog /var/log/httpd/app.error.log
    CustomLog /var/log/httpd/app.access.log combined

</VirtualHost>
```

`/etc/httpd/conf/httpd.conf`で`NameVirtualHost`を有効にするのをお忘れなく。


## Railsプロジェクトのデプロイ

最後に、Railsプロジェクトを実際にデプロイします。
やり方は色々あると思いますが、今回はgit管理されているプロジェクトという体で。

```bash
$ mkdir /var/www/app
$ cd /var/www/app
$ git clone プロジェクトのリポジトリ

$ chmod -R 777 /var/www/プロジェクトのリポジトリ/log

$ rake db:migrate

$ sudo /etc/init.d/httpd restart
```

これでブラウザからページにアクセスできるはずです。
お疲れ様でした。

## 注意事項
- 簡略化した手順という事で、DB周りのインストールをさくっと無視しています。migrateでDBがないよエラーが出る人は別途インストールしてください。
    - SQLiteを使う人は、`sudo yum install sqlite-devel`でOKです。
    - MySQLを使う人もyumでOKではあるのですが、Ruby同様、やたら古いバージョン(5.1)が入るので、mysqlコミュニティが出しているリポジトリを使って、5.6系を入れた方がいいと思います。
        - [こちら](http://blog.ybbo.net/2014/01/22/%E3%80%90%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%80%91centos6%E3%81%ABmysql5-6%E3%82%92yum%E3%81%A7%E7%B0%A1%E5%8D%98%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B/)が参考になります。
- アプリの実行ユーザーで作業する前提で書いています。自分の個人ユーザーでやると恥ずかしい事になるので、アプリ用のユーザーを作るか、rootでやるようにしてください。