CentOS 上 Node.js 权限问题排查与解决
一、常见症状与快速判断
二、标准修复流程
sudo useradd -m -s /bin/bash nodejssudo chown -R nodejs:nodejs /opt/myappsu - nodejsnpm config set prefix ~/.npm-global,并把 ~/.npm-global/bin 加入 PATH。sudo chown -R nodejs:nodejs /opt/myapp /var/log/nodejssudo yum groupinstall -y "Development Tools"、sudo yum install -y gcc-c++ make python3(或 python2,视模块要求)。sudo npm install --unsafe-perm(仅在受控环境下使用,避免安全风险)。sudo npm install -g pm2pm2 start app.js --name myappout_file: '/var/log/nodejs/myapp-out.log'error_file: '/var/log/nodejs/myapp-error.log'sudo mkdir -p /var/log/nodejs && sudo chown nodejs:nodejs /var/log/nodejs/*.log三、常见场景与对应命令
| 场景 | 典型报错 | 处理要点 | 命令示例 |
|---|---|---|---|
| 全局安装失败(EACCES) | Error: EACCES: permission denied | 改用本地安装或修复全局目录权限 | npm config set prefix ~/.npm-global;将 ~/.npm-global/bin 加入 PATH |
| node-gyp 编译失败 | gyp ERR! stack Error: EACCES 或缺少 gcc/make | 安装编译工具链与 Python | sudo yum groupinstall -y "Development Tools";sudo yum install -y gcc-c++ make python3 |
| 必须以 root 安装依赖 | 生命周期脚本权限不足 | 临时使用不安全参数(慎用) | sudo npm install --unsafe-perm |
| 日志/上传目录不可写 | EACCES 打开日志或创建文件失败 | 目录属主与权限正确 | sudo chown -R nodejs:nodejs /var/log/nodejs /opt/myapp/uploads |
| 端口被占用 | EADDRINUSE | 更换端口或结束占用进程 | `netstat -tulpen |
| 以上命令与处理要点可直接套用到常见报错场景,快速定位并修复问题。 |
四、安全与最佳实践
--unsafe-perm,并在完成后恢复为常规权限与最小特权运行。