MEANスタック

MEANスタックと呼ばれている次世代のLAMPみたいなものがあって、

  • MongoDB
  • Express
  • AngularJS
  • Nodejs

というものがあります。調べれば情報が山程出てくるので、それはそちらに任せることにして、ここでは別な感じでいろいろ説明します。ノンブロッキングとイベントループ、ワンスレッドというのが今までとちょっと違うところなわけですが、どっちにしろwebという概念の中での話になってくるのでここらを説明してゆきます。あんまり関係ないと思いますが、以下の環境でいろいろやってます。Rethat LinuxとかCentOS6でもあんまりかわらない感じしてます。

  • Ubuntu 14.01
  • node v6.2.1
  • npm 3.9.3
  • Apache 2.4.18 (Ubuntu)

バーチャルホスト

IPに対してhostというものがあるわけですが、nodejsのhttp.createServerみたいな感じでサーバーオブジェクトのlistenではIPアドレスを返します。当然DNSがいろいろ工面してくれて普通のドメインでアクセスが可能であります。でありますが、そもそもApacheと仕組みが全く違うために通常どこのサイトでもチュートリアルを見るとポート1337とかでnodejsの処理などが行われております。ですがnodejsも80でアクセスしたいというのが普通の人の普通の感情といったところです。

プロキシを使ってこんな感じで設定するのがよいです。

node-http-proxy (Port 80)
│
├─Apache  (Port 8080) example.com, apache.example.com
└─Node.js (Port 8081) node.example.com

Apacheとnodejsの併用

ここらはApacheと併用しつつ(nginxとかでもいいんですが)向こう側からは普通のWEBページとして見えるようにプロキシでもってサーバー内で調整してあげます。そもそもポート80はデフォルトではrootしか使えないようになっています。(ん?あるいはApacheかな)なので、nodejsのように通常のユーザー権限でcreateServerとかやると80ポートが使えないって話なんです。なのでいわゆるwheelグループ(rootになれるグループ)にnodejsのユーザーを加えてあげる必要があります。
ちょっと頭のいい人だったらApacheの方でリバースプロキシ設定すればいいだろうと思うかもしれません。これも実際できちゃうんですね。しかしWebSocketを使い出すと動かなくなります。なので最初からnode-http-proxyでやっておいた方がよろしいかと。

# vi /etc/pam.d/su

# auth       required   pam_wheel.so deny group=nosu
↓
auth       required   pam_wheel.so group=wheel

wheelグループ作成、root追加、ユーザー追加

# addgroup wheel
# usermod -a -G wheel roo
# usermod -a -G wheel root
# usermod -G wheel node

追加したユーザーのIDを確認

# id -u node
1001

リバースプロキシ

npmでプロキシサーバを設定できるパッケージを落としてきます。これで半端なポートを80でリバースプロキシしてあげるというわけです。

# npm install -g http-proxy
# npm link http-proxy

一応ちゃんとインストールされたか確認する

# npm ls -g | grep http

http://qiita.com/ytakzk/items/e4422555549b069e3d90

Last update: 2016.06.10 (金)