// //

AWSにてnode.js, express4.xをインストールしてhttps接続を行う

Amazon EC2にてインスタンス起動

インスタンス作成

EC2コンソールからインスタンスを作成。

Keyの作成

putty使用場合pemをputtygenにてppkに変換。

Securty Groupの設定

とりあえずinboundのsshhttpsとCustom TCP Ruleで3000ポートを開放。

ログイン設定

puttyの設定(Windows)

SSH接続のためにインスタンス作成時に作ったKey(.ppk)を設定しておく。

SSH CONFIGの設定(MAC)

.sshディレクトリのconfigファイルに下記を記載

	Host (ssh接続時に使用する任意のホスト名)
		HostName  	(作成したインスタンスのIP)	
		Port      	22
		User		ec2-user
		IdentityFile	(インスタンス作成時に作ったKeyの配置場所)

ターミナルを起動後に「ssh (上記Host)」でログイン可能。

準備

インスタンス内モジュールのアップデート
$ sudo yum update		
gitのインストール
$ sudo yum install git
nvmのインストール

・gitリポジトリからクローン

$ git clone https://github.com/creationix/nvm.git ~/.nvm

・コマンド対応

$ source ~/.nvm/nvm.sh
node.jsのインストール

・node.jsのリリースバージョン確認

$ nvm ls-remote

・対象となるnode.jsのインストール

$ nvm install v[バージョンNo]
PM2のインストール(グローバル)
$ npm install pm2@latest -g
expressのインストール
$ npm install express

expressコマンドのインストール(グローバル)

$ npm install -g express-generator
ログイン後用設定

・nvmのコマンドを使用可能にする

$ source ~/.nvm/nvm.sh

・node.jsやnpmのコマンドを使用可能にする

$ nvm use v[バージョンNo]


・再起動後のbash: xxx command not found対策
.bash_profile もしくは .bashrc

source ~/.nvm/nvm.sh
nvm use v[バージョンNo]

expressアプリケーションを作成

expressコマンドを使わずシンプルなコードで確認

適当なディレクトリを作成して下記ファイルを配置

app.js

	
		var express = require('express');
		var app = express();
		var port = 3000;

		app.get('/', function (req, res) {
		  res.send('Hello, World!');
		});
		app.get('/port', function(req, res) {
		        res.send(String(port));
		});

		app.listen(port);
		console.log("server starting...port:"+ port);


package.json


		  "name": "express-sample",
		  "version": "0.0.1",
		  "private": true,
		  "scripts": {
		    "start": "node app"
		  },
		  "dependencies": {
		    "express": "*"
		  }
		}

起動
$ pm2 start app.js

確認

・ブラウザでの確認
 awsのPublic DNSを確認
 ブラウザで「http://[Public DNS]:3000/」を実行
・pm2での確認

$ pm2 ls

expressコマンドにて作成したアプリの確認

アプリ作成
$ express [アプリ名]

起動
$ npm start
PM2でデーモン化して起動

・pm2起動用準備
 express4.xのexpressコマンドで作成したアプリはそのままではpm2での起動ができない。
 原因は、初期起動用の [アプリ名]/bin/www に拡張子が付いていないため(人に教えていただきました。)
 なので、バックアップついでに拡張子を付与する。

$ cd bin/
$cp ./www ./www.js

・pm2で起動

$ pm2 start wwww.js

・確認

$ pm2 ls

httpsでのアクセス

証明書を作成
$ openssl genrsa -aes128 1024 > server.pem
$ openssl req -new -key server.pem> server.csr
$ openssl x509 -in server.csr -days 365 -req -signkey server.pem > server.crt 
$ openssl rsa -in server.pem -out server.rsa
https用にwww.jsを書き換え

・作成した証明書類を適当なディレクトリで管理


www.js

var debug = require('debug')('web');
var https = require('https');
var app = require('../app');
var fs = require('fs');

var port = 3000;
var options = {
        key: fs.readFileSync('../keys/server.rsa'),
        cert: fs.readFileSync('../keys/server.crt')
};

//var server = app.listen(app.get('port'), function() {
https.createServer(options, app).listen(port);


参考

FiS Project
http://www.fisproject.jp/2014/10/%E3%80%90nodejs%E3%80%91koa%E3%81%A7https%E3%82%B5%E3%83%BC%E3%83%90%E3%82%92%E5%BB%BA%E3%81%A6%E3%82%8B%E3%80%90ssltls%E3%80%91/