Rackspaceで借りたCentOSサーバでRails実行環境を作る

2010-01-16 14:07 | tag: , ,

RackspaceでCentOS 5.4サーバを借りたときに、Ruby on Railsアプリケーション実行環境をセットアップするための手順のメモです。

Apache, Passenger , Ruby Enterprise Edition による環境を構築します。

以下を実施済みであることが前提です。

必要なパッケージのインストール

開発ツール(Cコンパイラ等):
# yum groupinstall "Development Tools"

Rubyのビルドに必要なライブラリのヘッダファイル:
# yum install openssl-devel readline-devel zlib-devel

MySQLとヘッダファイル:
# yum install mysql-server mysql-devel

SQLiteとヘッダファイル:
# yum install sqlite sqlite-devel

Apacheとヘッダファイル:
# yum install httpd httpd-devel

Ruby Enterprise Editionのインストール

Ruby Enterprise Editionは、RailsアプリケーションのインスタンスをPassengerで並行して起動する際にメモリの使用量を節約することができます。これは、RubyのGabage Collectionの改善により実現されています。

Enterpise Rubyをインストールすると、passenger, rake, rails, fastthread, rack, mysql(Ruby用MySQLデータベースドライバ), sqlite3-ruby(Ruby用SQLite3ドライバ), pg(Ruby用PostgreSQLドライバ)等のRails実行環境を構築するのに必要なgemパッケージも同時にインストールされます。

1. Ruby Enterprise Editionのダウンロード

http://www.rubyenterpriseedition.com/download.html

2. インストーラ実行

ダウンロードしたtarballを展開して installer を実行。画面の指示にしたがって操作を行います。

# ./ruby-enterprise-1.8.7-2009.10/installer

本手順ではCentOSにPostgreSQL関係のパッケージを導入していないので途中gemパッケージ"pg"のインストールに失敗して次のようなエラーが表示されます。PostgreSQLを使う予定がなければ無視しても問題ありません。

The following gems could not be installed, probably because of an Internet
connection error:

 * pg

インストールが完了すると、 /opt/ruby-enterprise-1.8.?-??./ のような名前のディレクトリ以下に関連ファイルがインストールされます。

また、いくつかのgemパッケージがインストールされます。

# /opt/ruby-enterprise-1.8.7-2009.10/bin/gem list

*** LOCAL GEMS ***

actionmailer (2.3.5)
actionpack (2.3.5)
activerecord (2.3.5)
activeresource (2.3.5)
activesupport (2.3.5)
fastthread (1.0.7)
mysql (2.8.1)
passenger (2.2.9)
rack (1.0.1)
radiant (0.8.1)
rails (2.3.5)
rake (0.8.7)
RedCloth (4.2.2)
sqlite3-ruby (1.2.5)

3. PATHの設定

rubyやgemを起動するときに常にフルパスを入力するのもたいへんなので、Ruby Enterprise Editionインストールディレクトリの bin/ にPATHを通します。

~/.bash_profile 内の既存のPATH=で始まる行の下に以下の内容を追加します。

~/.bash_profile:

PATH=$PATH:/opt/ruby-enterprise-1.8.7-2009.10/bin

PassengerのApache用モジュールのインストール

インストーラを実行し画面の指示に従って操作します。

途中でApacheに設定すべき内容が表示されますので控えておきます。

# passenger-install-apache2-module

Apacheの設定

1. worker MPMに切り替える

高速化とメモリの節約のために、ApacheのMPMをデフォルトのprefork MPMからworker MPMに変更します。

/etc/sysconfig/httpd:

HTTPD=/usr/sbin/httpd.worker

2. Passengerの設定を追加

/etc/httpd/conf/httpd.confに直接追加してもよいですが、管理しやすいようPassenger関係の設定は別ファイルにまとめます。

/etc/httpd/conf.d/passenger.conf:

# Passengerの基本設定。
# passenger-install-apache2-moduleインストール中に表示された内容を使用する。
#
LoadModule passenger_module /opt/ruby-enterprise-1.8.7-2009.10/lib/ruby/gems/1.8/gems/passenger-2.2.9/ext/apache2/mod_passenger.so
PassengerRoot /opt/ruby-enterprise-1.8.7-2009.10/lib/ruby/gems/1.8/gems/passenger-2.2.9
PassengerRuby /opt/ruby-enterprise-1.8.7-2009.10/bin/ruby

# Passengerが追加するHTTPヘッダを削除するための設定。
#
Header always unset "X-Powered-By"
Header always unset "X-Rack-Cache"
Header always unset "X-Content-Digest"
Header always unset "X-Runtime"

# 必要に応じてPassengerのチューニングのための設定を追加。
#
PassengerMaxPoolSize 20
PassengerMaxInstancesPerApp 4
PassengerPoolIdleTime 3600
PassengerUseGlobalQueue on
PassengerHighPerformance on
PassengerStatThrottleRate 10
RailsSpawnMethod smart
RailsAppSpawnerIdleTime 86400
RailsFrameworkSpawnerIdleTime 0

3. Apacheの起動および自動起動の設定

# /etc/init.d/httpd start
# /sbin/chkconfig httpd on

iptablesの設定変更

新規に作成した直後のRackspaceのサーバは、iptablesによってssh以外のポートは閉じられています。Apacheを使用しますので80/tcpを開放します。

/etc/sysconfig/iptablesに以下に示す内容を追加してiptablesを再起動してください。

/etc/sysconfig/iptables:

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

iptables再起動:

/etc/init.d/iptables restart

MySQLの設定

1. innodbのファイルをテーブル毎に作成する設定を追加

/etc/my.cnf:

[mysqld]
innodb_file_per_table

2. MySQLの起動および自動起動の設定

# /etc/init.d/mysqld start
# /sbin/chkconfig mysqld on

3. rootユーザーのパスワード変更・匿名ユーザー削除

# mysql -uroot
mysql> set password=password('********');
mysql> use mysql;
mysql> delete from user where user = '';
mysql> flush privileges;

Cloud Computing & Cloud Hosting by Rackspace