插件窝 干货文章 NGINX PM2 VPS: 构建可靠的应用服务集群架构

NGINX PM2 VPS: 构建可靠的应用服务集群架构

NGINX sudo PM2 集群 448    来源:    2025-04-11

NGINX + PM2 + VPS: 构建可靠的应用服务集群架构

架构概述

这种架构结合了NGINX作为反向代理和负载均衡器,PM2作为Node.js应用进程管理器,以及VPS提供的可扩展计算资源,能够构建高可用、高性能的应用服务集群。

核心组件

  1. NGINX - 高性能Web服务器/反向代理
  2. PM2 - Node.js进程管理器,提供进程守护和集群模式
  3. VPS集群 - 多个虚拟私有服务器实例

架构优势

  • 高可用性:多VPS实例确保单点故障不影响整体服务
  • 负载均衡:NGINX分发请求到多个应用实例
  • 自动恢复:PM2监控并自动重启崩溃的应用
  • 横向扩展:可根据需求轻松添加更多VPS节点

部署步骤

1. 基础环境配置

# 在所有VPS上更新系统
sudo apt update && sudo apt upgrade -y

# 安装Node.js和npm
curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt install -y nodejs

# 安装PM2全局
sudo npm install -g pm2

# 安装NGINX
sudo apt install -y nginx

2. PM2应用部署

# 在应用服务器上克隆项目
git clone your-repo.git
cd your-repo

# 安装依赖
npm install

# 使用PM2启动应用(集群模式,根据CPU核心数)
pm2 start app.js -i max --name "my-app"

# 设置PM2开机自启
pm2 startup
pm2 save

3. NGINX反向代理配置

在主VPS或负载均衡器上配置NGINX (/etc/nginx/sites-available/your-app):

upstream app_servers {
    server vps1_ip:3000;
    server vps2_ip:3000;
    server vps3_ip:3000;
    # 添加更多服务器...
}

server {
    listen 80;
    server_name yourdomain.com;

    location / {
        proxy_pass http://app_servers;
        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;
    }
}

启用配置:

sudo ln -s /etc/nginx/sites-available/your-app /etc/nginx/sites-enabled
sudo nginx -t
sudo systemctl restart nginx

4. 安全加固

# 设置防火墙
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable

# 安装并配置Fail2Ban
sudo apt install -y fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

# 设置SSL证书(使用Let's Encrypt)
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com

高级配置

负载均衡策略

在NGINX的upstream块中添加负载均衡策略:

upstream app_servers {
    least_conn;  # 最少连接策略
    server vps1_ip:3000 weight=3;  # 权重
    server vps2_ip:3000;
    server vps3_ip:3000 max_fails=3 fail_timeout=30s;  # 健康检查
}

PM2集群监控

# 安装PM2监控模块
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 30

# 查看集群状态
pm2 monit
pm2 list

日志集中管理

配置所有VPS将日志发送到中央日志服务器或使用ELK Stack。

维护与监控

  1. 定期更新:

    sudo apt update && sudo apt upgrade -y
    sudo npm update -g
    
  2. 性能监控:

    • 使用htop监控系统资源
    • 配置pm2-web提供Web界面监控
    • 设置Prometheus + Grafana进行可视化监控
  3. 自动扩展脚本: 根据负载自动添加/移除VPS节点的脚本示例(需结合云提供商API)。

故障排除

  1. 应用崩溃:

    pm2 logs my-app
    pm2 restart my-app
    
  2. NGINX问题:

    sudo nginx -t  # 测试配置
    sudo tail -f /var/log/nginx/error.log
    
  3. 网络连接问题:

    netstat -tulnp
    ping vps_ip
    curl -v http://localhost:3000
    

这种架构提供了良好的扩展性和可靠性,适合中小型Web应用的生产环境部署。根据实际需求,可以进一步添加数据库集群、缓存层和CDN等组件来完善整个系统架构。