🧊

NiftyCloudにNodeのサーバーを立てる

とある事情でやることになって、色々あったのでメモっとく。

前提

まず以下が揃ってる前提です。

  • サーバーインスタンス作成済み(今回はUbuntu)
  • .pem: sshのキーみたいなもん
  • pp: いわゆるパスワード
  • ユーザー名: `root`かな?
  • サーバーのIPアドレス
  • あきらめない心
  • あきらめない心!!

サーバーに接続する

ssh -Ai ./path/to/<PEM>.pem <USERNAME>@<IP>

どうせgitで使うやろうし -A にしておく。
なんかダイアログ出たらpemとセットのパスワードをいれる。

いろいろインストール

無事にログインできましたが、この時点では空っぽです。
Gitすら入ってないので入れます。

今回はrootであるていです。

# Git(Ubuntuなのでapt-get)
apt-get install git

# きっとNodeなので
curl -L git.io/nodebrew | perl - setup
# 入ったら.bashrcにパス追記

# お好きなNodeインストール
# nodebrew install-binary -> use

とりあえずNodeが動いたらよし。

ファイアウォールの設定

これでOKかと思いきや、もひとつ関所です。

サーバー作成直後のセキュリティ設定はどうなってますか? | ニフティクラウド

これによると、

ufwがデフォルトで有効になっており、22番接続のみ許可しております。

らしいので、ポートの設定をしなきゃいけません。

ufwとは

CentOS一筋でiptablesを直で触るしか知らなかったので、最初戸惑いました。
ufwiptablesの設定を楽にやってくれるラッパみたいなもので、便利ですコレ!

# 設定状況をチェック
ufw status

# 設定の反映(でも実際打たなくても反映されてる気がする)
ufw reload

# 停止
ufw disable

# 起動
ufw enable

初期状態では、

# ufw statusすると
Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere
22                         ALLOW       Anywhere (v6)

てな具合に、22番しか空いてないのが確認できると思うので、そこに追加を。
今回は雑に80番ポートで動かしていきます。

ufw allow 80

# もうちょっと詳細にしたいならこんな感じに
# ufw allow from XXX.XXX.XXX.XXX    to any port 80

これでおっけー。
iptablesのコマンドとか一切打つ必要ないです。

あとはNodeのアプリを

立てればおっけー。

しかしこの記事を書きたいモチベーションはこっから先にあります。

トラブルシューティング

Nodeのサーバーほんとに立ってる?

node server.js

これで本当にサーバー立ってるのか調べたいとき。

netstat -untap | grep node

これでなんてホストのなんてポートで動いてるかわかる。

FireWallではじかれてる?

ufwで開放する前後で、ほんとに設定反映できてるのか調べたいとき。

tail -f /var/log/ufw.log

ここにログが出てるので見たらわかる。

Nodejs.orgのサンプル!!!

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');

これ、ほんとよろしくない!

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337, function() {
  console.log('Server running at port:1337');
});

こうすべきですよね!

以上、.listen()でホスト名を指定してしまい、悪くないFireWallの設定を調べ続け2時間を無駄にした人の備忘録でした。