资讯动态

Egg.js 应用部署完全指南:构建、egg-scripts 启停与生产环境监控

发布时间:2026/9/21 19:00:21 来源:尧图企业网站定制
后端Web框架【免费下载链接】egg Born to build better enterprise frameworks and apps with Node.js Koa. https://307.run/eggcode项目地址https://gitcode.com/gh_mirrors/eg/egg点击查看免费下载Egg.js 框架为开发者提供了从本地开发到生产部署的完整链路。本文基于 site/docs/zh-CN/core/deployment.md 展开系统讲解生产环境的构建打包、使用egg-scripts启停应用、集群启动参数与配置项以及接入 Node.js 性能平台进行线上监控的完整方案。读完本文你将掌握一套可直接落地执行的一次构建、多次部署发布流程并能结合框架源码理解 Master/Worker 集群模型在生产环境下的行为机制。在本地开发时我们使用egg-bin dev来启动服务但在部署应用时不可以这样使用。因为egg-bin dev会针对本地开发做很多处理如热重载、调试端口等而生产环境需要一个更加简单稳定的方式。一般从源码到运行会分为构建和部署两步实现一次构建、多次部署。构建产出可重复部署的发布包JavaScript 语言本身不需要编译构建过程主要是下载依赖。如果使用 TypeScript 或 Babel 支持 ES6 及以上特性则必须构建。一般安装依赖时会指定NODE_ENVproduction或npm install --production仅安装核心依赖。因为开发依赖包体积大在生产环境不必要且可能导致问题。$ cd baseDir $ npm install --production $ tar -zcvf ../release.tgz .构建后将其打包为 tgz 文件。部署时解压启动即可。增加构建环节能实现真正的一次构建、多次部署。理论上代码未变更时无需重构可用原包部署带来诸多好处构建环境与运行环境差异避免污染运行环境。缩短发布时间便于回滚只需重启原包即可。部署框架内置集群能力无需外部进程守护服务器需要预装 Node.js框架支持 Node 版本 14.20.0。框架内置 egg-cluster 启动 Master 进程Master 稳定不需 pm2 等进程守护模块。从当前仓库的源码结构可以看到该能力沉淀在 packages/cluster 包中入口文件为 src/index.ts核心的 Master 实现位于 src/master.ts。框架同时提供 egg-scripts 支持线上运行和停止。首先将egg-scripts模块引入dependencies$ npm i egg-scripts --savepackage.json添加npm scripts{ scripts: { start: egg-scripts start --daemon, stop: egg-scripts stop } }现在可以通过npm start和npm stop启停应用。注意Windows 系统下egg-scripts支持有限。Master 进程为什么稳定在 packages/cluster/src/master.ts 中可以看到 Master 进程的关键职责它先 fork Agent Worker等 Agent 就绪后再 fork 出与 CPU 核数等量的 App Worker对应源码中once(agent-start, this.forkAppWorkers.bind(this))的逻辑。生产模式下Master 会对 worker 进行守护与自动重启App Worker 异常退出时Master 记录AppWorkerDiedError日志并通过cfork的 refork 机制自动拉起新 worker。该行为只在生产模式启用对应 src/utils/mode/impl/process/app.ts 中cfork({ refork: this.isProduction })的实现启动期 worker 失败会直接process.exit(1)避免带病运行Master 收到SIGINT/SIGQUIT/SIGTERM信号后按EGG_APP_CLOSE_TIMEOUT默认 5000ms与EGG_AGENT_CLOSE_TIMEOUT默认继承前者优雅关闭 App Worker 与 Agent Worker详见 src/master.ts。生产环境判断逻辑也值得注意src/master.ts当显式指定了env且不为local、unittest时即视为生产否则回退为NODE_ENV production。启动命令$ egg-scripts start --port7001 --daemon --titleegg-server-showcase示例支持参数如下--port7001端口号默认读取process.env.PORT未传递则使用内置端口7001。--daemon启用后台模式不需nohup使用 Docker 时建议前台运行。--envprod运行环境默认读取process.env.EGG_SERVER_ENV未传递则使用内置prod。--workers2worker 数默认创建与 CPU 核数等量的 app worker利用 CPU 资源。--titleegg-server-showcase便于 ps 进程时 grep未设置默认为egg-server-${appname}。--frameworkyadan使用自定义框架时配置package.json的egg.framework或指定该参数。--ignore-stderr忽略启动期错误。--https.keyHTTPS 密钥路径。--https.certHTTPS 证书路径。egg-cluster 的所有 Options 支持透传如--port等。在 packages/cluster/src/utils/options.ts 中可以看到这些 Option 的解析逻辑与更多可用项workers默认取os.cpus().length源码options.workers os.cpus().lengthenv默认取process.env.EGG_SERVER_ENVhttps开启后默认端口变为8443且会校验key/cert字符串路径时还会校验文件存在对应的文件baseDir默认为process.cwd()pidFile将 Master PID 写入指定文件Master 退出时会自动清理见 src/master.tsrequire注入到 worker / agent 进程的模块startMode默认process可切换为worker_threads以 worker 线程方式启动 App 与 Agent Worker配合ports指定每个 worker 的启动端口。注意--workers默认由process.env.EGG_WORKERS或os.cpus().length设置Docker 中os.cpus().length可能大于核数值较大可能导致失败需手动设置--workers。启动配置项config.{env}.js中可指定启动配置。// config/config.default.js exports.cluster { listen: { port: 7001, hostname: 127.0.0.1, // 不建议设置为 0.0.0.0可能导致外部连接风险请了解后使用 // path: /var/run/egg.sock, }, };path、port、hostname见 Node.js 官方文档server.listen参数。egg-scripts和egg.startCluster传入的 port 优先级高于此配置。框架对cluster.listen的默认值定义在 packages/egg/src/config/config.default.ts{ path: , port: 7001, hostname: , reusePort: false }。在底层 App Worker 启动时packages/cluster/src/app_worker.ts实际监听端口通过options.port || listenConfig.port计算得出——这正体现了命令行参数优先于配置文件的优先级规则。源码中的监听逻辑还包含若配置了listen.pathUnix Socket则直接server.listen(listenConfig.path)若配置了listen.hostname会作为监听地址传给server.listen(port, hostname)reusePort仅 Linux 3.9 等平台可用会改用 options 对象方式监听以启用SO_REUSEPORT配置了https时clusterConfig.https与options.https会合并用于创建 HTTPS 服务器。停止命令$ egg-scripts stop [--titleegg-server]该命令杀死 master 进程并优雅退出 worker 和 agent。支持参数--titleegg-server杀死指定 Egg 应用未设置则终止所有 Egg 应用。也可通过ps -eo pid,command | grep -- --titleegg-server查找 master 进程并kill掉不需kill -9。如 2.2 节所述Master 捕获到信号后会走完整的优雅关闭流程_doClose依次以超时保护关闭 App Worker 与 Agent Worker因此普通kill足以保证进程干净退出。监控线上性能监控与故障排查我们还需要对服务进行性能监控、内存泄露分析、故障排除等。业界常用的有Node.js 性能平台AlinodeNSolid其中 Alinode 与 Egg 的集成在官方文档与社区实践中最为成熟下面重点展开。Node.js 性能平台Alinode注意Node.js 性能平台Alinode目前仅支持 macOS 和 Linux不支持 Windows。Node.js 性能平台是面向所有 Node.js 应用提供性能监控、安全提醒、故障排查、性能优化等服务的整体性解决方案。它提供完善的工具链和服务协助开发者快速发现和定位线上问题。从当前仓库的 packages/cluster/src/master.ts 可以看到框架对 Alinode 的原生兼容Master 启动时会打印[master] node version ${process.version}并在检测到alinode in process时额外打印[master] alinode version ${process.alinode}这正是下面启动应用一节日志输出的来源。安装 RuntimeAlinode Runtime 可以直接替换掉 Node.js Runtime对应版本参见其官方文档。全局安装方式参见其官方文档。有时候同时部署多个项目期望多版本共存时则可以把 Runtime 安装到当前项目$ npm i nodeinstall -g $ nodeinstall --install-alinode ^3nodeinstall 会把对应版本的alinode安装到项目的node_modules目录下。注意打包机的操作系统和线上系统需保持一致否则对应的 Runtime 不一定能正常运行。安装及配置我们提供了 egg-alinode 插件来快速接入无需安装agenthub等额外的常驻服务。安装依赖$ npm i egg-alinode --save开启插件// config/plugin.js exports.alinode { enable: true, package: egg-alinode, };配置// config/config.default.js exports.alinode { // 从 Node.js 性能平台 获取对应的接入参数 appid: YOUR_APPID, secret: YOUR_SECRET, };启动应用npm scripts配置的start指令无需改变通过egg-scripts即可。启动命令需使用npm start因为npm scripts执行时会把node_module/.bin目录加入PATH故会优先使用当前项目执行的 Node 版本。启动后会看到 master 日志包含以下内容$ [master] node version v8.9.4 $ [master] alinode version v3.8.4 $ [Tue Aug 06 2019 15:54:25 GMT0800 (China Standard Time)] Connecting to wss://agentserver.node.aliyun.com:8080... $ [Tue Aug 06 2019 15:54:26 GMT0800 (China Standard Time)] agent register ok.其中agent register ok.表示配置的 egg-alinode 正确连接上了 Node.js 性能平台服务器。node version与alinode version两行则与 packages/cluster/src/master.ts 中 Master 启动日志逻辑一一对应可作为接入是否生效的快速判断依据。访问控制台接入完成后可在 Node.js 性能平台控制台查看 CPU、内存、GC、慢日志等监控指标进行内存泄露分析Heap Profiling与故障排查。部署流程小结一条完整的生产发布路径可以归纳为构建npm install --production安装核心依赖TypeScript/Babel 项目先执行编译打包为release.tgz发布服务器预装 Node.js 14.20.0解压发布包启动通过npm start即egg-scripts start --daemon拉起应用Master 自动按 CPU 核数创建 worker 并守护进程Docker 场景手动指定--workers并建议前台运行停止npm stop即egg-scripts stop优雅退出监控按需接入 Alinodeegg-alinode插件 控制台参数实现线上性能监控与故障排查。赞分享后端Web框架【免费下载链接】egg Born to build better enterprise frameworks and apps with Node.js Koa. https://307.run/eggcode项目地址https://gitcode.com/gh_mirrors/eg/egg点击查看免费下载相关推荐WinUtil 完整指南Windows 11 装软件、提速、修故障一个界面 3 分钟搞定WinUtil 完整指南Windows 11 装软件、提速、修故障一个界面 3 分钟搞定 新装的 Windows 11 要装十几个软件老电脑慢到想摔键盘后端Web框架TanStack Virtual 生产环境部署指南构建优化与性能监控TanStack Virtual 生产环境部署指南构建优化与性能监控 TanStack Virtual 是一个强大的虚拟化库专门用于优化大型列表和表格的渲染前端UI组件LangGraph生产环境部署与监控LangGraph生产环境部署与监控 本文详细介绍了LangGraph在生产环境中的关键部署与监控策略包括检查点存储后端配置PostgreSQL/SQLit人工智能AI AgentAgent 框架流程编排后端上一篇cl/cline浏览器集成自动化Web测试与调试全攻略下一篇markitdown自动化脚本定时批量文档转换任务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价