Files
Logan.Li 97193eb090 feat: v0.4.0 主题切换 + LLM 全面优化 + 登录会话 + 用户管理/LDAP
主题:
- 深色/浅色/跟随系统(useTheme:本地缓存先行+远端同步+matchMedia),
  侧边栏快捷切换,设置页三档即选即生效

LLM(参考 opsxdb/aiops):
- llm.Client.ChatStream 流式(SSE 增量解析,透传 reasoning_content,
  ctx 控制超时);POST /api/ai/chat/stream(平台实时数据注入降幻觉,
  未配 LLM 降级规则 JSON,指令解析 action 不变)
- test-llm 支持草稿直测(保存前验证,apiKey 空/掩码回退已存)
- 发布失败自动 AI 分析日志尾部(结论/根因/建议),发布记录与发布
  Tab 展示分析卡片
- 设置页 Provider 预设(DeepSeek/GLM/GLM编码/Qwen/Kimi/Ollama/自定义)
  自动填 endpoint+模型+获取 Key 直达链接

登录与会话:
- HMAC 签名 token(7 天,密钥派生自 encryption.key);
  authMiddleware 保护 /api/*(豁免登录/健康/SSE日志流/入站webhook)
- 登录页 /login + 未登录跳转 + 登出;401 自动清理跳登录

用户管理与 LDAP(借鉴 LokiStack):
- /users 页面:本地用户 CRUD、一次性密码、角色切换、来源徽章
  (本地·蓝 | LDAP导入·紫);LDAP 导入按钮仅在启用且配置齐备时显示
- LDAP 配置卡(未启用仅提示语)、测试连接草稿直测+可选测试账号
- go-ldap:管理 Bind/用户搜索(防注入)/用户 DN 直连验证;
  批量导入冲突策略(已LDAP跳过/本地同名转LDAP/新建);
  登录分流本地 argon2id 或 LDAP 目录验证 + 首登 JIT 建号
2026-10-27 12:58:21 +08:00

101 lines
5.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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": "..."}`,返回签名 token,前端自动携带)。
密码使用 argon2id 哈希存储。启用 LDAP 后同名目录账号自动走 LDAP 验证(密码不落库)。
## 功能模块
| 模块 | 说明 | 数据来源 |
|------|------|----------|
| 登录/会话 | 本地账号 + LDAP 账号统一登录(JWT 式签名 token,7 天) | gin API |
| 主题 | 深色/浅色/跟随系统,侧边栏快捷切换,多端同步 | gin API(持久化) |
| 流水线 | 列表 + 画布编辑器(Tekton 任务库、拖拽编排、连线、节点属性配置) | gin API(SQLite 持久化) |
| 模拟执行 | 触发运行后节点状态实时推进(pending→running→success)+ SSE 日志流 | gin API + 模拟执行引擎 |
| AI 智能助手 | 全局悬浮对话:自然语言发布指令解析(流式输出、平台数据注入、规则兜底)、发布失败自动 AI 分析日志 | OpenAI 兼容 LLM(DeepSeek/GLM/Qwen/Kimi/Ollama 预设) |
| 飞书/Lark 通知 | 发布结果交互卡片(应用/分支/构建/状态/时间 + 构建详情按钮),支持加签 | gin API |
| 用户管理 | 本地用户 CRUD + LDAP 用户导入(未启用 LDAP 时导入按钮隐藏),本地/LDAP 来源徽章 | gin API |
| LDAP | 目录服务配置/测试连接/用户搜索导入、登录直连验证(密码不落库) | gin API(go-ldap) |
| 构建节点 | CRUD + 连通测试 + **dd 磁盘性能实测**(本地 exec / SSH 远程) | gin API |
| 工具配置 | Ubuntu 导向工具目录(apt/nvm 安装提示)、真实版本检测 | gin API |
| GitOps 部署 | ArgoCD 风格应用列表 / 资源树 / Diff | gin API |
| Jenkins | 服务器管理/Job 树/导入/真实构建触发与日志回传 | gin API(生产级客户端) |
| 批量发布 | 粘贴清单(opsx 风格解析)+ 手动勾选 + AI 对话触发 | gin API |
| 发布记录 | 运行历史、阶段、SSE 日志、Pod、失败 AI 分析、Jenkins 链接 | gin API |
## 架构
```
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