温馨提示×

centos怎么配置nodejs服务

小樊
44
2026-07-08 05:54:11
栏目: 编程语言

下面分几种常见方式来说明 如何在 CentOS 上配置 Node.js 服务,从安装到以服务方式运行(推荐 systemd)。


一、安装 Node.js(推荐方式)

方式 1:使用 NodeSource(推荐)

# 安装依赖
sudo yum install -y curl

# 添加 Node.js 18.x 源(可换成 16、20 等)
curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -

# 安装 Node.js
sudo yum install -y nodejs

# 查看版本
node -v
npm -v

方式 2:使用 EPEL(版本较旧)

sudo yum install -y epel-release
sudo yum install -y nodejs npm

二、准备 Node.js 项目

mkdir -p /opt/nodeapp
cd /opt/nodeapp

上传或创建你的项目,例如:

// app.js
const http = require('http');

const server = http.createServer((req, res) => {
  res.end('Hello Node.js');
});

server.listen(3000, () => {
  console.log('Server running on port 3000');
});

运行测试:

node app.js

三、使用 systemd 配置 Node.js 服务(✅ 推荐)

1️⃣ 创建 systemd 服务文件

sudo vi /etc/systemd/system/nodeapp.service

内容示例:

[Unit]
Description=Node.js App
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/opt/nodeapp
ExecStart=/usr/bin/node /opt/nodeapp/app.js
Restart=always
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target

⚠️ 建议不要用 root 用户运行,可新建用户:

sudo useradd -r -s /bin/false nodeuser

然后 User=nodeuser


2️⃣ 重载并启动服务

sudo systemctl daemon-reload
sudo systemctl start nodeapp
sudo systemctl enable nodeapp

3️⃣ 查看状态与日志

systemctl status nodeapp
journalctl -u nodeapp -f

四、配置防火墙(如果外部访问)

sudo firewall-cmd --permanent --add-port=3000/tcp
sudo firewall-cmd --reload

五、使用 Nginx 反向代理(生产环境推荐)

1️⃣ 安装 Nginx

sudo yum install -y nginx
sudo systemctl enable --now nginx

2️⃣ 配置反向代理

sudo vi /etc/nginx/conf.d/nodeapp.conf
server {
    listen 80;
    server_name yourdomain.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
    }
}
sudo nginx -t
sudo systemctl reload nginx

六、使用 PM2(可选,但很常用)

npm install -g pm2
pm2 start /opt/nodeapp/app.js --name nodeapp
pm2 startup
pm2 save

七、常见问题

Node 找不到

which node

如果路径不对,使用绝对路径:

ExecStart=/usr/bin/node

端口被占用

netstat -tunlp | grep 3000

总结(推荐方案)

生产环境最佳实践

  • Node.js(NodeSource)
  • systemd 管理
  • Nginx 反代
  • 非 root 用户运行

如果你愿意,可以告诉我:

  • CentOS 7 还是 8 / Stream?
  • 是否用 Docker?
  • 是否 HTTPS?

我可以给你一套 完全贴合你项目的配置方案

0