阅读视图

发现新文章,点击刷新页面。

PM2完全指南:从入门到精通

引言:为什么需要PM2?

在Node.js生态中,进程管理是保障服务稳定性和高可用性的核心环节。随着业务复杂度的提升,开发者需要面对多进程调度、异常重启、日志收集、性能监控等挑战。传统的手动管理方式(如通过node app.js直接启动)在生产环境中显得力不从心。

PM2(Process Manager 2) 作为一款功能全面的进程管理工具,通过自动化和智能化的机制,为Node.js应用提供了从开发到部署的全生命周期支持。对于Vue3项目而言,虽然前端项目本身是静态资源,但在生产环境中同样需要稳定的服务进程来提供访问。

一、PM2核心功能详解

1.1 进程守护与自动重启

PM2最核心的功能之一是进程守护。当服务崩溃或意外退出时,PM2会自动重启应用,无需手动干预,保证服务7x24小时运行。这对于生产环境至关重要,避免了因单点故障导致的服务中断。

1.2 集群模式与负载均衡

PM2支持集群模式,可以自动利用多核CPU资源,将请求分发到多个进程,显著提升服务的并发处理能力。通过简单的配置,就能实现多实例负载均衡。

1.3 日志统一管理

PM2会自动记录服务的标准输出和错误日志,方便排查问题。你可以自定义日志路径,还可以安装pm2-logrotate插件实现日志自动切割,防止磁盘被日志文件撑满。

1.4 监控与性能统计

通过命令行或可视化工具,你可以实时查看服务的CPU、内存使用情况,掌握运行状态。pm2 monit命令提供了交互式监控界面,pm2 show可以查看单个服务的详细信息。

1.5 系统自启动

PM2支持设置开机自启动,服务器重启后服务自动恢复,无需重新手动启动。通过pm2 startuppm2 save命令即可实现。

二、PM2安装与基本使用

2.1 安装PM2

# 全局安装PM2
npm install pm2 -g

# 验证安装
pm2 -v

2.2 常用命令速查表

命令 说明 示例
pm2 start [文件/配置] 启动服务 pm2 start app.js
pm2 stop [进程名/ID] 停止服务 pm2 stop my-app
pm2 restart [进程名/ID] 重启服务 pm2 restart my-app
pm2 delete [进程名/ID] 删除服务 pm2 delete my-app
pm2 list 查看所有进程状态 pm2 list
pm2 logs 查看日志 pm2 logs my-app
pm2 monit 实时监控 pm2 monit
pm2 save 保存当前进程列表 pm2 save
pm2 startup 设置开机自启 pm2 startup

三、Vue3项目中使用PM2的完整指南

3.1 构建Vue3项目

在使用PM2管理Vue3项目之前,首先需要构建项目生成静态文件:

# 进入Vue3项目目录
cd your-vue3-project

# 安装依赖(如果尚未安装)
npm install

# 构建项目
npm run build

构建完成后会生成dist文件夹,其中包含了所有静态资源文件。

3.2 创建PM2配置文件

PM2推荐使用ecosystem.config.js配置文件来管理应用,这种方式更易于维护和版本控制。在项目根目录创建该文件:

// ecosystem.config.js
module.exports = {
  apps: [{
    name: 'my-vue3-app',           // 应用名称
    script: 'serve',               // 使用serve启动静态服务器
    args: 'dist',                  // 指定dist目录
    exec_mode: 'fork',             // 执行模式:fork或cluster
    instances: 1,                  // 实例数量
    autorestart: true,             // 自动重启
    watch: false,                  // 生产环境关闭监听
    max_memory_restart: '1G',      // 内存超过1G自动重启
    env: {
      NODE_ENV: 'development',
      PM2_SERVE_PATH: './dist',    // 服务路径
      PM2_SERVE_PORT: 3000,        // 服务端口
      PM2_SERVE_SPA: 'true'        // 支持SPA路由
    },
    env_production: {
      NODE_ENV: 'production',
      PM2_SERVE_PATH: './dist',
      PM2_SERVE_PORT: 8080,
      PM2_SERVE_SPA: 'true'
    },
    error_file: './logs/error.log',   // 错误日志路径
    out_file: './logs/out.log',       // 输出日志路径
    log_date_format: 'YYYY-MM-DD HH:mm:ss'  // 日志时间格式
  }]
};

3.3 使用Express服务器方案(备选)

如果你需要更灵活的控制,可以使用Express创建自定义服务器:

// server.js
const express = require('express');
const path = require('path');
const app = express();

// 设置静态文件目录
app.use(express.static(path.join(__dirname, 'dist')));

