さくらVPSでnode.jsをインストール＆nginxのリバースプロキシでポート80で動かすまでメモ


node.jsでのwebアプリケーションはポート1024番以降でしかデフォルトでは利用出来ず`http://アドレス:ポート`という形式でしかアクセス出来ません．これがかっこわるいので通常の`http://アドレス`でアクセス出来るようにします．
参考:[Node.jsで 80番ポートをListenするWebサーバを作る | 元祖ワシ的日記 4.0](http://ror.hj.to/s/content/issei/entry/201205/5566-06ddd4463f2a5084e4ab2f550863cce1)

さくらVPSでクリーンインストールする機会があったのでメモします．

##さくらVPS契約
省略

##VPSマシンを起動
さくらインターネットの会員メニューから
[契約情報] -> [契約サービスの確認]のページへ
https://secure.sakura.ad.jp/menu/service/?mode=S1010

ページ下部に契約している内容が表示されると思うので，サーバー設定を選択しましょう．
![](http://gyazo.com/877dcc204d2b0162512185d56090d86c.png)

VPSのコントロールパネルでマシン起動
https://secure.sakura.ad.jp/vpscontrol/main/

起動ボタンを押して起動させましょう．
![](http://gyazo.com/3407d32639247d51cf9d89da0866bb11.png)

##独自ドメイン設定
管理しているドメイン名一覧でゾーン編集を選択
https://secure.sakura.ad.jp/menu/domain/

![](http://gyazo.com/d62dabb69b973b0d1036b538489d87a6.png)

さくらインターネットのネームサーバを設定する からサーバーのIPアドレスを入力して送信すればOK
![](http://gyazo.com/aa36b814ce827b23a3721602b118720c.png)

少しすると http://example.com/ でアクセスできるようになります．(ある程度時間が掛かるみたいです)

参考: [さくらのVPSに独自ドメインを設定してみた](http://vps-karuma.net/sakura/sakura-vps/3726/)

##初期設定

###sshでリモートログインして作業する

```
$ssh root@契約したVPSのIPアドレス or ↑で設定したドメイン
```

```
$ ssh root@example.com
root@example.com's password: (←契約した時にさくらからメールに送られてくるVPSのパスワード)
```

これでサーバーにログインできると思います

参考
http://www.xn--vps-073b3a72a.com/4.html

あとは参考サイトをもとに，
rootのパスワード変更, ユーザーを作成，などを行いました．

##node.jsのインストール
###nvmのインストール
```
$git clone git://github.com/creationix/nvm.git ~/.node
$ . ~/.node/nvm.sh
```

###node.jsのインストール
```
$nvm install 0.10.22
```

###expressのインストール
```
$npm -g install express
```

参考: http://offsidenow.phpapps.jp/archives/1687

##hello world
```
$express -e test
$cd test
$npm install
$node app.js
```
を実行し，
http://example.com:3000/ にアクセスしてexpressのページが表示されればOK
![](http://gyazo.com/3853056a2b593a5dbf4f7d5821ecb1d7.png)

##nginxのインストール
ポート3000アクセスはかっこわるいので80ポートでアクセスさせます．

デフォルトのポート80番にアクセスしても，Apacheなどのwebサーバーが入ってないのでアクセス出来ない状態です．また，node.jsのhttpポートを80には設定出来ないようなので勉強がてらnginxを入れてみました．
参考サイトの通りにやったらエラーなくインストールできました．

参考 :[CentOS6で最新版のnginxをyumでインストールする - 飲んだり寝たり](http://nomnel.net/blog/install-nginx-in-centos6-using-yum/)

##nginxでリバースプロキシ
###nginxの設定ファイルを編集

```
$ sudo vim /etc/nginx/nginx.conf
```

```nginx.confの初期ファイル
user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}
```
ここのhttp{}の内部に以下を追記する

```
server {
     listen      80 default;
     server_name  example.com;
     location / {
        proxy_pass http://example.com:3000;
     }
    }
```

nginxの起動

```
$ sudo service nginx start
```

※ちなみにミスってhttp{}の外にserver{}を記述したら
`"server" directive is not allowed here`とか言われました．

参考:[popowa: [emerg] "server" directive is not allowed hereて言われたら](http://blog.popowa.com/2013/09/emerg-server-directive-is-not-allowed.html)
参考:[nginx連載4回目: nginxの設定、その2 - バーチャルサーバの設定](http://heartbeats.jp/hbblog/2012/04/nginx04.html)


これで http://example.com にアクセスすることで http://example.com:3000/ で起動しているnode.js+expressのアプリケーションにアクセス出来ます．