配置文件
简单说明
- 配置文件里的设置项,跟命令行参数基本是一一对应的。
- 可以选择
yaml
或者json
文件,就看个人喜好。 - 如果启动的时候指定了配置文件,那么命令行参数会被忽略。(个别参数除外,比如--env)
举个简单例子,完整配置说明请参考官方文档。
{
"name" : "fis-receiver", // 应用名称
"script" : "./bin/www", // 实际启动脚本
"cwd" : "./", // 当前工作路径
"watch": [ // 监控变化的目录,一旦变化,自动重启
"bin",
"routers"
],
"ignore_watch" : [ // 从监控目录中排除
"node_modules",
"logs",
"public"
],
"watch_options": {
"followSymlinks": false
},
"error_file" : "./logs/app-err.log", // 错误日志路径
"out_file" : "./logs/app-out.log", // 普通日志路径
"env": {
"NODE_ENV": "production" // 环境参数,当前指定为生产环境
}
}
- watch可以是布尔值,路径数组或表示路径的字符串。默认为false。
- ignore_watch可以是一个路径数组或一个字符串,它将被chokidar解释为glob或正则表达式。
- watch_options是一个替代chokidar的选项的对象。有关定义,请参阅chokidar文档。
也可以使用pm2 init
命令,创建一个ecosystem.config.js
文件,其中已经有默认的配置。
module.exports = {
apps : [{
name: 'API',
script: 'app.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_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也是可以很好支持的。首先通过在配置文件中通过env_xx
来声明不同环境的配置,然后在启动应用时,通过--env
参数指定运行的环境。
环境配置声明
首先,在配置文件中,通过env
选项声明多个环境配置。简单说明下:
env
为默认的环境配置(生产环境),env_dev
、env_test
则分别是开发、测试环境。可以看到,不同环境下的NODE_ENV
、REMOTE_ADDR
字段的值是不同的。- 在应用中,可以通过
process.env.REMOTE_ADDR
等来读取配置中生命的变量。
"env": {
"NODE_ENV": "production",
"REMOTE_ADDR": "http://www.example.com/"
},
"env_dev": {
"NODE_ENV": "development",
"REMOTE_ADDR": "http://wdev.example.com/"
},
"env_test": {
"NODE_ENV": "test",
"REMOTE_ADDR": "http://wtest.example.com/"
}
启动指明环境
假设通过下面启动脚本(开发环境),那么,此时process.env.REMOTE_ADDR
的值就是相应的 http://wdev.example.com/ ,可以自己试验下。
pm2 start app.js --env dev
对于我们init生成的ecosystem.config.js文件,我们可以将其修改成
{
env: {
NODE_ENV: 'dev'
},
env_development: {
NODE_ENV: 'dev'
},
env_production: {
NODE_ENV: 'prod'
}
}
他们对应的启动命令分别为:
-
pm2 start ecosystem.config.js --watch --env
-
pm2 start ecosystem.config.js --watch --env development
-
pm2 start ecosystem.config.js --watch --env production