ferry 中文教程:用开源工单系统把跨部门审批流程串起来
2026-10-12发表于
编程语言一、速览:它是什么,能解决什么痛点
入门
ferry 是一个开源工单系统,也可以把它理解成一个“工作流引擎”。它的作用是把日常工作中那些需要多个人、多个部门按顺序处理的事情,比如请假审批、采购申请、故障报修、IT 开通账号等,变成一条条可视化的流程,让每个人在系统里点一点就能完成自己的环节。
传统做法往往靠邮件、聊天工具来回沟通,谁审批了、卡在谁那里经常搞不清楚。ferry 把整个流转过程记录下来,每个节点是谁处理、处理了多久、现在到哪一步,都能在后台看到。对经常需要跨部门协作的中小团队来说,它能减少很多重复沟通和人为遗漏。
二、核心概念:把工单系统比作快递驿站
入门
在正式开始部署和使用之前,先把几个名词说清楚。这些词在后面反复出现,理解了它们,你就已经把握住这个项目的骨架。
工单就是一张“任务卡片”。比如“申请一台新显示器”,就是一个工单。它记录了谁提交的、什么时间、需要做什么、现在到了哪个环节。
流程可以理解成快递的运输路线。你发一个快递,会经过“揽收 → 分拣中心 → 派送点 → 签收”这些固定节点。工单流程也是这样,你先在系统里把节点画好:提交申请 → 部门主管审批 → 行政采购 → 确认收货。每个节点由谁处理,是可以配置的。
模板是工单的“空白表格”。不同的事情需要填写的内容不一样,请假要填天数和原因,采购要填商品和预算。模板让你不用每次从零设计表单,而是选一个已经做好的格式,直接往里填信息。
任务钩子听起来有点技术,其实就是“到达某个节点时自动触发一个动作”。比如流程走到“主管审批通过”时,自动发一封邮件通知下一个处理人。钩子不一定只是发邮件,你还可以自己写脚本,对接企业微信、钉钉、短信等其他通知方式。
网关是流程里的“岔路口”。串行网关就像一条单行道,一个一个来;并行网关像多个窗口同时开放,几个审批人可以同时处理;排他网关像安检分流,满足条件 A 走左边通道,否则走右边。这些配置让流程能适应“金额超过 5000 需要总监加签”之类的实际规则。
三、安装与获取:需要准备哪些环境
入门
ferry 是前后端分离的项目。简单说,后端负责存数据、跑逻辑,前端负责展示界面,两者分开运行、通过接口通信。所以部署时需要同时准备后端和前端的环境。
前置条件大致如下:
- 一台能联网的 Linux 服务器,或者你自己的 Windows/Mac 电脑也可以先跑起来测试
- Git:用来从 GitHub 下载源代码,相当于下载工具
- Go 1.16 以上:后端运行环境,因为 ferry 后端是用 Go 语言里的 Gin 框架写的
- Node.js 14 以上:前端运行环境,前端基于 Vue 和 Element UI,需要 Node.js 来编译和启动
- MySQL 5.7 以上:数据库,用来存放工单、流程、用户等数据。ferry 官方没有强制说明数据库版本,但这类系统普遍使用 MySQL,请以官方文档为准
这些环境的作用可以用一句话概括:Git 拿到代码,Go 和 Node.js 分别把后端、前端跑起来,MySQL 负责把数据存下来。
代码下载命令很简单,在服务器终端里执行:
git clone https://github.com/lanyulei/ferry.git
之后需要分别进入后端和前端目录,按官方文档配置数据库连接信息,再依次启动后端服务、前端服务。初次部署涉及细节较多,官方提供了两个视频教程,名字分别是《ferry工单系统需要的软件准备》和《ferry源代码下载后第一次运行》,建议跟着视频操作,比自己琢磨快很多。
四、核心用法:从零配置一个审批流
进阶 · 推荐细读
装好系统后,第一件值得做的事是创建一个属于自己的工单流程。整个操作可以分为四步:设计表单、画流程图、绑定处理人、设置通知。
第一步,建模板。 在“流程中心”里选择“模板管理”,新建一个模板,根据业务需要添加字段。比如“请假申请”模板,可以放“请假类型”“开始日期”“结束日期”“请假事由”这几个输入项。字段类型支持文本框、下拉选择、日期选择等常见控件。这一步决定了提交工单时,申请人看到的是什么样的表单。
第二步,画流程图。 在“流程管理”里新建流程,拖拽节点到画布上。一个最简单的请假流程是:员工提交 → 部门主管审批 → 人事备案。节点之间用连线连接,线代表流转方向。你可以设置某个节点是串行还是并行,也可以加一个排他网关,比如“请假天数大于 3 天时,额外需要总监审批”。
第三步,指定处理人。 每个节点需要配置谁可以处理。ferry 支持直接指定某个人,也支持用“变量”来表示。比如“部门负责人”这个变量,会根据提交人自动找到他所在部门的负责人,不用每个部门单独配一遍。常见的变量还有“创建者”“创建者负责人”等,适合通用流程。
第四步,加通知。 在流程节点上绑定任务钩子,选择“邮件通知”。当工单流转到该节点时,系统会自动给处理人发邮件,提醒他待办事项。如果公司不用邮件,可以自己写一个简单的脚本,调用企业微信或钉钉的接口发送消息。
配置完成后,用普通账号提交一张测试工单,看看流程能否按预期走到下一个节点、邮件有没有触发。测试阶段建议多换几种条件试试,尤其是排他网关的判断逻辑。
五、配置与定制:权限管理和任务钩子
进阶 · 推荐细读
ferry 的权限控制基于 RBAC 模型。RBAC 就是“基于角色的访问控制”,你可以把它理解成公司里的岗位:财务经理能做财务相关操作,普通员工只能提交报销申请。系统里先建角色,再给角色分配菜单、页面按钮、API 接口的访问权限,最后把用户归到某个角色下,权限就自动生效了。
这种设计的好处是,不用给每个用户单独设置权限。同一个部门的人员权限相同,就建一个角色、把大家都加进去;有人调岗了,改一下他的角色即可,不用一个个调整。
任务钩子是 ferry 里可玩性比较高的部分。系统自带邮件通知,但实际工作中可能还想对接短信、飞书、企业微信等。你可以自己写一段脚本,放在指定目录,流程到达某个节点时执行这个脚本,脚本里做你想做的任何通知或数据操作。比如向第三方系统推送一条消息,或者自动创建一条记录。
自定义脚本需要一些开发能力,但好处是灵活性很大。对于没有开发资源的团队,只用邮件通知也够用;对有一定技术底子的运维或开发,这个功能可以把 ferry 和公司现有系统串起来。
六、踩坑与建议
入门
部署和使用过程中,有几个地方容易出问题,提前留意可以少走弯路。
环境版本不匹配是最常见的坑。Go 版本太旧会导致后端编译报错,Node.js 版本太旧会让前端构建失败。建议严格按照官方文档里写的版本要求安装,不要用系统自带的旧版本。
数据库连接失败通常是因为配置里的账号密码、数据库名、主机地址写错了,或者 MySQL 服务没有启动。确认 MySQL 正常运行,并且给 ferry 用的数据库已经创建好,账号有读写权限。
演示站点数据不全是另一个需要注意的点。官方提供的在线演示地址可以体验界面和基本操作,但演示环境通常会隐藏删除按钮、限制部分功能,而且数据可能被其他人清理。不要依赖演示环境测试完整流程,最好自己部署一套本地或测试服环境。
另外,如果只是小团队内部用,建议先用最简单的流程跑通,不要一上来就设计几十个节点的大流程图。流程越复杂,后期维护和排查问题越难。先用好“串行审批 + 邮件通知”这个最小闭环,再逐步增加并行、排他、变量处理人等高级特性。
七、判断建议:这个项目适合你吗
入门
ferry 适合这样的团队:已经有一个初步的内部流程管理需求,希望用开源工具自建,不满足于群里发消息“@某某审批”,同时具备一定的技术运维能力(至少能跟着文档部署 Go 和 Node.js 项目)。
如果你是个人开发者,想学习工作流引擎、前后端分离项目结构,ferry 也是一个不错的参考项目。它的代码结构比较清晰,流程引擎的设计思路对理解这类系统有很大帮助。
但如果你完全没有技术背景,也不想折腾服务器,可能更适合先使用市面上现成的 SaaS 工单工具。另外,如果你的团队规模较大、流程极其复杂,ferry 的扩展性和健壮性需要自行评估,最好先部署一套测试环境,模拟真实业务跑一周看看效果再做决定。
项目信息
| 项目 | 值 |
|---|---|
| 仓库 | lanyulei/ferry |
| 语言 | JavaScript |
| Star | 6,617 |
| Fork | 1,151 |
| 主页 | 无 |
参考链接
延伸阅读
想继续探索?这些同领域的教程可能也适合你:
163
72
1
3397
文章目录
评论