nvm + pm2 完整使用指南

这是在 Linux 服务器上手动管理 Node.js 应用的标准方案,不依赖宝塔面板。


📋 什么是 nvm 和 pm2?

表格

工具全称作用类比
nvmNode Version Manager管理多个 Node.js 版本像 Python 的 pyenv
pm2Process Manager 2管理 Node.js 进程像 Python 的 supervisor

text

编辑

┌─────────────────────────────────────────────────────────┐
│                    为什么需要它们?                      │
├─────────────────────────────────────────────────────────┤
│  nvm 解决的问题:                                        │
│  ✅ 一键安装/切换 Node.js 版本                           │
│  ✅ 不同项目用不同 Node 版本                             │
│  ✅ 无需 sudo 权限安装 Node.js                           │
│                                                         │
│  pm2 解决的问题:                                        │
│  ✅ 进程守护(崩溃自动重启)                             │
│  ✅ 开机自启动                                          │
│  ✅ 日志管理                                            │
│  ✅ 多实例负载均衡                                      │
│  ✅ 性能监控                                            │
└─────────────────────────────────────────────────────────┘

🔧 第一部分:nvm 安装与使用

1.1 安装 nvm

bash

编辑

# SSH 连接到你的 Ubuntu 服务器
ssh ubuntu@192.168.220.130

# 方法 1:官方安装脚本(推荐)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

# 方法 2:国内镜像(如果官方慢)
curl -o- https://gitee.com/RubyMetric/nvm-china/raw/master/install.sh | bash

# 安装完成后,重新加载配置
source ~/.bashrc

# 验证安装
nvm --version
# 应显示:0.39.7

1.2 常用 nvm 命令

bash

编辑

# 查看可安装的 Node.js 版本
nvm ls-remote

# 安装 Node.js LTS 版本
nvm install --lts
# 或指定版本
nvm install 22.22.0

# 查看已安装的版本
nvm ls

# 切换 Node.js 版本
nvm use 22.22.0

# 设置默认版本
nvm alias default 22.22.0

# 卸载某个版本
nvm uninstall 20.0.0

# 查看当前使用的版本
nvm current

# 查看 Node.js 和 npm 版本
node -v
npm -v

1.3 nvm 版本管理示例

bash

编辑

# 场景:你有两个项目,需要不同 Node 版本

# 项目 A - 老项目,需要 Node 18
cd /home/ubuntu/old-project
nvm use 18
npm install
npm run start

# 项目 B - 新项目,需要 Node 22
cd /home/ubuntu/new-ecommerce
nvm use 22
npm install
npm run build
pm2 start dist/index.js

🔧 第二部分:pm2 安装与使用

2.1 安装 pm2

bash

编辑

# 确保已安装 Node.js(用 nvm)
nvm use 22

# 全局安装 pm2
npm install -g pm2

# 验证安装
pm2 --version

2.2 常用 pm2 命令

bash

编辑

# 启动应用
pm2 start dist/index.js --name ecommerce-api

# 指定 Node 版本启动
pm2 start dist/index.js --name ecommerce-api --interpreter ~/.nvm/versions/node/v22.22.0/bin/node

# 查看运行状态
pm2 status

# 查看日志
pm2 logs
pm2 logs ecommerce-api  # 只看某个应用

# 重启应用
pm2 restart ecommerce-api

# 停止应用
pm2 stop ecommerce-api

# 删除应用
pm2 delete ecommerce-api

# 查看详细信息
pm2 show ecommerce-api

# 监控面板(实时查看 CPU/内存)
pm2 monit

# 保存当前进程列表(开机自启)
pm2 save

# 配置开机自启动
pm2 startup
# 按提示执行生成的命令,如:
# sudo env PATH=$PATH:/home/ubuntu/.nvm/versions/node/v22.22.0/bin pm2 startup systemd -u ubuntu --hp /home/ubuntu

2.3 pm2 配置文件(推荐)

创建 ecosystem.config.js 文件:

javascript

