CentOS 6.5でのnode.js環境構築 – その1

CentOS 6.5でのnode.js環境構築 – その1

環境説明

今回は、MacOS Merveric上のVMware Fusionで、CentOS 6.5をminimalインストールした環境に環境構築していく。
ただのお試しであれば、MacOS上でやっても良かったのだが、今後の汎用性を考えてCentOSを選択。
以下、手順です。

CentOS 6.5 minimalインストール

注意点

インストール時の注意としては、ホスト名を指定する画面で、ネットワーク設定を行っておくことです。
デフォルトでは、eth0が起動時にONになっていないため、何も設定変更せずインストールを終わらせてしまうと、
後から、eth0のインターフェース設定を行う必要が出てきます。(ま、後からでも良いのですが)

CentOS 6.5インストール後の作業

ユーザーの追加

インストーラでは、ユーザ追加の画面がありませんので、最初はrootでログインして、作業用ユーザーを作成しておきます。

wgetのインストール

これから何かと活躍するであろう、wgetをまずは、yumでインストールしておきます。

Developer Toolのインストール

ソースからコンパイルする際に必要となるgccなどをインストールします。昔は必要なパッケージだけ導入するといったことをしてましたが、最近は、カテゴリを指定して一括で導入することが一般的なようですので、それに倣います。

node.jsの導入

node.jsのソースコードを入手

現時点で、最新の0.10.32をダウンロードします。

$ wget http://nodejs.org/dist/v0.10.32/node-v0.10.32.tar.gz
--2014-09-28 06:46:33--  http://nodejs.org/dist/v0.10.32/node-v0.10.32.tar.gz
nodejs.org をDNSに問いあわせています... 165.225.133.150
nodejs.org|165.225.133.150|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 13585240 (13M) [application/octet-stream]
`node-v0.10.32.tar.gz' に保存中</p>

<p>100%[======================================>] 13,585,240   918K/s 時間 17s     </p>

<p>2014-09-28 06:46:51 (767 KB/s) - `node-v0.10.32.tar.gz' へ保存完了 [13585240/13585240]

node.jsのソースコードの展開

$
$ tar -zxvf node-v0.10.32.tar.gz
node-v0.10.32/
node-v0.10.32/ChangeLog
node-v0.10.32/src/
node-v0.10.32/src/node<em>buffer.cc
node-v0.10.32/src/macros.py
node-v0.10.32/src/node</em>internals.h
node-v0.10.32/src/req<em>wrap.h
node-v0.10.32/src/timer</em>wrap.cc</p>

<p> (以下、略)</p>

<p>$ ls
node-v0.10.32  node-v0.10.32.tar.gz

以下のように、node-v0.10.32というディレクトリに展開されます。

[user@centos65 node-v0.10.32]$ cd node-v0.10.32
[user@centos65 node-v0.10.32]$ ls
AUTHORS          ChangeLog  README.md    configure  lib       test
BSDmakefile      LICENSE    benchmark    deps       node.gyp  tools
CONTRIBUTING.md  Makefile   common.gypi  doc        src       vcbuild.bat

node.jsのコンパイル

順序としては、おなじみの、./configure、make、make installです。

[user@centos65 node-v0.10.32]$ ./configure
[user@centos65 node-v0.10.32]$ make
[user@centos65 node-v0.10.32]$ sudo make install

注意点としては、make installで、ファイルをコピーしますが、コピー先の権限が必要ですのでsudoしています。

