PM2 配置文件: 生态系统文件 ecosystem.config.js
当在多个服务器上部署或使用多个CLI参数时,使用生态系统文件来替代命令行启动应用,将会更加方便。
生态系统文件的目的是收集应用所有的配置选项和环境变量。
创建一个 ecosystem.config.js:
pm2 init
这个命令会生成:
module.exports = { apps: [{ script: 'index.js', watch: '.' }, { script: './service-worker/', watch: ['./service-worker'] }], deploy: { production: { user: 'SSH_USERNAME', host: 'SSH_HOSTMACHINE', ref: 'origin/master', repo: 'GIT_REPOSITORY', path: 'DESTINATION_PATH', 'pre-deploy-local': '', 'post-deploy': 'npm install && pm2 reload ecosystem.config.js --env production', 'pre-setup': '' } } };
备注:
1. apps 里可以有多个 app
2. 可以使用 pm2 deploy 快速部署 deploy 字段定义的远程服务器,自动化部署,避免在一个接一个地通过ssh连接服务器。更多,可以查看 https://github.com/shipengqi/PM2-docs-Zh-CN/blob/master/guide/deploy_with_ssh.md
设置
module.exports = { apps: [{ name: 'cnrestfulapi', script: './server.js', watch: '.', ignore_watch: ['node_modules', 'build', 'logs'], out_file: './logs/out.log', // 日志输出 error_file: './logs/error.log', // 错误日志 max_memory_restart: '2G', // 超过多大内存自动重启,仅防止内存泄露,根据自己的业务设置 exec_mode: 'cluster', // 开启多线程模式,用于负载均衡 instances: 'max', // 启用多少个实例,可用于负载均衡 autorestart: true // 程序崩溃后自动重启 }] };
1. watch 启用或禁用观察模式 Boolean,Array,String。监听应用目录的变化,一旦发生变化,自动重启。如果要精确监听、不见听的目录,最好通过配置文件。
2. exec_mode 设置执行模式,可能的值为:"fork" 或 "cluster"。
3. instances 指定集群模式下启动的实例数,值可以为 一个整数。指定开启集群的进程数量。或者“max”,自动检测可用CPU的数量并运行相同数量的进程。
使用
在你的源代码工作目录中,使用下面的命令可以将所有应用程序添加到进程列表中:
pm2 start
这个命令会运行定义在ecosystem.config.js文件(运行pm2 init生成)中的所有应用。
你也可以从指定目录中加载生态系统文件:
pm2 start /path/to/ecosystem.config.js
针对指定的应用
只针对生态系统文件中定义的指定应用:
pm2 start --only app
环境变量
可以为多个环境声明变量, 环境变量的key必须遵守这种格式env_<environment-name>。
例如,下面例子中的app进程会在两个环境中启动:development和production。
module.exports = { apps : [{ name: "app", script: "./app.js", env: { NODE_ENV: "development", }, env_production: { NODE_ENV: "production", } }] }
要在特定环境下启动应用,请使用--env标志,如上面的例子:
pm2 start ecosystem.config.js # uses variables from `env` pm2 start ecosystem.config.js --env production # uses variables from `env_production`
参考:
https://github.com/shipengqi/PM2-docs-Zh-CN/blob/master/guide/ecosystem_file.md
https://github.com/shipengqi/PM2-docs-Zh-CN/blob/master/reference/ecosystem_file.md