起因:原本公司计划采用某道来作为项目管理,并已部署了开源版本,但是由于某道来的项目管理功能太过复杂,导致项目管理人员不愿意使用,因此我决定自己开发一个极简的项目管理系统,以便于项目管理人员能够快速上手。
- 项目管理功能极简,只有项目、任务、缺陷、测试等几大相关模块,每个模块的功能也非常简单,只有最基本的功能,不会有过多的功能,以免用户使用起来感到复杂。
- 完全免费,不会有任何收费的功能,也不会有任何收费的计划,以免用户使用起来感到不安。
- 完全开源,用户可以自由的修改源代码,以满足自己的需求。
- 前端使用Vue3/ts/NaiveUI,后端使用Go/Fiber/gorm/redigo,数据库默认采用Mysql,缓存采用Redis
- 未使用消息队列中间件,而是内部简单实现了观察者模式,基于订阅发布的方式实现了消息队列的功能,以减少部署的复杂度。
- 权限系统未使用任何框架,而是自己实现了一个权限系统,以更敏捷地实现自己的想法。
- 安装Mysql和Redis,或直接采用云服务
- 安装meilisearch,作为本系统的全文检索服务
- 安装onlyoffice,作为本系统的在线文档服务,并获取jwt secret(后续配置入配置文件)
- 编译项目,包括前后端,将生成celestial程序和page文件夹
- 上传程序及page文件夹到服务器
- 安装nginx或其他反向代理服务,并将page文件夹作为静态文件目录首页
- 在celestial程序同级目录建立conf文件夹,在里面建立config.toml配置文件,该文件配置内容可参考项目根目录下的conf/config.toml文件
- 配置nginx代理到celestial的http服务端口
- 启动celestial程序,程序将自动链接到数据库并建表结构,初始化部分数据
- 访问系统
权限采用非常经典的RBAC模型,即角色-权限-用户的模型,其中角色和权限是多对多的关系,用户和角色是多对多的关系,但角色定义了3类,超级管理员、普通角色及项目角色
- 超级管理员:拥有所有权限,可以对系统进行任何操作,包括系统设置、用户管理、角色管理、权限管理等,无法通过界面进行权限分配,只能通过数据库直接修改
- 普通角色:常见的角色定义及资源权限分配,可以通过界面进行权限分配,但只能是系统功能的资源权限,无法配置项目相关权限,可以直接分配给用户
- 项目角色:项目角色是一种特殊的角色,只能通过项目进行分配,添加项目组成员时直接分配,项目角色只能分配到项目相关的资源权限,并只能在项目中起作用
这样的角色设置,可以确保用户正常的系统功能以普通角色的身份进行操作,而在项目中,可以根据项目的需要,分配不同的项目角色,以满足项目的需求。
项目中有功能模块,需要评审,评审通过后的功能模块可以建立需求(该需求就在该功能模块下),需求在设计完成后可评审,评审通过后,可以建立相应任务。
而任务本身也可以分解出子任务,没有层级限制。
任务从创建到完成的状态依次为:新建、已确认、进行中、已完成
- 新建:新建的任务允许更改,并指定参与人
- 已确认:所有参与人都确认后,任务进入已确认状态,此时任务不允许更改,如果仅部分参与人确认,状态为部分确认
- 进行中:已确认的任务才能开始执行,只要有任意参与人开始,任务就是执行中的状态了
- 已完成:所有参与人都完成后,任务进入已完成状态。
任务允许多人同时参与,但必须所有人都确认签收任务才能开始执行。
任务开始执行时,每个参与人的状态是独立的,即A开始后,B还未开始,那么A显示的按钮将是完成,B显示的按钮将是开始。
- 缺陷新建后,需要指派处理人
- 处理人可以开始处理或拒绝缺陷,并填写原因
- 处理人可再次指派给其他人
- 处理人完成缺陷后,需要指派给测试人员做验证
- 测试人员验证后,可以标记已解决或重新指派到其他人继续解决
- 已关闭的缺陷可以重新打开
可能会根据公司或实际需要,不断改进系统,但不会增加过多的功能,以免增加系统的复杂度。