这种组合提供了一个强大的Web应用部署方案: - VPS 提供基础的服务器资源 - PM2 作为Node.js应用的进程管理器 - NGINX 作为反向代理和负载均衡器
# 安装PM2
npm install pm2 -g
# 启动应用
pm2 start app.js --name "my-app"
# 常用命令
pm2 list # 查看运行中的应用
pm2 monit # 监控应用
pm2 logs # 查看日志
pm2 reload all # 零停机重载
pm2 save # 保存当前进程列表
pm2 startup # 设置开机自启
# 生态系统文件 (ecosystem.config.js)
module.exports = {
apps: [{
name: 'app',
script: './app.js',
instances: 'max', # 根据CPU核心数自动扩展
exec_mode: 'cluster',
env: {
NODE_ENV: 'production'
}
}]
}
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://localhost:3000; # 假设Node应用运行在3000端口
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
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_cache_bypass $http_upgrade;
}
# 静态文件服务
location /static/ {
alias /path/to/static/files/;
expires 30d;
}
}
# 安装Certbot
sudo apt-get install certbot python3-certbot-nginx
# 获取证书
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
# 自动续期测试
sudo certbot renew --dry-run
PM2集群模式:
pm2 start ecosystem.config.js
NGINX负载均衡 (多应用实例):
upstream node_app {
server 127.0.0.1:3000;
server 127.0.0.1:3001;
server 127.0.0.1:3002;
keepalive 64;
}
server {
location / {
proxy_pass http://node_app;
# 其他proxy设置...
}
}
日志管理:
pm2 logs --timestamp --lines 100
bash
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 30
NGINX缓存:
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m inactive=60m use_temp_path=off;
server {
location / {
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
# 其他设置...
}
}
HTTP/2支持:
server {
listen 443 ssl http2;
# SSL和其他设置...
}
Gzip压缩:
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
PM2监控仪表板:
pm2 monitor
关键指标监控:
pm2 list
查看CPU和内存使用bash
pm2 start app.js --max-memory-restart 200M
备份策略:
多VPS架构:
容器化部署:
CDN集成:
502 Bad Gateway:
pm2 list
pm2 logs
性能瓶颈:
top
或htop
检查系统资源goaccess /var/log/nginx/access.log
SSL证书续期失败:
/var/log/letsencrypt/
nginx -t
certbot renew --dry-run
这种架构提供了良好的平衡点,既有足够的性能处理中小规模流量,又具备向更大规模扩展的能力,同时保持了配置和管理的相对简单性。