本页面涵盖了在生产环境中运行 Node.js 应用程序的关键实践。它讨论了监控、日志记录、部署策略以及其他确保您的应用程序在生产环境中可靠、安全且高效运行的关键方面。有关特定于安全的实践,请参阅 安全最佳实践,有关生产前的代码质量考虑,请参阅 测试和质量最佳实践。
有效的监控对于维护健康的生产环境至关重要。至少,您应该跟踪以下基本指标
除了基本指标之外,应用程序性能监控 (APM) 解决方案还能提供更深入的见解
选择一个平衡这些考虑因素的监控解决方案
来源:sections/production/monitoring.md README.md5
实施全面的日志记录策略,以加快故障排除速度并更好地了解应用程序的行为。
最有价值的日志记录实践之一是为每个请求分配一个唯一的事务 ID,并将其传播到与该请求相关的所有日志中。
事务 ID 的实现示例
来源:sections/production/assigntransactionid.md sections/production/smartlogging.md README.md5 README.md5 README.md5 README.md5
Node.js 应用程序需要适当的进程管理才能实现稳定性和弹性。
根据您的部署策略选择合适的进程管理器
| 进程管理器 | 最佳用途 | 主要功能 |
|---|---|---|
| PM2 | 传统部署 | 自动重启、集群模式、日志管理 |
| Systemd | Linux 服务器 | 系统服务集成、依赖管理 |
| 容器编排器 | Docker/Kubernetes | 自动扩展、自愈、资源限制 |
尽可能使您的应用程序设计为无状态,以提高可伸缩性和弹性
来源:sections/production/guardprocess.md sections/production/bestateless.md README.md5 README.md5
锁定您的依赖项以确保部署一致性
package-lock.json 或 yarn.lock 文件npm ci 而不是 npm installsave-exact=true 配置 .npmrc 以始终保存确切的版本示例 .npmrc 配置
save-exact=true
使用 NODE_ENV=production 来启用生产优化
将 CPU 密集型任务委托给 Nginx 或 HAProxy 等专用工具
| 任务 | 应由...处理 |
|---|---|
| 静态文件服务 | Nginx/CDN |
| SSL 终止 | Nginx/负载均衡器 |
| 压缩 | Nginx |
| 限流 | Nginx/网关 |
| 负载均衡 | Nginx/HAProxy/云 LB |
来源:sections/production/lockdependencies.md sections/production/delegatetoproxy.md README.md5 README.md5 README.md5
Node.js 在 64 位环境中有一个约 1.4GB 的默认内存限制。监控和管理内存使用情况以防止内存泄漏和崩溃
内存监控示例
通过集群或工作线程最大化 CPU 使用率
为运营任务和诊断实现安全维护终结点
维护终结点的关键考虑因素
在生产环境中始终使用 Node.js 的 LTS(长期支持)版本,以确保稳定性和安全性。LTS 版本接收
来源:sections/production/createmaintenanceendpoint.md sections/production/LTSrelease.chinese.md README.md5 README.md5
在部署到生产环境之前,请确保您的应用程序满足这些要求
| 类别 | 检查项 |
|---|---|
| 监控 | ✓ 基本指标收集 ✓ 错误监控 ✓ 性能监控 |
| 日志记录 | ✓ 结构化日志 ✓ 事务 ID 跟踪 ✓ 日志聚合设置 |
| 韧性 | ✓ 已配置进程管理器 ✓ 已处理平稳关机 ✓ 故障时自动重启 |
| 性能 | ✓ 已完成负载测试 ✓ 已执行内存剖析 ✓ 已配置连接池 |
| 安全 | ✓ 依赖项安全审计 ✓ 已保护环境变量 ✓ 已实现速率限制 |
| 部署 | ✓ 已建立 CI/CD 流水线 ✓ 已定义回滚策略 ✓ 蓝绿部署或金丝雀部署能力 |
| 文档 | ✓ 已创建运行手册 ✓ 已更新 API 文档 ✓ 已记录监控仪表板 |
来源:sections/production/productioncode.md README.md5
本概述为在生产环境中运行 Node.js 应用程序提供了基础性指导。有关每个主题的更具体详细信息,请参阅本文档中的链接部分。