node.jsのインストールと環境設定(Windows10とLinux)

Windows10 (Local PC)

インストール

8.11.3LTSをダウンロードしてインストールします。(2018-07-27現在)インストーラが起動するので楽ちん。すでにインストールされているnode.jsがある場合は上書きされるっぽい。
https://nodejs.org/en/
インストール終わったら、

$ node -v
v8.11.3

でバージョン確認して終わり。

npmインストール

入っているかどうか見ておく。入ってなかったら入れる。

$ npm -v
5.6.0

ちょっと古いけどOK。

node.jsのテスト

ちょんプロを書いてみる。

// node_test.js
var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello node.js!n');
}).listen(3000, 'localhost');

これを保存して、

node node_test.js

で実行します。設定した

http://localhost:3000/

にアクセスして「Hello node.js!」と表示されていればOKです。

Expressのインストール

グローバルでインストールするときは-gをつける。

npm install -g express
npm install -g express-generator

バージョン

$ express --version
4.16.0

これでいちおう使えるようになっている。

Express実行

テンプレートセットみたいなものをセットアップします。パスが通っていると思うのでexpressと実行するだけです。

express

  warning: the default view engine will not be jade in future releases ← 無視
  warning: use `--view=jade' or `--help' for additional options ← 無視

destination is not empty, continue? [y/N] yes  ← 入力

   create : public
   create : publicjavascripts
   create : publicimages
   create : publicstylesheets
   create : publicstylesheetsstyle.css
   create : routes
   create : routesindex.js
   create : routesusers.js
   create : views
   create : viewserror.jade
   create : viewsindex.jade
   create : viewslayout.jade
   create : app.js
   create : package.json
   create : bin
   create : binwww

   install dependencies:
     > npm install

   run the app:
     > SET DEBUG=bluma:* & npm start

こういうのができます。

-rw-r--r-- 1 dummy 197609 1075 7月  27 15:38 app.js
drwxr-xr-x 1 dummy 197609    0 7月  27 15:38 bin/
-rw-r--r-- 1 dummy 197609  293 7月  27 15:38 package.json
drwxr-xr-x 1 dummy 197609    0 7月  27 15:38 public/
drwxr-xr-x 1 dummy 197609    0 7月  27 15:38 routes/
drwxr-xr-x 1 dummy 197609    0 7月  27 15:38 views/

Expressを実行してみる。もうインストールできている人はnpm update

npm install

npmを立ち上げる

npm start

> bluma@0.0.0 start C:localhostbluma
> node ./bin/www

プロンプトが中断して実行状態になるので、http://localhost:3000/にアクセスしてみる。



ブラウザーでこんなのが出たらOK。
ここまででだいたいnode.jsでいろいろやるやつの基本終わり。

Linux

いろいろ考えてソースからインストールした方がよさそう…な気がしています。バージョン管理がちょっと面倒な気がしますが、もし仮にプロダクト環境だったとしたらそんなに頻繁にバージョンを変えるものではないという認識でございます。

# cd /uer/src
# wget https://nodejs.org/dist/v8.11.3/node-v8.11.3.tar.gz
# tar xvzf node-v8.11.3.tar.gz
# cd node-v8.11.3
# ./configure --prefix=/usr
# make
# make install

これで完了(すごい時間かかります。)
パス確認

# which node
/usr/bin/node

バージョン確認

# node -v
v8.11.3
# npm -v
5.6.0

これでインストール完了

Expressのインストール

ローカルでの作業とほぼ同じ手順になります。

# npm install -g express
+ express@4.16.3

続いてジェネレータも。

# npm install -g express-generator
/usr/bin/express -> /usr/lib/node_modules/express-generator/bin/express-cli.js
+ express-generator@4.16.0
added 10 packages in 1.141s

Express実行

仮にApacheのDocumentRootが/home/user/publicと想定して設定してゆきます。

su user
cd /home/user/public
express
npm install

これでExpressでnode.jsが実行できるようになりました。
デフォルトではlocalhost:3000なので、このまま立ち上げてみましょう。

npm start

コンソール上で利用できるブラウザーがあればlocalhost:3000にアクセスできます。またGUIのあるLinuxサーバーだったらそこからでも実行が確認できます。しかし何もない場合は以下のリバースプロキシを設定しないとWEBサーバーとして公開できません。
うまくリバースプロキシが接続されていない場合は、「Service Unavailable」

