ほぼ日刊サービス開発日誌

React, firebase, 機械学習など

sponsored

Node.jsのWebアプリケーションの自動デプロイ【pm2のecosystem】

pm2というプロセスマネージャを使ったら、非常にカンタンにデプロイできたのでメモしておきます😊

pm2はnodeでインストールできる、複数プロセスを管理するコマンドライン。

これを使うとnodeサーバを走らせるデーモンをバックグラウンドでカンタンに作れます。

npm install -g pm2
pm2 ecosystem # プロジェクトルートで実行

上のコマンドでサンプルの設定が書かれた ecosystem.config.jsが生成される。

それをこんなふうに設定する。keyとかは自動で生成されなかったので追加する。keyを書かないと、デフォルトでauthorized_keysに加えられていない限り動かない。

module.exports = {
  // the definition for your application that PM2 needs to manage.
  apps : [{
    name      : 'App',
    script    : 'index.js',
    env: {
      NODE_ENV: 'development'
    },
    env_production : {
      NODE_ENV: 'production'
    }
  }],

  deploy : {
    production : {
      key: "myKey.pem",
      user : 'ubuntu', 
      host : '212.83.163.1',
      ref  : 'origin/master', // the branch you want to deploy to your server.
      repo : 'git@github.com:repo.git',
      path : '/var/www/production',
      'post-deploy' : 'npm install && pm2 startOrRestart ecosystem.config.js --env production' // shell commands you want to run after code has been deployed. 
    }
  }
};

ドキュメントはこちら

pm2.keymetrics.io

startOrRestartとかかゆい所に手が届く感じ凄い。

デプロイ前にローカルで実行したいスクリプトがある場合は 上スクリプトのpost-deployみたいな感じで

pre-deploy-localを設定すれば良いらしい。

デプロイしてみる

pm2 deploy ecosystem.json production setup を叩く。 setupがいるのは初回デプロイのみ(ディレクトリ作成などを行う)。

非常にシンプルにデプロイできた。

エラーが起きる場合はパーミッション、リモートサーバのgithubアクセス権あたりを確認する。

参考

Managing and Deploying NodeJS Apps with PM2 – Riyadh Al Nur – Medium

Automate deployment with Github Web Hooks – ITNEXT