pm2とTypeScriptによる環境構築

2019-03-14 11:39:04

 Node.js自体のインストールに関しては、サーバ構築系のCentOSとUbuntuの項目を参照してください。Windowsに関してはこのサイトで解説しなくても、VSCodeとNode.jsのインストールプログラムを実行するだけなので問題ないと思われます。

TypeScriptのインストール

2019-03-14 15:31:25

Node.jsでパッケージを追加する場合は、パッケージマネージャであるnpmを使います。


npm install -g typescript ts-node


 -gでグローバルインストールします。typescriptはNode.jsでTypeScriptを使うためのモジュール、ts-nodeは.tsファイルを直接実行するのに必要になります。ただし、後述するpm2を利用する場合は、ここで組み込んだものは使われません。pm2コマンドを使う必要があります。

サンプルアプリケーションの作成

2019-03-14 15:40:09

 まずNode.jsでパッケージ情報を保存するためのpackage.jsonファイルを作成します。


 npm -y init


 package.jsonの中身に関しては、テストだけならとりあえずデフォルト状態で大丈夫です。

 次に追加で必要なパッケージのインストールを行います。

npm install @types/node


 これを入れないとTypeScriptから標準パッケージを呼び出そうとするときに、ことごとくエラーになってしまいます。

サンプルの作成と実行

2019-03-14 15:38:31

index.ts
const SOCK_PATH = ''    //ドメインソケットを使用する場合は、ファイルパス
const SOCK_PORT = 8000    //ポート番号(ドメインソケットを使用する場合は、null)
import * as fs from 'fs'
import * as http from 'http'

var server = http.createServer()
server.on('request',function(req,res) {
    res.writeHead(200)
    res.write('<html><body>Hello world</body></html>\n')
    res.end()
})

if(!SOCK_PORT){
    //UNIXドメインソケットだった場合
    try{fs.unlinkSync(SOCK_PATH)}catch(e){} //ソケットファイルの削除
    server.listen(SOCK_PATH)                   //ソケットの待ち受け設定
    fs.chmodSync(SOCK_PATH, '666')          //アクセス権の変更
}else{
    server.listen(SOCK_PORT)                   //ソケットの待ち受け設定
}



ts-node index.ts


確認はブラウザから
http://サーバのアドレス:8000/

で確認してください。

プロセスマネージャ

2019-03-14 15:15:37

インストール

2019-03-14 16:13:04

 Node.jsのプロセスマネージャのインストールはnpmを使って行います。


npm -g install pm2


 pm2は実行コマンドがインストールされる形式なので、-gを使ってグローバルインストールしておくのが無難です。さらにpm2からTypeScriptを使う場合は、以下のコマンドを使います。

pm2 install typescript ts-node


 これでpm2からTypeScriptが利用可能となります。npmコマンドでTypeScriptを追加しても、pm2から直接tsを読むことは出来ないので気をつけてください。

pm2からプログラムの起動

2019-03-14 16:09:19

プログラムの起動

pm2 start index.ts


実行結果の確認
http://サーバのアドレス:8000/


動作状態の確認
pm2 monit


pm2を停止させる
pm2 kill


pm2用の起動設定ファイルの作成

2019-03-14 16:15:47

application.json
{
    "name": "app",
    "script": "index.ts",
    "instances": 1,
    "watch": ["ts"],
    "log-date-format": "YYYY-MM-DD HH:mm Z",
    "env":{"NODE_OPTIONS":" --inspect=0.0.0.0:9229"}

 watchモードを指定しているので、tsファイルが更新されると自動的にプログラムが再起動します。さらにNode.jsの起動プログラムにオプションを与えており、デバッグ用のポート9229を指定しています。

設定ファイルを指定して起動する
pm2 start application.json


CentOSやUbuntuでデーモンとして動作させる
以下のコマンドを実行すると現在pm2が起動している設定がサービスとして登録される
pm2 startup


OS起動時に自動的に起動するように設定
systemctl enable pm2-名前