// 支持SPA路由
app.get('*', (req, res) => {
  res.sendFile(path.join(__dirname, 'dist', 'index.html'));
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Vue3应用运行在端口 ${PORT}`);
});

然后在PM2配置中使用这个服务器文件:

// ecosystem.config.js
module.exports = {
  apps: [{
    name: 'vue3-express-app',
    script: './server.js',
    // ...其他配置
  }]
};

3.4 启动Vue3项目

# 使用配置文件启动
pm2 start ecosystem.config.js

# 或者指定生产环境
pm2 start ecosystem.config.js --env production

# 查看运行状态
pm2 status

# 查看实时日志
pm2 logs my-vue3-app

四、高级配置与最佳实践

4.1 集群模式配置

对于高并发场景,可以启用集群模式充分利用多核CPU:

module.exports = {
  apps: [{
    name: 'vue3-cluster-app',
    script: 'serve',
    args: 'dist',
    instances: 'max',      // 根据CPU核心数启动最大实例
    exec_mode: 'cluster',  // 集群模式
    // ...其他配置
  }]
};

4.2 环境变量管理

PM2支持多环境配置,便于开发、测试、生产环境的切换:

module.exports = {
  apps: [{
    name: 'vue3-app',
    script: 'serve',
    args: 'dist',
    env: {
      NODE_ENV: 'development',
      API_BASE_URL: 'http://localhost:3000/api',
      PORT: 3000
    },
    env_staging: {
      NODE_ENV: 'staging',
      API_BASE_URL: 'https://staging-api.example.com',
      PORT: 8080
    },
    env_production: {
      NODE_ENV: 'production',
      API_BASE_URL: 'https://api.example.com',
      PORT: 80
    }
  }]
};

启动时指定环境:

pm2 start ecosystem.config.js --env staging

4.3 日志管理与切割

生产环境中,日志管理至关重要:

# 安装日志切割插件
pm2 install pm2-logrotate

# 配置日志切割
pm2 set pm2-logrotate:max_size 50M    # 单个日志文件最大50MB
pm2 set pm2-logrotate:retain 10       # 保留10个日志文件
pm2 set pm2-logrotate:compress true   # 压缩旧日志
pm2 set pm2-logrotate:dateFormat 'YYYY-MM-DD_HH-mm-ss'  # 日志文件名格式

4.4 开机自启动配置

确保服务器重启后应用自动恢复:

# 生成启动脚本(根据系统提示执行相应命令)
pm2 startup

# 保存当前进程列表
pm2 save

# 重启后自动恢复
pm2 resurrect

4.5 监控与告警

PM2提供了丰富的监控功能:

# 实时监控界面
pm2 monit

# 查看应用详细信息
pm2 show vue3-app

# 生成系统报告
pm2 report

# 以JSON格式查看状态
pm2 jlist

五、Vue3项目部署完整流程

5.1 本地开发环境

# 1. 开发阶段使用Vue CLI
npm run serve

# 2. 构建生产版本
npm run build

# 3. 本地测试构建结果
npx serve dist

5.2 服务器部署流程

# 1. 上传代码到服务器
scp -r dist user@server:/path/to/project/

# 2. 在服务器上安装PM2(如果尚未安装)
npm install pm2 -g

# 3. 上传PM2配置文件
scp ecosystem.config.js user@server:/path/to/project/

# 4. 在服务器上启动应用
cd /path/to/project
pm2 start ecosystem.config.js --env production

# 5. 设置开机自启
pm2 startup
pm2 save

5.3 结合Nginx反向代理

对于生产环境,建议使用Nginx作为反向代理:

# /etc/nginx/sites-available/vue3-app
server {
    listen 80;
    server_name your-domain.com;
    
    location / {
        proxy_pass http://localhost:3000;  # PM2运行的端口
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
    
    # 静态文件缓存
    location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
}

六、常见问题与解决方案

6.1 端口占用问题

如果端口已被占用,PM2会自动尝试其他端口,但最好明确指定:

env: {
  PORT: 3000,
  PM2_SERVE_PORT: 3000
}

6.2 内存泄漏监控

设置内存限制,超过阈值自动重启:

max_memory_restart: '512M'  // 内存超过512MB自动重启

6.3 文件变化监听(开发环境)

开发环境下可以启用文件监听:

watch: true,
ignore_watch: [
  'node_modules',
  'logs',
  '.git'
]

6.4 多应用管理

PM2可以同时管理多个应用:

module.exports = {
  apps: [
    {
      name: 'vue3-frontend',
      script: 'serve',
      args: 'dist',
      // ...前端配置
    },
    {
      name: 'node-backend',
      script: './server/api.js',
      // ...后端配置
    }
  ]
};

PM2作为Node.js生态中最流行的进程管理工具,为Vue3项目的生产部署提供了完整的解决方案。通过本文的介绍,你应该已经掌握了:

  1. PM2的核心功能:进程守护、集群模式、日志管理、监控等
  2. Vue3项目配置:如何通过ecosystem.config.js文件管理Vue3应用
  3. 生产环境最佳实践:集群配置、日志切割、开机自启等
  4. 完整部署流程:从本地开发到服务器部署的全过程

在实际项目中,建议始终使用配置文件而非命令行参数,这样配置更易于维护和版本控制。同时,结合Nginx等Web服务器,可以构建更加稳定和高效的生产环境。

PM2的学习曲线平缓,但功能强大,是每个Node.js和Vue开发者都应该掌握的工具。开始在你的Vue3项目中使用PM2,享受更加稳定和高效的部署体验吧!

提示:本文所有配置示例都经过实际测试,你可以根据项目需求进行调整。更多高级功能请参考PM2官方文档

❌