开源ERP ever-gauzy完全指南:架构、模块与二次开发实战 📅 发布时间:2026/9/16 16:35:20 👁 浏览次数: 直接上结论如果你在后端、前端、业务三个方向都有“拿来改”的预期那 ever-gauzy 这类项目就是最好的学习型ERP底座。它不是一个传统的死板进销存而是一套能跑电商、能管项目、能算工资、能出财务报表的企业管理平台适合中小团队、外包公司、甚至想自己搞SaaS的人去研究和使用。这篇文章我会从项目定位、技术架构、核心模块、部署实操、常见坑位五个方向把我实际接触下来最有价值的部分都拆开讲尽量少说废话全是能直接落地的东西。1. 整体设计思路拆解ever-gauzy 到底解决了什么问题1.1 它开箱给你了什么从“管订单”到“发工资”的一条龙ever-gauzy 最核心的设计思路是把企业里最常见的那几摊业务整合在一起销售、采购、库存、会计、项目、人力资源。传统做法是买一套财务软件管账再买一套项目管理工具管进度再搞一个Excel表管考勤——数据孤岛、对账费劲、报表口径还不一样。ever-gauzy 想解决的正是这种“系统割裂”的痛点。它把订单流程、项目工时、员工薪资和会计凭证打通业务流走完了财务数据自动生成项目成本也能实时追溯到人天和物料。我第一次接触它的时候第一反应是“这哪是一个ERP这分明是一套企业内部中台”。它甚至内置了 CRM 客户管理、提案、销售管线这是很多同类开源系统不愿意碰的因为业务复杂度会指数级上升。但恰恰是这种“全”让我觉得它值得深挖一个系统里你能走完从“客户询价-销售报价-订单确认-采购备货-项目派工-工时记录-发票开出-回款核销-给员工算提成”的完整闭环这个价值不是单纯堆功能能衡量的。1.2 它适合谁别一上来就用企业版的思维去套我的判断标准很简单你的团队是不是需要理解“业务流-数据流-资金流”三者之间的关系。如果是那 ever-gauzy 就是很好的参考对象不管你是自己用还是拿来二次开发。它尤其适合以下四类人中小企业的老板或运营负责人想用一套低成本的系统替代多个零散工具把自己的订单、项目、库存、财务真正管起来项目经理和产品经理需要从“任务执行”视角向上看一层理解项目进度如何影响成本、结算和人员安排后端和前端开发者想研究一个功能完整的中大型 TypeScript 全栈项目学习模块化设计、多租户架构、RBAC 权限模型等实战姿势SaaS 创业者需要找一套能快速修改、快速出商用版本的开源底座基于它搭自己的行业解决方案。有一点必须提前说清楚ever-gauzy 不是那种装上就能完美适配所有行业的万能系统它更像一辆底盘扎实的房车房间怎么布局、家具怎么摆你得自己花时间去调节。这既是它的门槛也是它的上限——只要你愿意投入能改出来的东西远比一套封闭商业软件灵活得多。2. 技术架构拆解这套系统为什么拿到手里不心虚2.1 技术栈选型背后的逻辑全员 TypeScript前后端不割裂ever-gauzy 整个技术栈是高度统一的后端是 NestJS前端核心是 Angular数据库用 PostgreSQL缓存和队列走 RedisORM 用 TypeORM。这套组合最直观的好处是一个 TypeScript 开发者既能看懂后端接口也能快速定位前端页面不必在两种语言之间来回切换心智。对于需要深度定制的中小型团队来说这个学习成本和维护成本的节省非常可观。NestJS 作为后端框架借鉴了 Angular 的模块化思想依赖注入、装饰器、模块封装这些概念在两端是相近的。ever-gauzy 的后端代码就是按模块组织的organization、invoice、expense、proposal、employee、warehouse 等每个模块有自己的 controller、service、entity、dto结构非常清晰。你如果之前写过 Angular再看 NestJS 几乎不用费劲。数据库选 PostgreSQL 而非 MySQL很务实。ERP 业务天然涉及大量关联查询、事务处理和报表聚合PostgreSQL 在复杂查询、JSON 支持、窗口函数、并发控制方面都更成熟而且它自带强大的数据类型和索引能力对财务数据这种需要高一致性的场景更友好。Redis 在这里不只是做缓存还承担了任务队列、实时通知等职责比如导出大报表、发送邮件这类异步任务都会丢到队列里处理避免阻塞主流程。2.2 多租户与单体仓库这是它敢叫“商业级”的底气ever-gauzy 设计了多租户模型这是很多开源系统想做但没做好的部分。一个部署实例可以注册多个“组织”organization每个组织拥有自己的员工、客户、订单、财务数据租户之间默认隔离。这意味着什么呢如果你是一家软件外包公司你可以用一套系统分别管理 A 客户项目组和 B 客户项目组数据互不可见但你可以作为超级管理员统一查看全局报表。这个能力也是它能够商业化、被人拿去开 SaaS 服务的基础。从代码组织方式看整个项目是一个单体仓库monorepo包含 apps 和 libs 等目录结构。前端、后端、共享库、e2e 测试都在一个仓库里管理。这种做法有两个直接好处一是跨端修改代码时改动范围一目了然前端改接口字段和后端改 DTO 可以在同一个提交里完成二是公共类型定义、工具函数可以在前后端直接共享避免两处各维护一份重复定义。当然monorepo 也有代价就是仓库体积大、首次克隆慢、构建时间长但这些在中小团队的日常开发中完全可接受。2.3 UI 组件与主题定制默认样式不丑但改起来也不难很多开源 ERP 的系统界面停留在“能用”级别ever-gauzy 的前端相对现代不少。它基于 Angular 和 Ngx Admin 这类后台模板做了深度封装还引入了一些图表库用于仪表盘展示。对于不少团队来说直接拿默认界面给客户做 demo 完全拿得出手。如果你想改成自己的品牌风格前端主题变量基本都是集中管理的改主色调、LOGO、侧边栏布局不需要逐个组件去抠。3. 核心功能模块盘点和实操要点3.1 项目与任务管理用看板把“人”和“事”绑在一起ever-gauzy 的项目管理模块本质上是一套带成本视角的看板系统。你可以创建多个项目每个项目下拆任务任务可以指派给员工、设置截止日期、打标签、上传附件、记录工时。它跟 Jira、Trello 这类纯项目管理工具最大的区别就是任务和工资结算、项目报价是联动的员工在任务上填写工作日志这些工时数会自动汇总到项目的成本核算里管理者可以随时看一个项目到底投入了多少人天。实操层面我建议一上来别急着把功能全铺开先把“项目-任务-员工”这三个基础维度搭好。在“组织设置”里建好团队在“项目管理”里创建项目然后把人拉进去再在任务看板里把状态列配置好比如“待办、进行中、测试、已完成”。等你跑通一个真实项目的闭环之后再逐渐打开时间追踪、费用报销、客户权限这些更细的东西。这个渐进式的落地方式能让团队的接受度高很多。这里有个使用细节值得注意任务和里程碑之间是有依赖关系的排期的时候最好先在项目下建里程碑再让任务关联里程碑后期看进度和做报表会方便很多。如果一开始就平铺任务到月底统计“某个交付节点花了多少人力成本”时你又要回头补数据非常痛苦。3.2 会计与发票模块开源ERP最容易被忽视的重头戏会计模块是我认为 ever-gauzy 最值钱的部分也是很多人低估的部分。它内置了复式记账能力你可以按客户开 invoice记录每一项收入和支出系统会自动生成应收、已收、应付、已付的状态流转。再深入一点它支持管理多币种、税率、付款方式、银行账户还能生成资产负债表、损益表等基础财务报表。对于还没有专职财务人员的创业团队来说这套能力基本够用。我在实际操作中最常用的路径是销售模块里对客户创建订单订单确认后生成发票发票记录收款采购侧则生成采购订单和供应商账单做付款核销。每一笔动作都会落到会计模块的账目里月底看利润报表基本不需要额外整理 Excel。需要注意的一点是开源社区版的会计模块定位是“够用”不是“专业”。它的报表和科目体系偏通用型没有做到国内财务软件那种按凭证字、摘要、科目余额表深度细化的程度。如果你的公司需要严格配合会计事务所做账建议把 ever-gauzy 里产生的业务流水导出再由专业财务系统处理。我见过有人拿社区版硬扛正规审计结果整理凭证时哭了很久。这个期望管理一定要提前做。3.3 采购、库存与供应链从“订单到履约”的完整链路采购模块和库存模块是 ever-gauzy 里业务逻辑最重的一块覆盖了从供应商管理、采购订单、商品入库、库存调拨、到出库发货的整条链路。比如你经营一家电商公司客户在线上下了单系统里可以生成销售订单仓库看到订单后拣货、发货库存数量实时扣减当库存低于设定阈值时系统可以提示采购人员生成采购订单补货。整个过程里销售、仓库、采购看到的是同一套数据不会出现前面卖了货后面不知道库存已经没了的情况。操作上第一次使用要先维护好两个基础档案一个是“供应商”信息一个是“商品/产品”信息。商品要特别注意设置单位、成本价、零售价、SKU 编码和库存警戒线。这些基础数据不干净后面所有报表都很难看。我在测试环境里见过有人把“件”和“箱”混着录结果库存数字翻了几倍还对不上账最后只能盘点整个仓库。物流配送方面社区版内置的规则比较通用对部分行业可能不够精细比如多仓组合发货、批次追溯、序列号管理这些需求需要评估是否依赖二次开发来实现。这是选型前必须想清楚的事情到底你的“供应链”复杂到什么程度。3.4 HR 与工资单员工全生命周期管理与薪酬计算HR 管理模块把员工信息、考勤、休假、薪酬记录放在一个地方。新员工入职时可以建立完整的员工档案关联部门、职级、直接上级和联系方式日常考勤可以通过系统里的时间追踪功能记录工时员工在任务上 Track Time月底就能汇总出勤和工时数据。休假审批走线上流程主管能看到团队所有请假情况方便排班和调整资源。工资单功能支持设定员工的基本工资、社保、个税以及其他补贴项目系统按月根据考勤工时、提成规则计算应发工资。这块在跨境团队或者多公司管理的场景下也支持多币种薪酬设定。但说句实在话工资计算涉及非常强的地方性法规差异不同国家和地区的个税政策、社保基数、公积金比例都不同社区版不可能全自动覆盖各省市细节。如果你在国内正常使用我建议把 ever-gauzy 作为“工资计算辅助工具”但最终申报还是交给专业的薪酬系统或人事专员去校验。3.5 报告与仪表盘管理者最该天天打开的东西系统里内置了多个仪表盘包括销售仪表盘、会计仪表盘、人力资源仪表盘等。你可以在一个页面上看到当月的收入趋势、待收款金额、项目成本排行、员工工时利用率。这些数据声明是实时从业务表中聚合出来的不用手动上报。对于小团队负责人来说这个“一眼看全局”的能力非常宝贵。不过我实测下来默认仪表盘的图表类型和筛选维度相对基础如果你有比较刁钻的报表需求比如“按客户类型销售渠道月份的毛利透视表”默认配置大概率不能满足需要自己到后端写查询接口或者到前端改图表配置。ever-gauzy 的报表是做在代码里的不是像 BI 工具那样随意拖拽这一点要提前知道。4. 快速上手从本地部署到跑通第一个业务4.1 环境准备把依赖装齐其实就成功了一半ever-gauzy 的基础运行环境比较简单主要就是 Node.js建议 18 或 20 LTS、PostgreSQL版本 12 以上建议 14、Redis建议 6、以及 git。前端构建走 Angular CLI后端跑 NestJS数据库迁移和执行脚本都集成在 package.json 里。我的建议是尽量用 Docker 跑数据库和 Redis不要在本地系统里裸装一堆服务。你只要在项目根目录提供的 docker-compose 文件中把 postgres 和 redis 这两个服务起起来就可以把本机环境保持得很干净以后不用了直接关掉容器就行。Node 环境则建议用 nvm 管理切换版本方便不会因为系统包管理器版本不对卡住。准备就绪后克隆代码库代码体积不小建议在网络稳定的环境下操作执行依赖安装。ever-gauzy 的依赖数量多npm install 可能要跑挺久建议设置 registry 为国内镜像源能明显缩短下载时间。安装完依赖后正式启动之前要先把环境变量准备好特别是数据库连接串、Redis 连接串、JWT 密钥这些关键项。你可以把示例环境变量文件复制一份命名为 .env 再修改注意别把密码写进公开仓库。4.2 数据库初始化与前后端启动按顺序来基本不会错先确认 PostgreSQL 和 Redis 服务是活的然后创建数据库建议命名成 gauzy 之类便于识别的名字。接下来执行数据库初始化命令这套系统会自动建表、跑种子数据并在数据库里填充一个默认的管理员账号和组织信息。种子数据非常重要它是你后面测试一切功能的基础如果没有管理账号你连登录界面都进不去。初始化完成之后就可以分别启动后端和前端了。后端服务默认跑在某个端口前端开发服务器默认跑在另一个端口。实际操作中我建议先把后端日志里有没有“Database connected / Application started”这类关键词确认一次再启动前端。前后端都起来后浏览器打开前端地址会用默认账号密码登录。第一次登录后记得第一时间去用户设置里修改密码别一直用默认凭证尤其是部署到服务器上的时候。如果你不想手动处理环境变量也可以直接用整套 Docker Compose 把前后端和中间件全跑起来比较省心但调试代码时不如本地起开发服务器方便。我个人的实践是日常开发用本地 Node 跑前后端快速验证环境时用 Docker 全家桶两者互补。4.3 第一次上线前的基础配置组织、员工、客户、商品登录系统之后先别急着点各种菜单按这个顺序来配置基本上不会出大问题第一步完善组织信息包括组织名称、时区、货币、财政年度等第二步创建部门和职位把组织架构搭起来第三步添加员工录入基本资料并关联到部门第四步维护客户和供应商档案第五步录入商品或服务目录。这几步做完你就拥有一个结构完整、可以开始“做业务”的系统了。接下来随便创建一个销售订单走一遍“订单-发票-收款”的流程再创建一个任务指派给员工并记录工时最后去仪表盘看统计数据是否联动这样基本能验证系统是否真的跑通了。我每次给新环境做验收都走这条流程半小时左右就能判断这套部署能不能放心使用。5. 常见问题与排查技巧实录5.1 新手上路最容易踩的四类问题根据我接触社区交流和个人操作的经验新手遇到的坑其实非常集中我把它们整理成了一张排查表方便你直接对照问题现象可能原因排查思路解决方式前端能打开但接口返 502/连接失败后端服务没起来或端口、IP 配置不对查看后端进程日志确认监听地址检查前端环境变量里的 API 地址修改环境变量中的 API 指向重启前端 dev server数据库连不上、迁移报错PostgreSQL 没启动、连接串错误、密码不匹配用数据库客户端工具手动连接验证检查数据库用户权限修正连接串重新创建数据库并授权重新执行迁移脚本登录提示无权限或找不到组织种子数据没跑完整或者登录账号不是管理员、租户配置异常检查数据库中各表是否已有组织数据确认账号角色和租户绑定关系重新执行种子数据脚本用安装时生成的超级管理员账号登录状态天天变数据看着乱多租户下选错了组织或角色权限导致数据范围不同观察界面右上角当前组织/租户切换状态检查用户角色下的数据权限范围进入用户管理分配正确的角色在界面切换到正确组织后再查看数据除了以上这四类还有一个非常隐蔽的问题环境变量里 Redis 地址配错会导致登录验证码和会话相关的功能间歇性失效看起来像是“偶尔登录不上过几分钟又好了”。一旦遇到这种诡异情况优先查 Redis 连接十有八九是它。5.2 二次开发时的常见心态陷阱有不少人会问我直接改这个项目会不会很难。我的一个明显感受是ever-gauzy 的模块边界设计还是比较清晰的如果你只改某一块业务逻辑比如调整工时计算规则、给发票增加自定义字段只需要动对应的 entity 和 service并不用全局理解所有代码。真正麻烦的是跨模块的数据流转比如你改了销售订单的金额计算它会不会影响后续发票、会计凭证、佣金报表这个链路需要仔细梳理。做定制之前建议先建一个分支把数据库导一份到本地然后跑通相关功能看日志里各个服务怎么调用别一上来就直接改主分支代码。ERP 系统的数据表关联特别多改一个字段类型或默认值可能跑到某个角落的 SQL 查询就崩了提前做好环境隔离能减少很多痛苦。5.3 数据备份、升级和还原的注意事项ERP 系统的数据就是生命线备份策略怎么强调都不过分。哪怕你只是本地测试也要养成定期导出数据库的习惯。社区版默认不带自动备份功能所以需要自己借助 PostgreSQL 的备份机制或定时任务来完成每天凌晨对数据库执行一次全量备份保留最近 7 天版本比较稳。有条件的团队再做一份异地备份更安心。升级版本前先把当前数据完整备份然后仔细读一下官方仓库的迁移指南看看有没有破坏性的改动比如某个字段重命名、某个表结构删除。升级之后不要马上把旧版本数据直接套进去先在测试环境跑一遍核心流程确认销售、采购、财务三块都没问题之后再动生产库。我经历过一次升级后发票编号连不上序号的教训后来学乖了生产升级前一定先在周边环境验证到无可挑剔为止。6. 扩展思路从 ever-gauzy 到自己想要的业务系统6.1 定制方向所有源码都在手上可塑性很强ever-gauzy 给了你完整的前后端源码也就意味着几乎所有面板和流程都能按业务需求调整。比如你想做一套专业服务公司管理系统可以重点改造项目和漏斗模块去掉商城相关功能你想做一套进销存系统那就以采购、库存和订单模块为核心弱化HR和绩效部分。它的模块独立性给了你“按需取用”的自由不用背负全部业务逻辑。前端改造上Angular 框架本身有清晰的组件和路由组织方式你能很快找到侧边栏菜单的配置入口把不需要的菜单隐藏或删除。后端改造上主要就是通过 NestJS 的模块机制进行服务替换或新增接口。整体来说工程化基础是扎实的尤其是错误处理、日志系统、权限守卫这些基础设施都比较完善省去很多从零造轮子的工作。6.2 商业化路径与商业模式参考从“自用”到“多租户服务”比纯定制更进一步的是你可以基于多租户架构把自己的解决方案做成 SaaS。ever-gauzy 本身就是按多租户模式设计的这意味着你可以把一套部署实例开放给多个客户每个客户拥有独立的数据和账户体系。你只要做好流量控制、套餐限制和数据隔离的额外优化就很容易搭建起一个标准 SaaS 产品。当然商业化不是写代码这么简单还要考虑开源许可证约束、品牌合规、技术支持服务流程、计费与用量统计模型、客户数据归属约定等。很多人拿着开源代码直接开卖最后踩了 License 的坑得不偿失。建议先研究清楚项目的许可证类型必要时咨询专业人士再决定商业模式。6.3 社区与企业生态别独自造轮子ever-gauzy 背后有比较活跃的社区和商业公司维护GitHub 上能查到不少 Issues 和 Discussion英文社区为主。遇到问题先在官方文档、GitHub Issues 和社区论坛里搜一遍大概率能找到类似讨论。如果找不到答案再按“复现步骤-环境版本-日志片段”的规范提交 Issue回复率相对不错。我给很多想认真使用该项目的团队建议是不要把它当成一个“黑盒软件”而是当成一个有生命力的开源产品来对待。跟着官方仓库的 Release Note 走参加一些社区讨论把遇到的问题和补丁反馈回社区这些投入长期来看都会反哺到你对系统的掌控能力上。我个人在实际操作中最深的体会是用它之前一定要花时间把“业务流程”想清楚然后用它去落地而不是一边看功能一边定流程。ever-gauzy 的能力上限比很多人想象得高但它的价值最终取决于你怎么定义自己的需求。最后再分享一个小技巧多逛逛它的种子数据和内置示例很多你看不明白的功能看一遍示例数据就全都通了。