在 CentOS 上配置 Node.js 时,确实有一些常见的“坑”和容易踩雷的地方,下面我按安装方式、运行环境、权限、依赖、系统差异几个维度帮你梳理一下。
yum install nodejs 版本太旧CentOS 官方源里的 Node.js 版本通常很老(如 v6、v8),不适合现代项目。
✅ 推荐做法:
curl -sL https://rpm.nodesource.com/setup_18.x | bash -
yum install -y nodejs
或
nvm(推荐开发环境)curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
nvm install 18
yum nodejs 和 nvm如果你先用 yum 装了 node,又用 nvm,很容易出现:
node -v 和 which node 不一致✅ 解决:
which node
rm -f /usr/bin/node
或完全卸载 yum 版 Node.js。
npm install 导致权限问题报错如:
EACCES: permission denied
❌ 错误做法:
sudo npm install -g xxx
✅ 正确做法:
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
export PATH=~/.npm-global/bin:$PATH
安全风险极大。
✅ 建议:
useradd -m nodeapp
su - nodeapp
pm2 或 systemd 管理Environment 不生效Node 项目读不到 .env
❌ 错误:
ExecStart=/usr/bin/node app.js
✅ 正确示例:
[Unit]
Description=Node App
After=network.target
[Service]
User=nodeapp
WorkingDirectory=/home/nodeapp/app
Environment=NODE_ENV=production
ExecStart=/usr/bin/node app.js
Restart=always
[Install]
WantedBy=multi-user.target
然后:
systemctl daemon-reload
systemctl start yourapp
Node 起来了但访问不了。
✅ 检查 & 开放端口:
firewall-cmd --state
firewall-cmd --add-port=3000/tcp --permanent
firewall-cmd --reload
报错:
make: g++: command not found
✅ 安装:
yum groupinstall "Development Tools"
yum install -y gcc-c++ make
某些新 Node(如 18+)在 CentOS 7 上可能不稳定。
✅ 建议:
日志时间不对。
✅ 设置时区:
timedatectl set-timezone Asia/Shanghai
常见于 80 / 443 端口。
✅ 临时关闭测试:
setenforce 0
✅ 或配置策略(推荐生产):
setsebool -P httpd_can_network_connect 1
✅ 不用 yum 自带 Node
✅ 不用 root 跑 npm / node
✅ 用 nvm 或 NodeSource
✅ 配 systemd + 防火墙
✅ 装开发工具链
✅ 注意 CentOS 版本兼容性
如果你愿意,可以告诉我:
我可以直接给你一套可复制的完整配置方案。