話題の記事

EC2 (Amazon Linux) に Ruby on Rails + Passenger + Apache 環境を構築する

2013.06.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

EC2 (Amazon Linux AMI) に Rails アプリを Passenger + Apache で公開する、というお仕事をしたので環境構築方法をメモしておきたいと思います。Rails アプリを Apache を使って公開したいときの参考にしていただければと思います!

Ruby のインストール

はじめに Ruby をインストールします。まず Ruby の実行環境に必要なパッケージをインストールします。

sudo yum install \
git make gcc-c++ patch \
libyaml-devel libffi-devel libicu-devel \
zlib-devel readline-devel \
mysql mysql-devel sqlite sqlite-devel

次に rbenv を使って Ruby をインストールします。まずは rbenv のインストールですが、いろいろ面倒なので rbenv-install.sh というファイルを作って実行するようにします。

vim rbenv-install.sh
chmod 755 rbenv-install.sh
sudo ./rbenv-install.sh

rbenv-install.sh は以下のようにします。

rbenv-install.sh

MY_GROUP="ec2-user"
if [ "$MY_GROUP" = "" ] ; then
    echo '!!! undefined variable MY_GROUP.'
    echo '!!!'
    echo '!!! ex.) MY_GROUP=staff'
    echo '!!!'
    exit 1
fi

cd /usr/local
git clone git://github.com/sstephenson/rbenv.git rbenv
mkdir rbenv/shims rbenv/versions
chgrp -R $MY_GROUP rbenv
chmod -R g+rwxX rbenv

git clone git://github.com/sstephenson/ruby-build.git ruby-build
cd ruby-build
./install.sh

echo 'export RBENV_ROOT="/usr/local/rbenv"'     >> /etc/profile.d/rbenv.sh
echo 'export PATH="/usr/local/rbenv/bin:$PATH"' >> /etc/profile.d/rbenv.sh
echo 'eval "$(rbenv init -)"'                   >> /etc/profile.d/rbenv.sh

これで rbenv のインストールが終わったので Ruby をインストールします。

rbenv install 1.9.3-p429
rbenv global 1.9.3-p429
gem install bundler --no-ri --no-rdoc

以上で完了です。rbenv のパスが通っていない場合は再ログインすると通るようになると思います。

Apache & Passenger のインストール

次に Apache と Passenger をインストールします。まずは Apache です。

# 必要なパッケージのインストール
sudo yum install httpd httpd-devel curl-devel
# 自動起動
chkconfig /etc/init.d/httpd
chkconfig httpd on
chkconfig --list httpd

これでブラウザでアクセスしてみると Apache が起動している状態になっているはずです。
次に Passenger をインストールします。

gem install passenger --no-ri --no-rdoc
passenger-install-apache2-module

インストール中に以下のように表示されると思います(環境によって異なる場合があります)。これは /etc/httpd/conf.d/passenger.conf という設定ファイルを新規作成し、その中に記述します。

LoadModule passenger_module /usr/local/rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/passenger-4.0.5/libout/apache2/mod_passenger.so
PassengerRoot /usr/local/rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/passenger-4.0.5
PassengerDefaultRuby /usr/local/rbenv/versions/1.9.3-p392/bin/ruby

これで Apache + Passenger のインストールが完了しました。

アプリを置いてみる

環境作っただけでは分かりづらいので、Rails アプリを作って置いてアクセスしてみます。今回は /var/work というフォルダを作成し、そこにプロジェクトを置きます。

mkdir /var/work
mkdir /var/work/sample && cd /var/work/sample
# Rails アプリのひな形を作る
bundle init
vim Gemfile # gem 'rails' のコメントアウトを外す
bundle install --path vendor/bundle --without production
bundle exec rails new . --skip-bundle
# assetをプリコンパイル
RAILS_ENV=production bundle exec rake assets:precompile

ここまでできたら /etc/httpd/conf.d/rails.conf という設定ファイルを作り、中身は以下のようにします。

<VirtualHost *:80>
  ServerName sample
  DocumentRoot /var/work/sample/public
  RailsEnv production
  <Directory /var/work/sample/public>
    AllowOverride all
    Options -MultiViews
  </Directory>
</VirtualHost>

これで完了です。ブラウザでアクセスしてみると無事に起動していることが確認できました!

rails_on_amazon_linux

まとめ

以上、簡単ではありますが Amazon Linux に Ruby on Rails + Apache + Passenger な環境を作るメモでした。同じような環境を作りたいときの参考にしてください!