Skip to content
返回部署

部署 Express.js 应用

生产 Node.js Express 服务器,使用 PM2、Docker 或 serverless 适配器,含集群和优雅关闭。

平台进阶

为什么

Express 是最久经考验的 Node.js Web 框架,中间件生态最大。作为长运行 Node 进程(PM2/Docker)部署可完全控制运行时,不像 serverless 有冷启动和超时限制。

何时使用

REST API、BFF 层和需要 WebSocket 或长时任务的应用用 Express。边缘部署避免 — 改用 Hono。

如何做

1. 构建 — tsc 或 esbuild 编译 TS 到 dist/ 2. PM2 — pm2 start dist/server.js -i max(集群模式,全核) 3. Docker — node:20-alpine 镜像,CMD ["node", "dist/server.js"] 4. Serverless — @vendia/serverless-express 适配 Lambda 5. 集群 — 用 cluster 模块或 PM2 多核利用 6. 优雅关闭 — 监听 SIGTERM,关服务器,干净退出 7. 反向代理 — Nginx/Caddy 前置做 TLS、限流、静态

示例

// src/server.ts — Express 优雅关闭 import express from "express"; const app = express(); app.get("/health", (req, res) => res.json({ ok: true })); const server = app.listen(3000, () => console.log("listening :3000")); process.on("SIGTERM", () => { server.close(() => process.exit(0)); }); // ecosystem.config.js — PM2 集群 module.exports = { apps: [{ name: "api", script: "dist/server.js", instances: "max", exec_mode: "cluster", max_memory_restart: "500M", }], }; // Dockerfile FROM node:20-alpine WORKDIR /app COPY dist/ ./dist/ COPY node_modules/ ./node_modules/ EXPOSE 3000 CMD ["node", "dist/server.js"]

常见问题

  • ⚠仅单核 — 无集群模式,一个 Node 进程无法用多核 CPU
  • ⚠内存泄漏崩溃 — 无 max_memory_restart,OOM 杀进程不重启
  • ⚠部署时丢连接 — 无优雅关闭,在途请求被终止

最佳实践

  • ✓用 PM2 集群模式或 Node cluster — Express 单线程,多核需多进程
  • ✓始终在 SIGTERM 实现优雅关闭 — 退出前排空连接实现零停机部署
  • ✓设置健康检查和优雅关闭 — 处理 SIGTERM 以在退出前排空进行中的请求

常见问题解答