2010-01-16 14:07 | tag: linux, rackspace, ruby
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は、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
インストーラを実行し画面の指示に従って操作します。
途中でApacheに設定すべき内容が表示されますので控えておきます。
# passenger-install-apache2-module
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
新規に作成した直後の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
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;