我发现很少有人写node在pm2守护进程下使用的场景
pm2启动node常见的命令
pm2 start pm2.config.js --env pro
会存在一个问题 就是dotenv这个模块在这种方式下无法读取到.env文件里面的信息
dotenv可以把node中需要的一些变量提取出来,放到.env文件里面
可以在提交代码的时候隐藏一些私密信息,比如密钥啥的 使用方法如下
const dotenv = require('dotenv')
dotenv.config()
// console.log(process.env.APP_PORT)
module.exports = process.env
但是pm2直接启动是无法读取到的
这时候就得给pm2加入 --node-args='-r dotenv/config'
也就是package.json文件中启动命令加入
"serve": "pm2 start --node-args='-r dotenv/config' pm2.config.js --env pro"
就能读取到.env文件里的内容了
Pm2的一些简单配置
module.exports = {
apps : [{
name : "node",
script : "./src/main.js",
cwf: './', // 根目录
args : "pro",
exec_mode : "cluster", // cluster 开启负载均衡
instances: 4, // 应用启动实例个数,仅在cluster模式有效 默认为fork;或者 max
max_memory_restart: '512M', // 最大内存限制数,超出自动重启
watch: ["src"], // 指定要观看的文件夹 // watch: true, // 文件修改时重新启动
watch_delay: 1000, // 指定观察间隔之间的延迟
ignore_watch : ["node_modules", "client/img"], // 指定要忽略的文件夹
out_file: "./logs/log/log.log",
error_file: "./logs/errorlog/errorlog.log",
log_date_format: "YYYY-MM-DD HH:mm:ss", // 指定日志文件的时间格式
// merge_logs: true, // 追加日志而不是新建
min_uptime: 100, // 应用运行少于时间被认为是异常启动
max_restarts: 30, // 最大异常重启次数,即小于min_uptime运行时间重启次数;
autorestart: true, // 默认为true, 发生异常的情况下自动重启
cron_restart: "", // crontab时间格式重启应用,目前只支持cluster模式;
restart_delay: 60, // 异常重启情况下,延时重启时间
env_pro: {
NODE_ENV: "pro",
// HOST: 'localhost',
PORT: 3000,
},
env_development: {
NODE_ENV: "development",
PORT: 2000,
}
},
]
}