PM2配置React静态服务时production环境未定义及端口配置问题求助
解决方案
问题根源
- 环境变量报错:在
env中设置NODE_ENV: "production"时,PM2会自动尝试匹配配置文件中的env_production块,但你的配置里仅存在通用env块,因此抛出找不到对应环境的错误。另外,React的.env.production仅在构建阶段生效,静态文件托管阶段无需读取该文件。 - 端口配置限制:你当前用
script: "serve"调用的是第三方serve包(而非PM2内置静态服务),只有该包会识别PM2_SERVE_PORT变量,因此换其他方式端口配置不生效。
方案一:使用PM2内置静态服务(推荐,无需额外依赖)
PM2自带静态文件托管功能,无需安装第三方serve包,直接通过配置指定静态目录和端口:
module.exports = { apps: [ { name: "my-app", // 调用PM2内置serve命令,格式为 "pm2 serve <静态目录> <端口>" script: "pm2 serve build 3000", instances: 1, watch: false, exec_mode: "fork", // 静态服务用fork模式即可,cluster模式无意义 restart_delay: 5000, listen_timeout: 50000, kill_timeout: 5000, log_date_format: "YYYY-MM-DD HH:mm Z", // 如需保留NODE_ENV,添加对应的env_production块避免报错 env: { NODE_ENV: "production" }, env_production: { NODE_ENV: "production" } } ] };
注意事项
- 若无需
NODE_ENV,可直接删除env和env_production中的相关配置,彻底规避报错。
方案二:继续使用第三方serve包
若坚持使用serve包,需修正环境变量配置,并通过参数直接传递端口:
- 确保已安装
serve包:npm install -g serve(或本地安装后用npx serve) - 修改配置文件:
module.exports = { apps: [ { name: "my-app", script: "serve", instances: 1, watch: false, exec_mode: "fork", restart_delay: 5000, listen_timeout: 50000, kill_timeout: 5000, log_date_format: "YYYY-MM-DD HH:mm Z", // 直接传递serve的参数,指定静态目录和端口 args: "-s build -l 3000", // 配置对应环境块,解决PM2环境报错 env: { NODE_ENV: "development" }, env_production: { NODE_ENV: "production" } } ] };
启动命令
启动时指定环境,PM2会自动匹配对应配置块:
pm2 start ecosystem.config.js --env production
验证方法
启动后用以下命令检查应用状态和端口:
pm2 list pm2 show my-app
内容的提问来源于stack exchange,提问作者juls
相关产品推荐
相关产品推荐

