Skip to content

企业级Express服务部署配置完整指南

🔐 安全加固配置

防止外部攻击与数据泄露

依赖项安全

  • 定期审计: npm audit命令定期检查项目依赖中的已知漏洞。可以使用npm audit fix 进行修复。可以考虑将类似 "security-check": "npm audit && outdated"的脚本加入 package.json 以方便例行检查
  • 使用安全工具: 集成Snyk等专业安全平台进行深度扫描

应用层防护

js
// 安装必要安全中间件
const helmet = require('helmet');
const rateLimit = require('express-rate-limit');

// 设置安全HTTP头
app.use(helmet());

// 速率限制配置
const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15分钟
  max: 100, // 每个IP最多100次请求
});
app.use(limiter);

输入验证与数据安全

  • 输入验证:使用zod或express-validator验证所有用户输入
  • 密码安全:使用bcrypt哈希密码(盐轮数≥12)
  • 敏感信息:通过环境变量管理密钥,绝对不要硬编码

服务器安全

  • 非Root用户运行:创建专用系统用户运行PM2进程
  • HTTPS强制:配置Nginx将HTTP重定向到HTTPS

稳定性与性能

PM2高级配置

bash
# 集群模式启动(充分利用多核CPU)
pm2 start app.js -i max

# 设置开机自启
pm2 startup
pm2 save

Nginx 反向代理配置

nginx
server {
    listen 80;
    server_name yourdomain.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name yourdomain.com;
    
    ssl_certificate /path/to/cert.crt;
    ssl_certificate_key /path/to/private.key;
    
    location / {
        proxy_pass http://localhost: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;
    }
}

数据库与资源管理

  • 连接池优化:合理配置数据库连接池参数
  • 内存泄漏监控:使用memwatch-next等工具监控内存使用

监控与日志系统

结构化日志记录

javaScript
// 使用Winston或Bunyan记录结构化日志
const logger = require('./utils/logger');

app.use((req, res, next) => {
  logger.info('API Request', {
    method: req.method,
    url: req.url,
    ip: req.ip,
    userAgent: req.get('User-Agent')
  });
  next();
});

健康检查接口

javaScript
app.get('/health', (req, res) => {
  res.status(200).json({
    status: 'OK',
    timestamp: new Date().toISOString(),
    uptime: process.uptime(),
    memory: process.memoryUsage()
  });
});

APM工具集成

  • 性能监控:New Relic、Prometheus+Grafana
  • 错误跟踪:Sentry、DataDog
  • 关键指标:CPU使用率、内存占用、响应时间、QPS

自动化与维护

CI/CD流水线配置

yaml
# GitHub Actions示例
name: Deploy to Production
on:
  push:
    branches: [ main ]
jobs:
  test-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
      - run: npm ci
      - run: npm test
      - run: npm run build
      - run: scp dist/* user@server:/path/to/app

定期维护策略

  • 依赖更新:每月检查更新,使用renovatebot自动化
  • 漏洞响应:建立快速修复和部署流程
  • 备份方案:定期备份数据库和配置文件
  • 回滚机制:确保一键回滚能力

🚨 应急响应清单

服务异常排查步骤

  • 检查PM2状态:pm2 status和 pm2 logs
  • 检查系统资源:top、free -m、df -h
  • 检查Nginx日志:tail -f /var/log/nginx/error.log
  • 检查应用日志:查看Winston记录的error级别日志
  • 验证依赖服务:检查数据库、缓存等外部服务连接状态

性能问题排查

  • 分析慢查询:检查数据库查询性能
  • 内存泄漏检查:使用heapdump分析内存快照
  • CPU profiling:使用clinic.js或0x进行性能

部署前检查清单

  • [ ] 依赖项安全审计完成(npm audit)
  • [ ] 环境变量配置正确(数据库连接、API密钥等)
  • [ ] HTTPS证书配置有效
  • [ ] Nginx配置测试通过(nginx -t)
  • [ ] PM2启动脚本配置正确
  • [ ] 日志系统正常工作
  • [ ] 健康检查接口返回200
  • [ ] 监控告警设置完成
  • [ ] 备份机制测试通过
  • [ ] 回滚方案验证完成

Released under the MIT License.