温馨提示×

Node.js在CentOS上的最佳实践

小樊
34
2025-11-30 02:32:42
栏目: 编程语言

Node.js 在 CentOS 上的最佳实践

一 安装与版本管理

  • 选择版本策略:生产环境优先使用Node.js LTS,兼顾稳定性与长期安全维护;开发/测试可灵活使用最新版本。
  • 使用 NodeSource 仓库安装(示例为 16.x,可按需替换为 18.x/20.x):
    sudo yum update -y
    sudo yum install -y gcc-c++ make
    curl -sL https://rpm.nodesource.com/setup_16.x | sudo -E bash -
    sudo yum install -y nodejs
    node -v && npm -v
  • 使用 NVM 管理多版本(便于按项目切换):
    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
    source ~/.bashrc
    nvm install --lts
    nvm use --lts
  • 国内镜像加速(可选):npm config set registry https://registry.npmmirror.com(原淘宝源)。

二 进程管理与部署

  • 使用 PM2 进行守护、集群与开机自启:
    npm install pm2 -g
    pm2 start app.js -i max --name my-app # -i max 按 CPU 核数启动工作进程
    pm2 startup systemd -u # 生成 systemd 服务并开机自启
    pm2 save
    pm2 logs my-app
  • 多实例与反向代理:多实例提升吞吐;在 Nginx 层做负载均衡与静态资源服务,降低 Node.js 进程压力。
  • 健康检查与优雅停机:为进程配置就绪探针(如 /health),处理 SIGTERM 完成在途请求后再退出。

三 反向代理与安全加固

  • Nginx 反向代理示例(HTTP/HTTPS 与 HTTP/2):
    server {
    listen 80; server_name example.com;
    location / { proxy_pass http://127.0.0.1:3000; include proxy_params; }
    }
    server {
    listen 443 ssl http2; server_name example.com;
    ssl_certificate /path/to/fullchain.pem; ssl_certificate_key /path/to/privkey.pem;
    location / { proxy_pass http://127.0.0.1:3000; include proxy_params; }
    }
  • 关键安全要点:
    • 仅开放必要端口(如 80/443),使用 firewalld/iptables 限制来源;
    • 启用 TLS 1.2+,禁用弱加密套件;
    • 设置安全响应头(如 X-Frame-Options、X-XSS-Protection、Strict-Transport-Security);
    • 非 root用户运行 Node.js(PM2 可配置用户);
    • 对管理接口与敏感路由增加鉴权限流

四 性能与运行时优化

  • 代码与运行时:
    • 优先使用异步 I/OStreams,避免阻塞事件循环;
    • 优化数据库访问:合理索引连接池、减少全表扫描;
    • 合理使用内存缓存(如 node-cache)降低热点数据访问延迟;
    • 启动参数示例:node --max-old-space-size=4096 app.js(按内存与业务调优);
    • 充分利用多核:PM2 cluster 或 Node.js cluster 模块。
  • 系统与网络:
    • 保持系统与依赖及时更新
    • 适度优化内核网络参数(如 net.core.somaxconn、tcp_tw_reuse 等),并充分压测验证;
    • 静态资源交由 Nginx 缓存与压缩,启用 HTTP/2
    • 使用 CDN 分发静态资源,减少源站压力。

五 监控 日志与故障排查

  • 日志:统一接入 结构化日志(如 JSON),集中到文件或日志系统;PM2 日志轮转与保留策略要配置合理。
  • 监控与告警:
    • 基础资源监控(CPU、内存、磁盘 I/O、网络);
    • 应用性能监控(如 Prometheus + Grafana 暴露指标,或 New Relic/AppDynamics 等 APM);
    • 设置关键指标阈值与告警(如 5xx 比例、P95/P99 延迟、内存 OOM)。
  • 诊断与剖析:
    • 使用 node --inspect + Chrome DevTools 进行 CPU/内存分析;
    • 使用 –prof 生成 V8 性能日志并结合 tick-processor 分析热点;
    • 结合 clinic.js 等工具定位异步/数据库/内存瓶颈。

0