服务器 Node 环境与 PM2 准备

更新于 2026年8月21日

适用人群:准备在云服务器上搭 Node 运行环境并守护进程的开发者与运维。

核心概念

Node 版本

用 nvm 或包管理器安装项目要求的 Node LTS 版本(如 20.x)。版本不匹配是构建/运行报错的常见原因,用项目里的 .nvmrc/engines 对齐版本。

进程守护:PM2 vs systemd

  • PM2:Node 生态的进程管理器,命令简单,自带日志、重启、开机自启、集群模式,适合大多数场景。
  • systemd:系统级服务管理,无需额外依赖,适合喜欢用系统原生方案的运维。
    二选一即可,目的都是让 Node 进程崩溃后自动拉起、服务器重启后自动运行。

操作步骤

  1. 步骤 1装 Node

    用 nvm 安装项目要求的 LTS 版本,node -v / npm -v 验证。

  2. 步骤 2拉代码装依赖

    把项目部署到服务器,npm ci 安装依赖(生产用 ci 更稳定)。

  3. 步骤 3构建

    运行 npm run build 生成生产产物(Next 的 .next / Nuxt 的 .output)。

  4. 步骤 4配置守护

    用 pm2 start 或写 systemd service 启动应用,并设置开机自启。

  5. 步骤 5验证

    本机 curl 127.0.0.1:3000 确认应用正常响应,再交给 Nginx 反代。

实际示例

# PM2 守护
npm i -g pm2
pm2 start npm --name myapp -- run start   # 或 pm2 start .output/server/index.mjs
pm2 startup && pm2 save                     # 开机自启 + 保存进程列表

# systemd 方式(/etc/systemd/system/myapp.service)
# ExecStart=/usr/bin/node /var/www/myapp/.output/server/index.mjs
systemctl enable --now myapp

常见错误

  • ⚠️Node 版本和项目要求不符,构建或运行报错
  • ⚠️只 pm2 start 没执行 pm2 startup && pm2 save,服务器重启后应用没自动起来
  • ⚠️生产装依赖用 npm install 而非 npm ci,lockfile 未锁定导致版本漂移
  • ⚠️把开发依赖也装进生产、或没设 NODE_ENV=production,性能和体积受影响

对应工具

常见问题

PM2 和 systemd 选哪个?
图省事、要日志和集群用 PM2;喜欢系统原生、不想加额外依赖用 systemd。两者都能实现崩溃重启和开机自启。
服务器重启后应用没自动起来?
PM2 要执行 pm2 startup 生成开机脚本并 pm2 save 保存进程;systemd 要 systemctl enable。否则重启后进程不会自动拉起。

相关教程

相关文章

官方资料来源