部署与生产环境
本指南介绍如何将 VextJS 应用部署到生产环境,涵盖构建、Docker 容器化、Nginx 反向代理、PM2 进程管理、日志收集和健康检查等实践。
构建生产产物
vext build
使用 vext build 将 TypeScript 源码编译为生产级 JavaScript:
编译产物输出到 dist/ 目录,保持与 src/ 相同的目录结构:
编译选项
编译排除
生产编译自动排除以下文件:
*.d.ts— 类型声明*.test.*/*.spec.*— 测试文件__tests__/— 测试目录config/development.*— 开发环境配置config/local.*— 本地覆盖配置config/test.*— 测试环境配置
编译底层
vext build 基于 esbuild 实现,编译速度极快。典型项目(50+ 源文件)的编译时间在 1 秒以内。
编译时会自动注入 process.env.NODE_ENV = "production",因此 build 后用户源码中的环境分支会按 production 语义静态折叠;但运行时实际加载哪个配置文件,仍由启动时的 NODE_ENV 决定。
启动生产服务
直接启动
vext start 会自动检测 dist/ 目录是否存在:
- 存在 → 直接用
node运行dist/index.js(不依赖 tsx) - 不存在 → 使用 tsx 运行时编译
src/index.ts(开发模式回退)
环境变量
Docker 部署
Dockerfile
.dockerignore
Docker Compose
构建和运行
Nginx 反向代理
基础配置
多实例负载均衡
PM2 进程管理
安装
ecosystem 配置文件
PM2 常用命令
VextJS 内置了 Cluster 多进程模式(vext start --cluster),提供 Rolling Restart、心跳监控等高级功能。如果使用内置 Cluster,PM2 的 instances 设为 1 即可,让 VextJS 自己管理 worker 进程。
详见 Cluster 多进程。
日志收集
JSON 日志格式
VextJS 在生产环境(NODE_ENV=production)下默认输出 JSON 格式日志,适合被日志收集系统解析:
配置日志级别
日志收集方案
方案一:文件 + Filebeat → ELK
方案二:Docker 日志 → Loki
方案三:stdout → Cloud 原生
在 Kubernetes / AWS ECS / Cloud Run 等平台中,直接输出到 stdout,由平台自动收集:
健康检查
实现健康检查端点
Kubernetes 探针配置
异常崩溃通知(onFatalError)
VextJS 内置了进程级异常捕获机制,当发生 uncaughtException 或 unhandledRejection 时,框架会:
- 记录
fatal级别日志 - 调用用户配置的
onFatalError回调(如有) - 执行优雅关闭(onClose hooks 清理资源)
process.exit(1)退出进程
配置 onFatalError
在 shutdown 配置中添加 onFatalError 回调,接入告警通知:
企业微信 Webhook 示例
Slack Webhook 示例
通用 HTTP Webhook 示例
注意事项
uncaughtException 和 unhandledRejection 发生在 HTTP 中间件执行链之外(例如定时任务、事件监听器中的异常),中间件无法捕获这类错误。因此必须在框架 bootstrap 层注册 process 级事件监听器。
安全加固
生产环境清单
环境变量管理
性能优化
Node.js 参数
Cluster 多进程
VextJS 内置 Cluster 模式,充分利用多核 CPU:
详见 Cluster 多进程。
连接池优化
部署流程建议
CI/CD 流水线
灰度发布
监控告警
关键监控指标
Prometheus 指标端点
结合 OpenTelemetry 接入示例 暴露 Prometheus 指标:
下一步
- 了解 Cluster 多进程 充分利用多核 CPU
- 查看 OpenTelemetry 接入 实现完整的可观测性
- 学习 Nacos 接入 实现微服务注册发现
- 探索 配置 中的环境配置覆盖机制