CentOS 6.5 + Apache 2.2 + Ruby 2.0 + Rails 4.1 の構築手順
面倒くさい事で評判のCentOS+PassengerでのRails4.1環境構築を出来るだけ簡略化してみました。
最近はChefやAnsibleでの構築が当たり前になってきているので、手動で構築する機会も減ってきていますが、 何事も基本が大事ということで共有します。
ちなみにこの手順はRuby2.0系ですが、おそらく2.1系で同じ方法でOKのはずです。
事前準備
必要となるパッケージを入れておきます。
$ 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
- CentOSのyumリポジトリでは、未だに1.8.7しか提供していない。
- gemもRubyのバージョン毎に管理してくれるので、後々Rubyのバージョンアップが楽。
$ 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をインストールします。簡単です。
$ 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をインストールします。
$ 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系の手順です)。
$ 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を認識させるための設定を行います。
$ 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
に追加しておきましょう。
<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管理されているプロジェクトという体で。
$ 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系を入れた方がいいと思います。
- こちらが参考になります。
- SQLiteを使う人は、
- アプリの実行ユーザーで作業する前提で書いています。自分の個人ユーザーでやると恥ずかしい事になるので、アプリ用のユーザーを作るか、rootでやるようにしてください。