# FlowStack **Repository Path**: attacker/flow-stack ## Basic Information - **Project Name**: FlowStack - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-27 - **Last Updated**: 2026-10-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 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`)、随机管理员和基础系统设置,默认**不写入演示流水线或虚构资源数据**。本地需要示例数据时,显式设置 `FLOWSTACK_SEED_DEMO=true` 后再初始化空数据库。 ## 初始管理员账号 本地首次启动自动生成 **随机初始密码** 的管理员账号(用户名 `admin`),并在日志中打印、写入 `data/initial-admin-password.txt`(权限 0600)。也可通过 `FLOWSTACK_INITIAL_ADMIN_PASSWORD` 显式指定首次密码(容器化部署推荐用该变量或挂载卷后查看密码文件,避免使用弱口令)。 查看初始密码: ```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 持久化) | | 模拟试跑 | 原生流水线仅验证节点编排与状态流转,界面和记录明确标注“试跑”,不伪造脚本输出、不触发真实发布通知 | 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 | ## 容器化部署 ```bash # 构建镜像(三阶段:前端构建 → Go 静态编译 → 非 root 运行时) docker build -t flowstack:latest . # 运行(数据持久化在 /app/data 卷) docker run -d --name flowstack -p 3000:3000 -v flowstack-data:/app/data flowstack:latest # 查看初始密码(随机生成) docker logs flowstack | grep -A6 "已生成管理员账号" docker exec flowstack cat /app/data/initial-admin-password.txt # 常用环境变量 # PORT=3000 监听端口 # FLOWSTACK_SEED_DEMO=true 首次初始化时写入演示数据(默认不写) # FLOWSTACK_INITIAL_ADMIN_PASSWORD 显式指定初始管理员密码(默认随机) # FLOWSTACK_ENCRYPTION_KEY 指定 32 字节加密密钥(默认自动生成 data/encryption.key; # 凭证/Token/LDAP 密码加密与会话签名均由它派生,换环境部署需一致才能解密旧数据) ``` ## 架构 ``` 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