以前、nvm を利用して node.js をセットアップする記事を書きました
ですが、nvm はあくまで開発用の環境をセットアップするためのものなのでサーバー上に node.js をインストールするのには向いてません
公式サイトには具体的なインストール方法は書かれておらず、ビルド済みバイナリが配布されています
これをダウンロードしてきて /usr/bin とか /usr/sbin に配置すればそれでインストール完了なんですが、習慣的にどうやられているのかを知りたいですよね
できれば何らかのパッケージマネージャーを利用する方法がいいはずですが yum のリポジトリで提供されているバージョンはかなり古くその時点の最新版が配信されていないようでした
そこで Production を意識した環境を構築する際に、どうやればお手軽かついい感じに node.js をインストールできるかを調べました
この記事では
1. おそらく1番妥当な方法
2. n コマンドの使い方
3. nvm と n の違い
4. まとめ
について説明します
1. おそらく1番妥当な方法
ググってみると、node.js をサーバーにインストールするには以下の3パターンの方法がよく利用されている方法っぽいことが分かりました
- ソースからコンパルする
- ビルド済みバイナリをダウンロードしてきて任意のディレクトリに配置
- n コマンドを利用してインストール
ソースからコンパイル以外の方法であればやっていることは実質同じなのであまり差はないんですが、n コマンドを利用したインストールが一番簡単そうだったので恐らく現時点ではこれが1番妥当な方法です
この方法は Carbon Five という開発会社のブログ記事に書かれていました
n コマンドを利用した node.js のインストール方法は以下です
yum install nodejs npm --enablerepo=epel npm install -g n n stable
n コマンドは nvm と似たような node.js のバージョン管理を行ってくれるコマンドです
GitHub - tj/n: Node version management
nvm はサーバーの構築に向いてないと言いましたが、n コマンドは方式が異なっているのでサーバーへのインストールでも問題なく利用できるんです
これについては後の方で説明します
ちなみに、最近個人的にハマりつつある ansible で n コマンドを利用した node.js のインストールを書くとこうなります
github.com
2. n コマンドの使い方
n コマンドの利用方法をざっと説明します
node.js をインストールするために使うだけなのでバージョンの一覧表示とバージョンの切り替えが使えれば十分です
利用できるバージョンの一覧表示
$ n ls
0.8.6
0.8.7
〜 省略 〜
0.12.6
ο 0.12.7
有効になっているバージョン番号の左にοが表示されます
最新安定版をインストール
$ n stable install : node-v0.12.7 mkdir : /usr/local/n/versions/node/0.12.7 fetch : https://nodejs.org/dist/v0.12.7/node-v0.12.7-linux-x64.tar.gz installed : v0.12.7
公式サイトから対応するバージョンのバイナリをダウンロードしてきて配置されます
指定したバージョンへの切り替え
$ n 0.10.40 install : node-v0.10.40 mkdir : /usr/local/n/versions/node/0.10.40 fetch : https://nodejs.org/dist/v0.10.40/node-v0.10.40-linux-x64.tar.gz installed : v0.10.40
既にバイナリがダウンロード済みであればバージョンの切り替えのみ実施されます
3. nvm と n の違い
nvm の仕組み
nvm の仕組みを調べてみたところ、node コマンドの向き先が有効にしたい node.js のバージョンに向くように環境変数を書き換える仕組みになっていました
nvm のコマンドや、ダウンロードしてきた node.js のバイナリは全て実行したユーザーのホームディレクトリに置かれます
node.js のインストールやバージョンの切り替えを行っても、影響があるのは実行ユーザーの領域のみなので そのサーバー内のグローバルな領域には影響がないということが特徴です
ですが、node.js へのパスは実行ユーザーの環境変数にがっつり依存してますし、デーモンとして動かすには使いづらそうな印象を受けます
$ which node /Users/chanmoro/.nvm/versions/node/v0.12.2/bin/node
nvm install 実行すると node.js の公式サイトから該当バージョンのバイナリをダウンロードしてきて、PATH の内容が書き換えられます
$ echo $PATH /Users/chanmoro/.nvm/versions/node/v0.12.2/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin $ nvm install 0.12 ######################################################################## 100.0% Now using node v0.12.7 $ echo $PATH /Users/chanmoro/.nvm/versions/node/v0.12.7/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin $ which node /Users/chanmoro/.nvm/versions/node/v0.12.7/bin/node
nvm use でバージョンを切り替えた場合でも install と同様に PATH の内容が書き換えられます
n コマンドの仕組み
n コマンドは nvm と同様に node.js の公式サイトからビルド済みのバイナリをダウンロードしてきます
そして、有効にするバージョンのバイナリを /usr/local/bin にコピーする仕組みになっています
なので、n コマンドの場合はそのサーバー内のグローバルな領域(/usr/local/binとか)にモジュールが配置されます
手動でのインストール方法とほぼ同じことをやっており、ホームディレクトリ配下にバイナリを置くのでもなく、特定ユーザーのみに有効な環境変数を利用するわけでもないので、かなりいい感じですね
$ which node /usr/local/bin/node $ node --version v0.12.7 $ n 0.10 install : node-v0.10.40 mkdir : /usr/local/n/versions/node/0.10.40 fetch : https://nodejs.org/dist/v0.10.40/node-v0.10.40-linux-x64.tar.gz installed : v0.10.40 $ node --version v0.10.40 $ which node /usr/local/bin/node
nvm はユーザーのみに影響のある領域だけで実現しているのに対し、n はサーバー内のグローバルな領域を使っているという点が大きくことなります
このことからも nvm はあくまで開発用のツールであることが分かると思います
なので、サーバーをセットアップするという点では nvm より n の方がより妥当ということにはなります
Production 環境に node.js のバージョン管理が必要かは別として
※バイナリ落としてきて置くだけなのに大げさじゃね、という感じはありますが・・・
4. まとめ
先ほど紹介した Carbon Five のブログ記事では、node.js を利用する場合のサーバー構成や node.js アプリのデプロイ方法など、かなり実践的な内容が書かれているので参考になると思います
node.js はちょっと前にケンカしてフォークした io.js が生まれたりしてました
その後コアメンバーが一部抜けたりあったようですが、今は仲直りしたそうで今後 node.js に統合するとかでなかなか大変そうな状況っぽいです
javascript 特有の機構がいろいろとあるので node.js がガンとかの話もあるみたいですが、使いどころを間違えなければ僕としては WebAPI やライトなアプリケーションをつくるのに node.js はいい感じだと思っているので今後も頑張っていって欲しいと思ってます
今回はそんな node.js についての記事でした