在 CentOS 上“设置 Node.js 服务”通常包含两部分:安装 Node.js 和 把 Node 项目做成系统服务(开机自启、后台运行)。下面按常见场景一步步说明(以 CentOS 7/8 为例)。
# 安装依赖
sudo yum install -y gcc-c++ make curl
# 以 Node.js 18 为例
curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -
# 安装
sudo yum install -y nodejs
# 验证
node -v
npm -v
sudo yum install -y epel-release
sudo yum install -y nodejs npm
假设你有一个项目:
/opt/myapp
├── app.js
└── package.json
测试运行:
cd /opt/myapp
node app.js
确认能正常启动(如监听 3000 端口)。
sudo vi /etc/systemd/system/myapp.service
内容示例:
[Unit]
Description=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
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
说明:
User:建议用非 root 用户(如 nodeuser)ExecStart:node 实际路径可用which node查看
sudo useradd -r -s /bin/false nodeuser
sudo chown -R nodeuser:nodeuser /opt/myapp
sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl enable myapp
sudo systemctl status myapp
journalctl -u myapp -f
sudo npm install -g pm2
cd /opt/myapp
pm2 start app.js --name myapp
pm2 startup
pm2 save
pm2 list
pm2 logs
pm2 restart myapp
pm2 stop myapp
sudo firewall-cmd --permanent --add-port=3000/tcp
sudo firewall-cmd --reload
✅ 端口被占用
lsof -i:3000
✅ 权限问题
✅ systemd 启动失败
journalctl -u myapp如果你愿意,可以告诉我:
我可以给你更精确的配置示例。