温馨提示×

如何在Linux服务器上运行Node.js

小樊
37
2025-12-28 04:28:55
栏目: 云计算

在 Linux 服务器上运行 Node.js 的完整步骤

一 安装 Node.js

  • 使用包管理器(适合快速安装与系统级维护)
    • Ubuntu/Debian:
      • 更新索引:sudo apt update
      • 安装:sudo apt install -y nodejs npm
    • CentOS/RHEL/Fedora:
      • 安装 EPEL(如需要):sudo yum install -y epel-release
      • 安装:sudo yum install -y nodejs npmsudo dnf install -y nodejs npm
  • 使用 NodeSource 仓库(指定版本更灵活)
    • Ubuntu/Debian(示例为 16.x):
      • 添加源:curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
      • 安装:sudo apt-get install -y nodejs
    • CentOS/RHEL(示例为 16.x):
      • 添加源:curl -fsSL https://rpm.nodesource.com/setup_16.x | sudo bash -
      • 安装:sudo yum install -y nodejs
  • 使用 NVM(多版本并存与切换)
    • 安装:curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
    • 加载:source ~/.bashrc
    • 安装与切换:nvm install --ltsnvm install 18,随后 nvm use 18;可设默认:nvm alias default 18
  • 验证安装:node -vnpm -v

二 运行与测试

  • 创建测试文件 app.js
    const http = require('http');
    const hostname = '0.0.0.0';
    const port = 3000;
    const server = http.createServer((req, res) => {
      res.statusCode = 200;
      res.setHeader('Content-Type', 'text/plain');
      res.end('Hello World\n');
    });
    server.listen(port, hostname, () => {
      console.log(`Server running at http://${hostname}:${port}/`);
    });
    
  • 前台运行:node app.js
  • 浏览器访问:http://服务器IP:3000(确保端口已开放)。

三 生产环境运行方式

  • 使用 PM2(进程守护、自动重启、日志管理)
    • 安装:npm install -g pm2
    • 启动:pm2 start app.js --name “my-app”
    • 常用:pm2 listpm2 logs my-apppm2 restart my-apppm2 stop my-app
  • 使用 systemd(系统级服务,开机自启)
    • 新建服务:sudo vim /etc/systemd/system/node-app.service
    • 示例内容:
      [Unit]
      Description=Node.js App
      After=network.target
      
      [Service]
      ExecStart=/usr/bin/node /opt/myapp/app.js
      Restart=always
      User=nobody
      Group=nobody
      Environment=NODE_ENV=production
      WorkingDirectory=/opt/myapp
      
      [Install]
      WantedBy=multi-user.target
      
    • 启用与启动:
      • sudo systemctl daemon-reload
      • sudo systemctl start node-app
      • sudo systemctl enable node-app
  • 使用 Docker(环境一致、便于部署)
    • Dockerfile:
      FROM node:18
      WORKDIR /usr/src/app
      COPY package*.json ./
      RUN npm install --production
      COPY . .
      EXPOSE 3000
      CMD ["node", "app.js"]
      
    • 构建与运行:
      • docker build -t my-node-app .
      • docker run -p 3000:3000 -d my-node-app
  • 临时后台运行(不推荐生产):nohup node app.js &

四 开放端口与防火墙

  • 云服务器安全组:在控制台放行你的应用端口(如 3000/TCP)。
  • firewalld(CentOS/RHEL):
    • 放行端口:firewall-cmd --zone=public --add-port=3000/tcp --permanent
    • 重载规则:firewall-cmd --reload
    • 查看端口:firewall-cmd --list-ports
  • 其他发行版请启用并放行相应端口(如 ufw/iptables)。

五 常见问题与优化

  • 版本管理:开发/测试多项目建议用 NVM 管理多个 Node.js 版本,避免冲突。
  • 全局包权限:避免用 sudo npm -g;可配置 npm 全局目录到用户目录或使用独立版本管理。
  • 性能与稳定性:生产环境优先 PM2systemd;必要时配置 反向代理(Nginx)进程监控日志轮转
  • 网络绑定:服务应监听 0.0.0.0 而非 127.0.0.1,否则外部无法访问。

0