[user@centos65 node-v0.10.32]$ sudo make install
[sudo] password for user:
make -C out BUILDTYPE=Release V=1
make[1]: ディレクトリ <code>/home/user/node-v0.10.32/out' に入ります
make[1]:</code>all' に対して行うべき事はありません.
make[1]: ディレクトリ `/home/user/node-v0.10.32/out' から出ます
ln -fs out/Release/node node
/usr/bin/python tools/install.py install
installing /usr/local/bin/node
installing /usr/local/share/man/man1/node.1
installing /usr/local/lib/node<em>modules/npm/configure
installing /usr/local/lib/node</em>modules/npm/make.bat
installing /usr/local/lib/node<em>modules/npm/.travis.yml
installing /usr/local/lib/node</em>modules/npm/package.json
installing /usr/local/lib/node<em>modules/npm/CHANGELOG.md

 (中略)

installing /usr/local/include/node/zconf.h
installing /usr/local/include/node/zlib.h

node.js導入の確認

インストールが終わったら、コマンドを実行して確認します。

[user@centos65 node-v0.10.32]$ node -v
v0.10.32

あと、npmというパッケージマネージャーも導入されいます。

[user@centos65 node-v0.10.32]$ npm</p>

<p>Usage: npm <command></p>

<p>where <command> is one of:
    add-user, adduser, apihelp, author, bin, bugs, c, cache,
    completion, config, ddp, dedupe, deprecate, docs, edit,
    explore, faq, find, find-dupes, get, help, help-search,
    home, i, info, init, install, isntall, issues, la, link,
    list, ll, ln, login, ls, outdated, owner, pack, prefix,
    prune, publish, r, rb, rebuild, remove, repo, restart, rm,
    root, run-script, s, se, search, set, show, shrinkwrap,
    star, stars, start, stop, submodule, t, tag, test, tst, un,
    uninstall, unlink, unpublish, unstar, up, update, v,
    version, view, whoami</p>

<p>npm <cmd> -h     quick help on <cmd>
npm -l           display full usage info
npm faq          commonly asked questions
npm help <term>  search for help on <term>
npm help npm     involved overview</p>

<p>Specify configs in the ini-formatted file:
    /home/user/.npmrc
or on the command line via: npm <command> --key value
Config info can be viewed via: npm help config</p>

<p>npm@1.4.28 /usr/local/lib/node_modules/npm
[user@centos65 node-v0.10.32]$

次にnode.jsの実行と終了ですが、nodeコマンドを実行するとインタプリターが表示されますが、終了の方法は、.exitもしくは、Ctrl+Dとなります。

[user@centos65 node-v0.10.32]$ node
></p>

<blockquote>
  <p>.exit
[user@centos65 node-v0.10.32]$

expressの導入

node.js環境で広く使われているWebアプリケーションフレームワークの「Express」を導入します。

[user@centos65 ~]$ sudo /usr/local/bin/npm -g install express-generator
/usr/local/bin/express -> /usr/local/lib/node<em>modules/express-generator/bin/express
express-generator@4.9.0 /usr/local/lib/node</em>modules/express-generator
├── mkdirp@0.5.0 (minimist@0.0.8)
└── commander@1.3.2 (keypress@0.1.0)
[user@centos65 ~]$

以前は、「npm install express」という表記、つまり、-generatorなしで導入できたようです。
少し古めのblog記事などを参照する際は、気をつけておいた方が良いと思います。

上記、npm installが完了すると、以下のようにexpressコマンドがインストールされます。

[user@centos65 ~]$ which express
/usr/local/bin/express
[user@centos65 ~]$

expressを使ってみる

ここでは、sampleアプリケーションをexpressを使って作成してみます。

sampleアプリケーションの作成

[user@centos65 ~]$ express sample</p>

<p>create : sample
   create : sample/package.json
   create : sample/app.js
   create : sample/public
   create : sample/public/javascripts
   create : sample/public/images
   create : sample/public/stylesheets
   create : sample/public/stylesheets/style.css
   create : sample/routes
   create : sample/routes/index.js
   create : sample/routes/users.js
   create : sample/views
   create : sample/views/index.jade
   create : sample/views/layout.jade
   create : sample/views/error.jade
   create : sample/bin
   create : sample/bin/www</p>

<p>install dependencies:
     $ cd sample && npm install</p>

<p>run the app:
     $ DEBUG=sample ./bin/www

sampleディレクトリが作成され、sampleアプリケーションに必要なファイルが自動的に生成されています。

[user@centos65 ~]$ cd sample/
[user@centos65 sample]$ ls
app.js  bin  package.json  public  routes  views

また、sample作成時に表示されている通り、依存関係を確認し必要モジュールをインストールするため、npm installを実行します。

[user@centos65 sample]$ npm install
debug@2.0.0 node_modules/debug
└── ms@0.6.2</p>

<p>cookie-parser@1.3.3 node_modules/cookie-parser
├── cookie-signature@1.0.5
└── cookie@0.1.2</p>

<p>morgan@1.3.1 node_modules/morgan
├── basic-auth@1.0.0
├── depd@0.4.5
└── on-finished@2.1.0 (ee-first@1.0.5)</p>

<p>serve-favicon@2.1.5 node_modules/serve-favicon
├── ms@0.6.2
├── fresh@0.2.4
└── etag@1.4.0 (crc@3.0.0)</p>

<p>body-parser@1.8.4 node_modules/body-parser
├── bytes@1.0.0
├── media-typer@0.3.0
├── raw-body@1.3.0
├── depd@0.4.5
├── qs@2.2.4
├── iconv-lite@0.4.4
├── on-finished@2.1.0 (ee-first@1.0.5)
└── type-is@1.5.1 (mime-types@2.0.1)</p>

<p>express@4.9.5 node_modules/express
├── fresh@0.2.4
├── utils-merge@1.0.0
├── merge-descriptors@0.0.2
├── cookie@0.1.2
├── escape-html@1.0.1
├── range-parser@1.0.2
├── cookie-signature@1.0.5
├── media-typer@0.3.0
├── vary@1.0.0
├── parseurl@1.3.0
├── methods@1.1.0
├── serve-static@1.6.3
├── finalhandler@0.2.0
├── path-to-regexp@0.1.3
├── depd@0.4.5
├── on-finished@2.1.0 (ee-first@1.0.5)
├── qs@2.2.4
├── etag@1.4.0 (crc@3.0.0)
├── proxy-addr@1.0.3 (forwarded@0.1.0, ipaddr.js@0.1.3)
├── accepts@1.1.0 (negotiator@0.4.7, mime-types@2.0.1)
├── type-is@1.5.1 (mime-types@2.0.1)
└── send@0.9.3 (destroy@1.0.3, ms@0.6.2, mime@1.2.11)</p>

<p>jade@1.6.0 node_modules/jade
├── character-parser@1.2.0
├── void-elements@1.0.0
├── commander@2.1.0
├── mkdirp@0.5.0 (minimist@0.0.8)
├── transformers@2.1.0 (promise@2.0.0, css@1.0.8, uglify-js@2.2.5)
├── constantinople@2.0.1 (uglify-js@2.4.15)
├── with@3.0.1 (uglify-js@2.4.15)
└── monocle@1.1.51 (readdirp@0.2.5)
[user@centos65 sample]$

次に、表示されていた通り、sampleアプリケーションを起動します。

[user@centos65 sample]$ DEBUG=sample ./bin/www
  sample Express server listening on port 3000 +0ms</p>

<p>

iptablesの設定追加

どうやら、port 3000で起動するようですので、外部からのアクセスを許可するため、iptablesの設定が必要です。
別のシェルからでも良いですし、一旦、sampleをCtrl+Cで停止してシェルに戻ってからでも良いので、/etc/sysconfig/iptablesを編集します。

^C[user@centos65 sample]$
[user@centos65 sample]$ sudo vi /etc/sysconfig/iptables

22番ポートが許可されている下に、3000番ポートへのアクセスを許可する設定を追加します。

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3000 -j ACCEPT

10行目の「–dport 22」とある行にカーソルを移動させ、y``y``pとキー入力します。
すると、同じ行が追加されます。次に追加した行の22の最初の2の部分にカーソルを移動し、x``xとキー入力します。
次に、iとキー入力し、画面下に、「– INSEET –」と表示されていることを確認して、3``0``0``0と入力します。
編集した内容に問題ないことを確認し、キーボードのescキーを押します。画面下の「– INSEET –」という表記が消えることを確認します。
次に、:``w``qとキー入力します。画面下に「:wq」と表示されていることを確認して、エンターキーを押します。
これで、編集が終わり、保存されました。

iptablesの再起動

設定を追加しましたので、iptablesを再起動して有効にします。

[user@centos65 sample]$ sudo /etc/init.d/iptables restart
[sudo] password for user:
iptables: チェインをポリシー ACCEPT へ設定中filter         [  OK  ]
iptables: ファイアウォールルールを消去中:                  [  OK  ]
iptables: モジュールを取り外し中:                          [  OK  ]
iptables: ファイアウォールルールを適用中:                  [  OK  ]
[user@centos65 sample]$

CentOSのeth0が掴んでいるIPアドレスを確認します。

[user@centos65 sample]$ ifconfig

ここで出力される、eth0の「inet addr:」に記載されているIPアドレスを確認します。
例)inet addr:192.168.5.75

expressのsampleアプリケーションへのアクセスを確認

一旦止めていた場合は、以下のようにsampleアプリケーションを起動します。

[user@centos65 sample]$ DEBUG=sample ./bin/www
  sample Express server listening on port 3000 +0ms</p>

<p>

この状態で、MacOS上のブラウザから先ほど確認したIPアドレス宛にリクエストを出します。
URLの例)http://192.168.5.75:3000

すると、味気ないですが、
「Express
Welcome to Express」
とブラウザ上に表示されます。

以上で、一通りの環境構築を完了します。

以下、参考になりそうな本の紹介
※まだ本人は読んでません…。

[tmkm-amazon]4797370904[/tmkm-amazon]

[tmkm-amazon]4873116732[/tmkm-amazon]

[tmkm-amazon]4774153206[/tmkm-amazon]