feat: FlowStack 发布系统首个可运行版本 (gin + React)
- Go gin 后端:流水线/节点/连线/运行/日志/GitOps/插件 REST API, SQLite(GORM) 自动建表 + seed,模拟执行引擎 + SSE 实时日志推送, 前端产物 go:embed 嵌入单二进制,一个端口同时服务 API 与页面 - React 19 前端:画布式流水线编辑器(React Flow + Tekton 任务库)、 GitOps 部署、批量发布、发布记录等 14 个模块页面, tRPC 全部替换为 REST(TanStack Query) - 首次启动生成随机密码管理员账号(日志 + data/initial-admin-password.txt) - run.sh 一键构建启动(默认端口 9527,支持 start/stop/restart/build/dev)
This commit is contained in:
commit
04d1342b27
115 files changed
+23268
No files matched your search
@@ -0,0 +1,92 @@
|
||||
# FlowStack 发布系统
|
||||
|
||||
参考阿里云云效 / 华为云 CodeArts 风格的画布式发布系统。
|
||||
架构:**Go gin 后端 + React 19 前端**,前端产物嵌入 Go 单二进制,一个端口同时服务 API 与页面。
|
||||
|
||||
## 快速开始
|
||||
|
||||
```bash
|
||||
./run.sh # 一键构建并启动,访问 http://localhost:9527
|
||||
./run.sh stop # 停止
|
||||
./run.sh dev # 开发模式(gin :9527 + Vite :5173 热更新)
|
||||
./run.sh help # 全部命令
|
||||
```
|
||||
|
||||
首次启动自动创建 SQLite 数据库(`data/flowstack.db`)并写入两条示例流水线
|
||||
(aiops-backend K8s 场景 / aiops-web 主机部署场景),零配置开箱即用。
|
||||
|
||||
## 初始管理员账号
|
||||
|
||||
首次启动自动生成 **随机初始密码** 的管理员账号(用户名 `admin`),并在日志中打印、写入 `data/initial-admin-password.txt`(权限 0600)。
|
||||
|
||||
查看初始密码:
|
||||
|
||||
```bash
|
||||
# 方式一:从启动日志中查看(与 opsxloki 的 docker logs 用法一致)
|
||||
grep -A6 "已生成管理员账号" logs/flowstack.log
|
||||
|
||||
# 方式二:直接查看密码文件(与 opsxloki 的 docker exec 用法一致)
|
||||
cat data/initial-admin-password.txt
|
||||
```
|
||||
|
||||
Docker 容器化部署时对应命令(参考 opsxloki 模式):
|
||||
|
||||
```bash
|
||||
docker logs <容器名> | grep -A6 "已生成管理员账号"
|
||||
docker exec <容器名> cat /app/data/initial-admin-password.txt
|
||||
```
|
||||
|
||||
登录校验接口:`POST /api/auth/login`(body: `{"username": "admin", "password": "..."}`)。
|
||||
密码使用 argon2id 哈希存储,请登录后立即修改。
|
||||
|
||||
## 功能模块
|
||||
|
||||
| 模块 | 说明 | 数据来源 |
|
||||
|------|------|----------|
|
||||
| 流水线 | 列表 + 画布编辑器(Tekton 任务库、拖拽编排、连线、节点属性配置) | gin API(SQLite 持久化) |
|
||||
| 模拟执行 | 触发运行后节点状态实时推进(pending→running→success)+ SSE 日志流 | gin API + 模拟执行引擎 |
|
||||
| GitOps 部署 | ArgoCD 风格应用列表 / 资源树 / Diff | gin API(部分模拟) |
|
||||
| 插件市场 | 已安装 / 可安装 / 启停 / 卸载 | gin API(SQLite 持久化) |
|
||||
| 发布记录 | 运行历史、阶段、日志、Pod 详情 | 前端演示数据(待接入) |
|
||||
| 批量发布 / 环境 / 凭证 / 构建节点 / Jenkins 导入 / Webhook / 系统设置 | UI 演示 | 前端演示数据(待接入) |
|
||||
|
||||
## 架构
|
||||
|
||||
```
|
||||
FlowStack/
|
||||
├── run.sh # 启动脚本(单二进制模式)
|
||||
├── backend/ # Go gin
|
||||
│ ├── main.go # 路由 + 静态托管(go:embed)
|
||||
│ └── internal/
|
||||
│ ├── model/ # GORM 模型(流水线/节点/连线/运行/日志/GitOps/插件)
|
||||
│ ├── database/ # SQLite 初始化 + seed
|
||||
│ └── handler/ # REST API + SSE 日志推送 + 模拟执行引擎
|
||||
├── frontend/ # React 19 + Vite + Tailwind + shadcn/ui + React Flow
|
||||
│ └── src/
|
||||
│ ├── lib/api.ts # REST 客户端
|
||||
│ ├── components/flow/# 画布编辑器(PipelineFlowEditor / TektonNode)
|
||||
│ └── pages/ # 14 个功能页面
|
||||
└── data/ # SQLite 数据库(运行时生成)
|
||||
```
|
||||
|
||||
## REST API 摘要
|
||||
|
||||
```
|
||||
GET/POST /api/pipelines 流水线列表 / 创建
|
||||
GET/PUT/DELETE /api/pipelines/:id 详情(含节点连线)/ 更新 / 删除
|
||||
PUT /api/pipelines/:id/nodes 保存画布节点(全量覆盖)
|
||||
PUT /api/pipelines/:id/edges 保存画布连线
|
||||
POST /api/pipelines/:id/runs 触发运行(模拟执行引擎)
|
||||
GET /api/runs 运行列表
|
||||
GET /api/runs/:runId 运行详情(阶段+日志)
|
||||
GET /api/runs/:runId/logs/stream SSE 实时日志
|
||||
GET /api/gitops/apps GitOps 应用列表
|
||||
GET/POST /api/gitops/argo/* ArgoCD 模拟接口
|
||||
GET/POST/DELETE /api/plugins* 插件管理
|
||||
GET /health 健康检查
|
||||
```
|
||||
|
||||
## 技术栈
|
||||
|
||||
- 后端:Go 1.24+ / gin / GORM / SQLite(glebarez 纯 Go 驱动)
|
||||
- 前端:React 19 / TypeScript / Vite 7 / Tailwind CSS / shadcn-ui / @xyflow/react (React Flow) / TanStack Query / lucide-react / sonner
|
||||
Reference in new issue
Block a user