Virtualhostの作成と Reverce Proxy

localhostで実行するのはPCなどのローカル開発環境だけです。一人で閲覧できても意味がないWebサイトということでサーバーでは通常のFQDNでアクセスできないと意味がないです。その設定をします。ApacheやnigixなどのWEBサーバーミドルウェアではリバースプロキシの設定をしてあげるのが一番はやいです。スキルが上がってきたとかプロジェクトが大規模になってきたという場合にはnode用のリモートホストを作ってあげたりもっといろいろ複雑になってくるはずです。
まずはApacheでもって、(例)example.comでアクセスできるホストを一つ作りましょう。これについてはここでは割愛。リバースプロキシの設定から説明します。
Virtualhostの設定にリバースプロキシの設定を追加します。

<VirtualHost *:80>
    DocumentRoot /home/user/public
    ServerName example.com
    <Directory "/home/user/public">
        Options All
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

普通はこんな感じでexample.comにアクセスするとDocumentRoot以下のindex*というファイルが実行されます。このときexample.com:80でアクセスしたものをlocalhost:3000にそのまま受け流してあげる設定するのがリバースプロキシの設定です。 On railsとかJavaのフレームワークとかと同じですね。

<VirtualHost *:80>
    DocumentRoot /home/user/public
    ServerName example.com
    <Directory "/home/user/public">
        Options All
        AllowOverride All
        Require all granted
    </Directory>
    <IfModule mod_proxy.c>
        ProxyPass / http://localhost:3000/
        ProxyPassReverse / http://localhost:3000/
    </IfModule>
</VirtualHost>

localhost:3000に接続するように設定してあげればいいだけです。IfModuleはあってもなくてもいいです。
保存してApacheを再起動。それからnpmでexpressというかnode.jsが実行できるように起動します。

npm restart

example.comにアクセスしてExpressの画面が表示できたら成功。

nodeアプリのデーモン化

foreverします。nodeアプリの起動をデーモン化します。
foreverは特にnode.js用のパッケージじゃなくてシェルとかphpとかもデーモン化できます。(できる筈)

initd-foreverインストール

# npm install -g forever initd-forever
# npm install -g log

グローバルでインストールしているのでforeverもグローバルでインストールしておきます。これで準備は完了。

起動スクリプトの生成(たぶん一般的なLinuxOSの場合)

エントリーポイント(node.jsを立ち上げているところ、つまりnpm startするところ)で、実行します。今回は、Expressを実行したDocumentRoot直下になります。

起動
$ forever start app.js
再起動
$ forever restart app.js
停止
$ forever stop app.js
ログ
$ forever logs

.foreverっていうディレクトリが作成されてその中にログが入ってきます。

起動リストの確認
$ forever list
設定確認
$ forever config

nodeサーバー自動起動の設定

起動スクリプトを書いておくのが便利。

touch /etc/systemd/system/node.service

こんな感じか。

[Unit]
Description=node server start
After=syslog.target network.target

[Service]
ExecStart=/usr/bin/forever start /home/user/public/bin/www
WorkingDirectory=/home/user/public
KillMode=process
Restart=always
User=user
Group=user

[Install]
WantedBy=multi-user.target

自動起動の確認

# systemctl list-unit-files --type=service | grep node
kmod-static-nodes.service                     static
node.service                                  disabled

何も設定していないのでdisabledになっていればOK!
自動起動の設定

# systemctl enable node
Created symlink from /etc/systemd/system/multi-user.target.wants/node.service to /etc/systemd/system/node.service.

確認

# sudo systemctl status node
● node.service - node server start
   Loaded: loaded (/etc/systemd/system/node.service; enabled; vendor preset: disabled)
   Active: inactive (dead)

これでサーバー再起動かけてもnodeアプリはちゃんと起動しました。


[Node.js] Webサーバ+アプリ構築が速すぎる件 〜 JSおくのほそ道 #004
expressパッケージとコマンドのインストール

Node.js のインストール(ソースから)
結局のところnode.jsをサーバーにインストールするにはどうやればいいのか?
Amazon EC2上でforeverを使ってexpress verion4.xを使ったnode.jsを動かす

[Sy] node.jsのアプリをforever.jsでdaemon化する手順
https://qiita.com/you21979@github/items/588bddb59378ce7303a2
ちょっとした小技で効率UP——アプリケーションをデーモン化〈Node.jsシリーズ vol.7〉

Last update: 2018.07.30 (月)