PM2启动node项目,使用dotenv

900 阅读1分钟

我发现很少有人写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,
        }
        },
    ]
}