Ubuntu にバンドルされている Node.js で利用すると、バージョンを自由に選べない。Googleで調べたらndenv という pyenv や rbenv に良く似たツールがあったので使ってみた。
参照サイト GitHub riywo/ndenv https://github.com/riywo/ndenv
作業ディレクトリ
一般ユーザーのホームディレクトリにインストールします。 いろいろ共存です。
tkr@tkr02:~$ ls -la
合計 64
drwxr-xr-x 9 tkr tkr 4096 1月 2 11:17 .
drwxr-xr-x 3 root root 4096 1月 2 07:58 ..
-rw------- 1 tkr tkr 1903 1月 2 18:15 .bash_history
-rw-r--r-- 1 tkr tkr 220 1月 2 07:58 .bash_logout
-rw-rw-r-- 1 tkr tkr 152 1月 2 08:32 .bash_profile
-rw-r--r-- 1 tkr tkr 3637 1月 2 07:58 .bashrc
drwx------ 3 tkr tkr 4096 1月 2 08:23 .cache
drwx------ 2 tkr tkr 4096 1月 2 09:15 .emacs.d
drwxrwxr-x 3 tkr tkr 4096 1月 2 09:08 .gem
-rw-r--r-- 1 tkr tkr 675 1月 2 07:58 .profile
drwxrwxr-x 12 tkr tkr 4096 1月 2 08:30 .pyenv
drwxrwxr-x 12 tkr tkr 4096 1月 2 08:43 .rbenv
-rw------- 1 tkr tkr 174 1月 2 08:47 .softlayer
drwxr-xr-x 2 tkr tkr 4096 1月 2 08:02 .ssh
drwxr-xr-x 2 root root 4096 1月 2 11:16 .vim
-rw------- 1 tkr tkr 2297 1月 2 11:17 .viminfo
GitHub からツールをクローン
tkr@tkr02:~$ git clone https://github.com/riywo/ndenv ~/.ndenv
Cloning into '/home/tkr/.ndenv'...
remote: Counting objects: 63, done.
remote: Total 63 (delta 0), reused 0 (delta 0), pack-reused 63
Unpacking objects: 100% (63/63), done.
Checking connectivity... done.
ログインシェルに設定を追加
tkr@tkr02:~$ echo 'export PATH="$HOME/.ndenv/bin:$PATH"' >> ~/.bash_profile
tkr@tkr02:~$ echo 'eval "$(ndenv init -)"' >> ~/.bash_profile
tkr@tkr02:~$ exec $SHELL -l
tkr@tkr02:~$ ndenv -v
ndenv 0.4.0-4-ga339097
GitHub から node-build をクローン
tkr@tkr02:~$ git clone https://github.com/riywo/node-build.git ~/.ndenv/plugins/node-build
Cloning into '/home/tkr/.ndenv/plugins/node-build'...
remote: Counting objects: 68, done.
remote: Total 68 (delta 0), reused 0 (delta 0), pack-reused 68
Unpacking objects: 100% (68/68), done.
Checking connectivity... done.
導入可能なバージョンをリストする
tkr@tkr02:~$ ndenv install -l
Available versions:
v0.1.14
v0.1.15
中略
v0.12.4
v0.12.5
v0.12.6
v0.12.7
v0.12.8
v0.12.9
中略
iojs-v3.2.0
iojs-v3.3.0
iojs-v3.3.1
中略
バージョンを指定してインストール
最後におまじないの rehash を忘れない様にとね。
tkr@tkr02:~$ ndenv install v0.12.9
Downloading node-v0.12.9-linux-x64.tar.gz...
-> https://nodejs.org/dist/v0.12.9/node-v0.12.9-linux-x64.tar.gz
Installing node-v0.12.9-linux-x64...
Installed node-v0.12.9-linux-x64 to /home/tkr/.ndenv/versions/v0.12.9
tkr@tkr02:~$ ndenv rehash
導入されているか確認
tkr@tkr02:~$ ndenv versions
v0.12.9
tkr@tkr02:~$ ndenv global v0.12.9
tkr@tkr02:~$ node -v
v0.12.9
テストぺージ作成
FWの設定追加
OSファイアウォールに TCP/8080 を開く様に設定
tkr@tkr02:~$ sudo -s
root@tkr02:~# ufw allow 8080
ルールを追加しました
ルールを追加しました (v6)
root@tkr02:~# ufw status
状態: アクティブ
To Action From
-- ------ ----
Anywhere ALLOW 10.0.0.0/8
80 ALLOW Anywhere
1883 ALLOW Anywhere
8080 ALLOW Anywhere
80 (v6) ALLOW Anywhere (v6)
1883 (v6) ALLOW Anywhere (v6)
8080 (v6) ALLOW Anywhere (v6)
httpサーバーのコード
HTTPサーバーの最も簡単なコードを作成します。
server.js
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(8080, '0.0.0.0');
node.js上で httpサーバーの実行
上記で作ったコードをnodeコマンドの引数に与えて実行します。簡単にHTTPサーバーができてるので、ちょっとビックリ!
tkr@tkr02:~$ node server.js
ブラウザからの確認
IPアドレスかドメイン名でアクセスして確認します。 Hello World が表示されていれば成功です。
npmも使ってみる
tkr@tkr02:~$ npm install mqtt --save
> utf-8-validate@1.2.1 install /home/tkr/node_modules/mqtt/node_modules/websocket-stream/node_modules/ws/node_modules/utf-8-validate
> node-gyp rebuild
make: ディレクトリ `/home/tkr/node_modules/mqtt/node_modules/websocket-stream/node_modules/ws/node_modules/utf-8-validate/build' に入ります
CXX(target) Release/obj.target/validation/src/validation.o
SOLINK_MODULE(target) Release/obj.target/validation.node
COPY Release/validation.node
make: ディレクトリ `/home/tkr/node_modules/mqtt/node_modules/websocket-stream/node_modules/ws/node_modules/utf-8-validate/build' から出ます
> bufferutil@1.2.1 install /home/tkr/node_modules/mqtt/node_modules/websocket-stream/node_modules/ws/node_modules/bufferutil
> node-gyp rebuild
make: ディレクトリ `/home/tkr/node_modules/mqtt/node_modules/websocket-stream/node_modules/ws/node_modules/bufferutil/build' に入ります
CXX(target) Release/obj.target/bufferutil/src/bufferutil.o
SOLINK_MODULE(target) Release/obj.target/bufferutil.node
COPY Release/bufferutil.node
make: ディレクトリ `/home/tkr/node_modules/mqtt/node_modules/websocket-stream/node_modules/ws/node_modules/bufferutil/build' から出ます
mqtt@1.6.3 node_modules/mqtt
├── inherits@2.0.1
├── reinterval@1.0.2
├── xtend@4.0.1
├── minimist@1.2.0
├── commist@1.0.0 (leven@1.0.2)
├── readable-stream@1.0.33 (isarray@0.0.1, string_decoder@0.10.31, core-util-is@1.0.2)
├── end-of-stream@1.1.0 (once@1.3.3)
├── mqtt-packet@3.4.4 (bl@0.9.4)
├── help-me@0.1.0 (pump@1.0.1)
├── mqtt-connection@2.1.1 (through2@0.6.5, reduplexer@1.1.0)
├── concat-stream@1.5.1 (typedarray@0.0.6, readable-stream@2.0.5)
└── websocket-stream@2.3.0 (through2@2.0.0, duplexify@3.4.2, ws@0.8.1)