CentOS 上 Node.js 项目启动失败的排查与修复指南
一 快速定位
tail -f /path/to/app.log、journalctl -u your-app.service -f。node -v、npm -v,确认与项目 engines 字段兼容;不兼容时使用 nvm 切换版本。npm install,必要时清理并重装:rm -rf node_modules package-lock.json && npm install。netstat -tulpen | grep 3000 或 ss -ltnp | grep 3000。.env、配置文件中的 HOST/PORT/DB_URL 等关键变量是否齐全且有效。二 常见错误与对应修复
ss -ltnp | grep 3000 找到 PID 后 kill -9 <PID>;或在代码中改为未占用端口。npm install <module>;本地模块检查相对路径;全局包用 npm root -g 核对安装位置。export PATH=/path/to/node/bin:$PATH 加入 shell 配置。npm ls 检查不一致;必要时 rm -rf node_modules package-lock.json && npm install;前端/构建类项目可清理构建缓存后重装。/etc/sysctl.conf 添加 fs.inotify.max_user_watches=524288 并执行 sysctl -p。三 稳定运行与进程管理
pm2 start app.js --name "myapp",pm2 logs myapp,pm2 monit。四 最小复现与求助模板
node app.js 或 npm run start,保留完整控制台输出与堆栈。cat /etc/centos-releasenode -v、npm -vnpm ls --depth=10ss -ltnp | grep <端口>tail -n50 /path/to/app.log、journalctl -u your-app.service -n50五 附 systemd 服务示例
/etc/systemd/system/myapp.service[Unit]
Description=My Node.js App
After=network.target
[Service]
Type=simple
User=nodeuser
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/node /opt/myapp/app.js
Restart=on-failure
RestartSec=10
Environment=NODE_ENV=production
Environment=PORT=3000
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable myapp.service
sudo systemctl start myapp.service
sudo journalctl -u myapp.service -f
该示例展示了以非 root 用户运行、自动重启与日志集成的推荐做法。