编辑

// ecosystem.config.js
module.exports = {
  apps: [
    {
      name: 'ecommerce-api',           // 应用名称
      script: 'dist/index.js',         // 启动文件
      cwd: '/home/ubuntu/my-ecommerce', // 项目目录
      instances: 4,                    // 实例数(CPU 核心数)
      exec_mode: 'cluster',            // 集群模式
      env: {
        NODE_ENV: 'production',
        PORT: 3000
      },
      env_development: {
        NODE_ENV: 'development',
        PORT: 3001
      },
      error_file: './logs/error.log',  // 错误日志
      out_file: './logs/out.log',      // 输出日志
      log_date_format: 'YYYY-MM-DD HH:mm:ss',
      max_memory_restart: '500M',      // 内存超过 500M 自动重启
      watch: false,                    // 生产环境关闭文件监听
      ignore_watch: ['node_modules', 'logs'],
      max_restarts: 10,                // 最大重启次数
      min_uptime: '10s'                // 最小运行时间
    }
  ]
};

使用配置文件启动:

bash

编辑

# 启动所有应用
pm2 start ecosystem.config.js

# 启动指定环境
pm2 start ecosystem.config.js --env production

# 重启
pm2 restart ecosystem.config.js

# 停止
pm2 stop ecosystem.config.js

🚀 第三部分:完整部署流程示例

3.1 服务器环境准备

bash

编辑

# 1. 连接服务器
ssh ubuntu@192.168.220.130

# 2. 安装 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc

# 3. 安装 Node.js
nvm install 22.22.0
nvm alias default 22.22.0

# 4. 安装 pm2
npm install -g pm2

# 5. 安装 Nginx(反向代理)
sudo apt update
sudo apt install nginx -y
sudo systemctl start nginx

3.2 项目部署

bash

编辑

# 1. 创建项目目录
mkdir -p /home/ubuntu/my-ecommerce
cd /home/ubuntu/my-ecommerce

# 2. 上传代码(或 git clone)
git clone https://github.com/your/repo.git .

# 3. 安装依赖
npm install

# 4. 编译 TypeScript
npm run build

# 5. 创建 pm2 配置文件
# (参考上面的 ecosystem.config.js)

# 6. 启动应用
pm2 start ecosystem.config.js --env production

# 7. 保存并配置开机自启
pm2 save
pm2 startup
# 执行输出的 sudo 命令

3.3 配置 Nginx 反向代理

bash

编辑

# 创建 Nginx 配置
sudo nano /etc/nginx/sites-available/ecommerce

# 粘贴以下内容:
server {
    listen 80;
    server_name api.test.com;

    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;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

# 启用配置
sudo ln -s /etc/nginx/sites-available/ecommerce /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginx

📊 第四部分:常用场景命令速查

表格

场景命令
查看应用状态pm2 status
查看实时日志pm2 logs --lines 100
重启应用pm2 restart all
查看内存使用pm2 monit
备份进程列表pm2 save
恢复进程列表pm2 resurrect
删除所有应用pm2 delete all
清空日志pm2 flush
切换 Node 版本nvm use 22
查看 Node 版本nvm current

🔍 第五部分:常见问题解决

表格

问题解决方法
nvm 命令找不到source ~/.bashrc 或重启终端
pm2 启动失败pm2 logs 查看错误,检查端口占用
开机不自启重新执行 pm2 startup 生成的命令
日志文件太大pm2 flush 清空日志,配置日志轮转
应用崩溃重启检查 pm2 logs,修复代码 bug
内存泄漏配置 max_memory_restart 自动重启
Nginx 502 错误确认 pm2 应用正在运行 pm2 status

✅ 总结对比

表格

特性nvmpm2
主要作用管理 Node.js 版本管理 Node.js 进程
安装位置~/.nvm/全局 npm 包
配置文件~/.nvmrcecosystem.config.js
开机自启不需要需要 pm2 startup
日志管理内置日志系统
集群模式不支持支持多实例

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部