最近空余时间一直在看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 // 使用生产环境运行