使用pm2管理nodejs应用

最近空余时间一直在看nodejs的一些东西,然后找到了一个挺有意思的东西 Strapi, 然后折腾的差不多了,打算在服务器上部署,然后感觉直接npm start 好像并不是很好。。。。

然后就找到了pm2 。

安装

npm install -g pm2

使用

直接使用npm start命令执行应用的时候,是运行package.json 里的 scripts 的start

"scripts": {
    ...
    "start": "node server.js",
    ...
}

直接使用pm2 命令的话就是

pm2 start server.js --watch --name app_name  # --watch参数,意味着当你的应用代码发生变化时,pm2会帮你重启服务

参数说明:

  • -‌-watch:监听应用目录的变化,一旦发生变化,自动重启。如果要精确监听、不见听的目录,最好通过配置文件。
  • -‌-i -‌-instances:启用多少个实例,可用于负载均衡。如果-i 0或者-i max,则根据当前机器核数确定实例数目。
  • -‌-ignore-watch:排除监听的目录/文件,可以是特定的文件名,也可以是正则。比如--ignore-watch="test node_modules "some scripts""
  • -‌-n -‌-name:应用的名称。查看应用信息的时候可以用到。
  • -‌-o -‌-output :标准输出日志文件的路径。
  • -‌-e -‌-error :错误输出日志文件的路径。
  • -‌-interpreter :the interpreter pm2 should use for executing app (bash, python...)。比如你用的coffee script来编写应用。

重启

pm2 restart app_name

停止

停止特定的应用。可以先通过pm2 list获取应用的名字(--name指定的)或者进程id。

pm2 stop app_name|app_id
# 如果要停止所有应用,可以
pm2 stop all

删除

pm2 delete app_name

查看进程状态

pm2 list
pm2 show app_name

使用配置文件

# 初始化
pm2 init   # 执行完成之后,会在当前目录下生成一个ecosystem.config.js 配置文件
module.exports = {
  apps : [{
    name: 'API dev',   // 指定app name 作用等同于--name 
    script: 'server.js',  // 指定运行的脚本

    // Options reference: https://pm2.io/doc/en/runtime/reference/ecosystem-file/
    args: 'one two',   // 传入脚本的参数
    instances: 1,
    autorestart: true,
    watch: false,
    max_memory_restart: '1G',
    env: {    // 指定运行的node环境
      NODE_ENV: 'development'
    },
    env_production: {
      NODE_ENV: 'production'
    }
  }],

  deploy : {
    production : {
      user : 'node',
      host : '212.83.163.1',
      ref  : 'origin/master',
      repo : 'git@github.com:repo.git',
      path : '/var/www/production',
      'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production'
    }
  }
};
pm2 start ecosystem.config.js --env production  // 使用生产环境运行
# pm2 

右下角对话与我联系。


评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×