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 校验再安装(不推荐生产)