CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Node.js 框架与 ORM/课时/生产运行
RawBlame
课时目录12 节

Node.js 框架与 ORM

  1. 01Node 框架生态
  2. 02Fastify
  3. 03Hono
  4. 04fetch 与 HTTP 客户端
  5. 05Drizzle ORM
  6. 06Knex 查询构建
  7. 07Sequelize
  8. 08模板引擎
  9. 09Vitest 测试
  10. 10日志
  11. 11生产运行
  12. 12综合练习

生产运行

pm2、cluster 概念。

25 分钟

生产运行

本地 node app.js 不能代表生产:进程守护、多核利用、优雅退出、健康检查 需要 pm2 或容器编排配合。本课建立概念,深度调优见 nodejs-advanced-essentials。

学习目标

  • 用 pm2 启动、重启、看日志
  • 理解 Node cluster 与 pm2 cluster 模式的关系
  • 配置健康检查与 graceful shutdown

pm2 基本用法

npm install -g pm2   # 或项目 devDependency
pm2 start src/server.js --name tracks-api
pm2 logs tracks-api
pm2 restart tracks-api
pm2 save && pm2 startup   # 开机自启(Linux 服务器)
// ecosystem.config.cjs
module.exports = {
  apps: [{
    name: "tracks-api",
    script: "src/server.js",
    instances: "max",      // cluster 模式占满 CPU
    exec_mode: "cluster",
    env: { NODE_ENV: "production", PORT: 3001 },
  }],
};
pm2 start ecosystem.config.cjs

cluster 概念

Node 单线程事件循环;cluster / pm2 多实例 共享端口,由 OS 分发连接。适合 I/O 密集 API;CPU 密集任务应放 Worker 线程或独立服务。

模式说明
fork单实例,最简单
cluster多进程同端口,吃满多核
容器 K8s多 Pod replicas,pm2 可只开 1 instance

优雅退出

const app = await buildApp();

const close = async () => {
  app.log.info("shutting down");
  await app.close();       // 关连接池、停 accept
  process.exit(0);
};

process.on("SIGINT", close);
process.on("SIGTERM", close);

K8s 滚动发布发 SIGTERM;必须在 deadline 内关完 DB 连接,否则脏断连。

与部署栈衔接

开发:node / vitest
单机:pm2 + Nginx 反代
容器:Dockerfile + HEALTHCHECK
编排:K8s liveness/readiness → /health

数据库连接串与密钥仍走 env;镜像构建见 docker-essentials。

练习

  • 用 pm2 启动 Fastify 服务并 pm2 monit 观察
  • 实现 GET /health 供负载均衡探测
  • 发送 SIGTERM,确认日志出现 shutting down

小结

pm2 管进程,cluster 吃多核,graceful 保数据。 下一课综合练习:Fastify + Drizzle 小 API。

加载本节练习…
← 上一课日志下一课 →综合练习