[node.js] ndenv と npm と daemontools
久々のエントリです。
このブログを WordPress から Ghost に乗り換えました。
markdown スラスラ書けて良い…!
Ghost は node.js で書かれたアプリです。
今回 node.js 製アプリに触れるのは初めてだったので、セットアップするにあたって、自分なりの tips をまとめてみました。
ndenv でバージョン管理
Ruby, Perl でもそうなのですが、僕は env 系はシステムワイドに配置しています。
インストール等が必要な時は root になって作業します。
# git clone https://github.com/riywo/ndenv.git /usr/local/ndenv
# git clone https://github.com/riywo/node-build.git /usr/local/ndenv/plugins/node-build
# cat <<'___EOL___' > /etc/profile.d/ndenv.sh
export NDENV_ROOT=/usr/local/ndenv
export PATH="$NDENV_ROOT/bin:$PATH"
eval "$(ndenv init -)"
___EOL___
# exec $SHELL -l
(/etc/profile.d
は使えないディストロあるかも…。)
バージョンは下記の様に、アプリの一階層上で固定します。
$ pwd
/path/to/app
$ cd ..
$ ndenv local v0.10.26
npm でパッケージ管理
あたりまえの手順なので解説する必要はないけど、一応。
下記で package.json
を読んで必要なパッケージをインストールしてくれます。
$ cd /path/to/app
$ npm install
daemontools で永続化・自動起動
永続化というと forever とか pm2 とかが有名ですが、あえて daemontools を使います。
(いい加減卒業しろよ、とは自分でも思ってます)
npm start
だと子プロセスができてしまうので、daemontools 管理に向きません。
npm start
は package.json
の中の scripts.start
の内容を叩いているだけ (っぽい) なので、これを daemontools の run ファイルで exec してあげれば OK です。
例えば Ghost の package.json
"scripts": {
"start": "node index",
"test": "grunt validate --verbose"
},
というわけで run
ファイルは下記のようになります。
#!/bin/bash
PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/sbin:/usr/sbin
export PATH
sleep 3
exec 2>&1
export NDENV_ROOT=/usr/local/ndenv
export PATH="$NDENV_ROOT/bin:$PATH"
eval "$(ndenv init -)"
cd /path/to/app
export NODE_ENV=production
exec setuidgid daemon node index
- 初稿 (Tue, 11 Mar 2014 14:53:39 JST)