
TypeScript
req-platform
公司内部需求协作平台:提需求 · 认领开发 · 协作交付 · 反馈迭代(NestJS + Prisma + Next.js + Gitea)
项目简介
公司内部需求协作平台:提需求 · 认领开发 · 协作交付 · 反馈迭代(NestJS + Prisma + Next.js + Gitea)
说明
内部需求协作平台
面向公司内部的「需求发布 → 认领 → 协作开发 → 发布 → 反馈迭代」一体化平台。 以自建 Gitea + Gitea Actions 作为 Git 与 CI/CD 底座,自研平台通过 Gitea API 把仓库、Pull Request、Issue、流水线状态与业务数据打通。
解决什么问题
| 现状痛点 | 平台能力 |
|---|---|
| 不会开发的同事有需求,只能口头找人 | 结构化需求表单发布需求单,进入公开需求池 |
| 有开发能力的同事不知道别人的需求 | 需求池 + 标签订阅,新需求按能力标签定向通知 |
| 多人重复开发相同功能 | 需求单唯一化,且认领采用「先到先得」原子锁 |
| 缺少规范的协作与发布流程 | 自动建仓(含模板)、PR 评审、Gitea Actions CI/CD |
| 交付后没人管后续问题 | 平台内反馈自动同步为仓库 Issue,形成迭代闭环 |
核心流程
架构
技术栈
| 层次 | 选型 |
|---|---|
| Git 与 CI 底座 | Gitea 1.22(兼容 GitHub API)+ act_runner(兼容 GitHub Actions 语法) |
| 后端 | NestJS 10 + TypeScript + Prisma + PostgreSQL 16 + BullMQ/Redis 7 |
| 前端 | Next.js 14(App Router)+ React 18 + Ant Design 5 |
| 认证 | 邮箱注册 + 管理员审核 + JWT |
| 部署 | Docker Compose 单机部署(适合 100 人以内) |
快速开始
1. 准备环境变量
2. 启动基础设施(数据库 / 缓存 / Gitea / Runner)
3. 初始化 Gitea(创建管理员、组织、API Token、Runner 令牌、仓库模板)
脚本会:
- 创建 Gitea 管理员账号
- 创建组织
GITEA_ORG(默认projects),所有项目仓库都放在该组织下 - 生成平台调用 Gitea 的 API Token(含
write:admin等权限)并自动写回.env - 生成 act_runner 注册令牌并写入
deploy/runner/.registration-token - 从
deploy/templates/repo-template初始化 / 同步仓库模板
脚本可重复执行。修改了
deploy/templates/repo-template后重新执行即可同步模板, 只影响之后新建的仓库。
4. 重启 Runner 完成注册
5. 启动平台
6. 访问
| 服务 | 地址 | 说明 |
|---|---|---|
| 需求协作平台 | http://localhost:8080 | 使用 .env 中 ADMIN_EMAIL / ADMIN_PASSWORD 登录 |
| Git 服务(Gitea) | http://localhost:8081 | 平台顶部「代码仓库」按钮一键免密进入;也可用 GITEA_ADMIN_USER 账号密码登录 |
| 接口文档 | http://localhost:8080/api/docs | 非生产环境下自动开启的 Swagger |
平台与 Git 服务使用同一主机名、不同端口,这是免密登录(SSO)能生效的前提: 浏览器 Cookie 只按主机名共享、不区分端口。本地统一用
localhost,局域网内换成服务器 IP (例如http://192.168.1.10+http://192.168.1.10:8081)。⚠️ 不要配成
app.localhost+git.localhost这类主机名不同的组合 —— 那样 SSO 一定失效, 从平台点进 Git 服务会退回 Gitea 登录页。生产环境请让两个服务共用一个