企业级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 saveNginx 反向代理配置
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
- [ ] 监控告警设置完成
- [ ] 备份机制测试通过
- [ ] 回滚方案验证完成