温馨提示×

Linux系统中Node.js如何管理

小樊
38
2025-12-10 12:18:58
栏目: 编程语言

Linux系统中Node.js管理实操指南

一 安装与版本管理

  • 使用 NVM(Node Version Manager):在同一台机器上安装、切换多个 Node.js 版本,适合开发与多项目并行。
    • 安装与初始化:
      • curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
      • source ~/.bashrc(或 ~/.zshrc)
    • 常用命令:
      • nvm install --lts(安装最新 LTS
      • nvm use --lts(使用 LTS)
      • nvm ls / nvm ls-remote(列出已安装/可安装版本)
      • nvm alias default (设置默认版本)
  • 使用发行版仓库或 NodeSource 安装:适合运维统一管控与系统级使用。
    • Ubuntu/Debian:sudo apt update && sudo apt install -y nodejs npm
    • CentOS/RHEL:sudo yum install -y nodejs(或 dnf)
    • 也可使用 NodeSource 提供的脚本添加仓库后安装(示例:setup_20.x)
  • 离线/二进制安装:用于无外网或特定版本需求。
    • wget https://nodejs.org/dist/v20.11.1/node-v20.11.1-linux-x64.tar.xz
    • tar -xf node-v20.11.1-linux-x64.tar.xz -C /opt
    • echo ‘export PATH=/opt/node-v20.11.1-linux-x64/bin:$PATH’ >> ~/.bashrc && source ~/.bashrc
  • 版本管理工具对比(简要):
    • NVM:多版本并存、按项目切换,开发首选
    • n:npm 全局安装,简单直接
    • nvs:跨平台、目录级切换
    • Docker:以容器固化版本与依赖,环境一致性最佳

二 进程管理与自启动

  • 使用 PM2(生产推荐):进程守护、自动重启、日志聚合、集群模式、开机自启。
    • 安装与启动:npm i -g pm2;pm2 start app.js --name “myapp”
    • 常用:pm2 list / logs / restart|stop|delete ;pm2 startup(生成并启用开机自启脚本)
  • 使用 systemd 服务:系统级托管、日志由 journald 管理、稳定可靠。
    • 示例服务文件 /etc/systemd/system/node-app.service:
      • [Unit] Description=Node.js App
      • [Service] ExecStart=/usr/bin/node /path/to/app.js;Restart=always;User=nobody;Group=nobody;Environment=NODE_ENV=production;WorkingDirectory=/path/to/app
      • [Install] WantedBy=multi-user.target
    • 操作:sudo systemctl daemon-reload;sudo systemctl start|enable node-app;sudo systemctl status node-app
  • 其他后台运行方式(轻量/临时):
    • nohup node app.js &(简单后台,日志写入 nohup.out)
    • screen -S nodeapp(会话保持,可 detach 后继续运行)

三 部署与网络集成

  • 反向代理与静态资源:使用 Nginx/Apache 将请求转发到 Node.js 应用,便于承载静态资源、TLS 终止、压缩与缓存。
    • 示例 Nginx 片段:
      • location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
  • 容器化部署:以 Docker 固化运行时与依赖,便于环境一致性与横向扩展。
    • 拉取与运行:docker pull node:20;docker run -it -p 3000:3000 node:20 /bin/bash
    • 生产建议配合 Docker Compose / K8s 做编排与滚动升级

四 升级与多版本共存

  • 升级策略与选择:
    • NVM:nvm install --lts && nvm use --lts;适合快速切换与回滚
    • 包管理器:apt/yum/dnf 升级系统级 Node.js;适合统一运维
    • 二进制安装:下载新版本、替换 PATH 或软链;适合离线/特定版本
  • 多版本共存与项目级隔离:
    • 使用 NVM 在项目目录设置本地版本:nvm use 或 nvm alias default
    • 结合 Docker 为每个项目固定 Node 版本,避免“本机版本污染”
  • 升级前后注意:
    • 在测试环境验证依赖与行为变更(如 ESM/CommonJS、原生模块 ABI 变化)
    • 如用 PM2,升级后可用 pm2 restart 或滚动重启策略

五 常见问题与排障要点

  • 权限与端口:Linux 1024 以下端口需 root 监听,完成后应降权运行(先降 GID 再降 UID),示例:
    • http.createServer(…).listen(80, () => { process.setgid(gid); process.setuid(uid); });
  • 环境变量与路径:
    • 使用 NVM 后确保加载 nvm.sh;二进制安装需将 /opt/node-/bin 加入 PATH
    • 生产建议在 systemd 服务中显式声明 Environment(如 NODE_ENV=production
  • 日志与故障排查:
    • PM2:pm2 logs;systemd:journalctl -u node-app -f
    • 进程异常退出:检查未捕获异常、内存泄漏、端口占用(ss -ltnp | grep 3000)
  • 仓库与 GPG 问题:添加 NodeSource 源后如遇 GPG check FAILED,可在测试环境临时关闭 GPG 校验再安装(不推荐生产)

0