Sails(node.js)をLinux(CentOS)上のPassengerで動かす | LastShogunのブログ

LastShogunのブログ

元ITベンチャー社長が青年海外協力隊でタイに行きます

CentOS6.5でSails(node.js)をPassengerで動かす時のメモ

1.
#EPELにあるようなので、以下を有効にしておく
vi /etc/yum.repos.d/epel.repo
--
enabled=1
--

#yumでnodeをインストール
yum install nodejs nodejs-mongodb npm mongodb mongodb-server

2.
デプロイの方法としては、今回はPhusion Passengerを使う。
理由は、Ruby on Railsで散々使ってきたので使い慣れているという理由から。

というわけで、passengerのインストールを行う。
その流れで、Rubyをrbenvを使ってインストールするが、この辺は個人の環境に合わせて好きに読み替えてください。

環境
さくらVPS(CentOS6.5)
ホスト名:test-meteor.sample.org (と仮定する)
Apache 2.2.15 (VirtualHost設定)
Ruby 2.0.0-p451
Phusion Passenger 4.0.40
Rails 4.0.4 (これはついでです)
Meteor 0.7.2

まずはRubyのインストールから。
なお、ここから先はrootで行ってください。
------
#rbenv(ruby)環境を用意

yum erase ruby
もともと用意されているRubyは削除しておく

yum install zlib zlib-devel readline readline-devel openssl openssl-devel curl curl-devel git

#rbenvをインストール
cd /usr/local
git clone https://github.com/sstephenson/rbenv.git rbenv
mkdir rbenv/shims rbenv/versions
chmod -R g+rwxXs rbenv
git clone https://github.com/sstephenson/ruby-build.git ruby-build
cd ruby-build
./install.sh

# 全体のPATH に追加
vi /etc/profile
に以下を追加
----
export RBENV_ROOT="/usr/local/rbenv"
export PATH="/usr/local/rbenv/bin:$PATH"
eval "$(rbenv init -)"
----

# 上記設定の再読み込み
exec $SHELL -l

#バージョン確認
rbenv --version

# インストール可能なruby の確認
rbenv install --list

#ruby のインストール
rbenv install -v 2.0.0-p451

#再読み込み
rbenv rehash

#インストールされているruby一覧を確認
rbenv versions

#標準で動作するRubyを設定
rbenv global 2.0.0-p451

#確認
ruby -v
------
これでrubyのインストールが完了

3.
次はApacheのインストール
------
・apache
yum install perl wget httpd-devel gcc-c++ gcc make

vi /etc/httpd/conf/httpd.conf
---
NameVirtualHost *:80
コメントをを外す
---
------
これで完了

4.
次は、Passenger。
------
gem install bundler rails sqlite3 passenger

cd /usr/local/rbenv/versions/2.0.0-p451/bin/

Apacheモジュールとして動かしたいなら以下を実行
(でもApacheモジュールとして動かすとWebSocketが動いてくれないが)
./passenger-install-apache2-module
確認はすべてENTERで良い

#実行時に出るメッセージに設定ファイルに書くべき内容が出ているのでメモしておく
------

5.
この段階で、スタンドアローンモードでpassengerで動かしてみる

まずは、適当なプロジェクト(node.jsでRailsっぽいフレームワークのSailsの開発環境を作ってみる)をCentOSのサーバーにアップする
今回のアップ場所は、/var/www/test-node.sample.org とする。

mkdir -p /var/www/test-node.sample.org
cd /var/www/test-node.sample.org

このフォルダにファイルをアップしてから
Passengerが必要とするディレクトリを作っておく
mkdir tmp
mkdir public

chown apache:apache *

passenger start --port 9001

この状態で、 http://test-node.sample.org:9001 にアクセス。
これでpassengerで動くことを確認。

6.
次はデーモンモードを使う。
cd /var/www/test-node.sample.org
passenger start --port 9001 --environment development --daemonize

停止は以下で行う
passenger stop --port 9001

7.
最後にApacheのモジュールとしてpassengerを動かしてみる
(これの場合はWebSocketが動かない)

#apache設定ファイル
vi /etc/httpd/conf.d/passnger.conf
----------------------------------------
LoadModule passenger_module /usr/local/rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/passenger-4.0.40/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
PassengerRoot /usr/local/rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/passenger-4.0.40
PassengerDefaultRuby /usr/local/rbenv/versions/2.0.0-p451/bin/ruby

PassengerEnabled off
</IfModule>
----------------------------------------

# test-node.sample.org

vi /etc/httpd/conf.d/vh-test-node.sample.org.conf
---
<VirtualHost *:80>
ServerName test-meteor.sample.org
DocumentRoot /var/www/test-node.sample.org/public
ErrorLog logs/test-meteor.sample.org-error.log
CustomLog logs/test-meteor.sample.org-access.log combined

PassengerEnabled on
PassengerAppEnv development

<Directory /var/www/test-node.sample.org/public>
Allow from all
AllowOverride all
Options -MultiViews
</Directory>
</VirtualHost>
---

/etc/init.d/httpd restart


Apacheモジュールで動かすとWebSocketが動かない問題への対処方法は後日調査して記事をアップする予定です。