diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d6f7fcf --- /dev/null +++ b/.gitignore @@ -0,0 +1,50 @@ +# XINFRA .gitignore + +# Go +*.exe +*.exe~ +*.dll +*.so +*.dylib +*.test +*.out +/go.sum +/vendor/ + +# Node.js +node_modules/ +dist/ +.env +.env.local +.env.*.local + +# IDE +.vscode/ +.idea/ +*.swp +*.swo +*~ +.DS_Store + +# Logs +*.log +logs/ + +# Temp files +tmp/ +temp/ + +# Build output +build/ +bin/ + +# Coverage +coverage/ +*.cover +*.coverprofile + +# Docker +docker-compose.override.yml + +# Kubernetes secrets (local dev) +*-secret.yaml diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..0426e38 --- /dev/null +++ b/Makefile @@ -0,0 +1,85 @@ +# XINFRA Makefile + +.PHONY: help build run test docker clean + +# 默认目标 +help: + @echo "XINFRA - 统一运维入口平台" + @echo "" + @echo "可用命令:" + @echo " make help - 显示此帮助信息" + @echo " make build - 构建前后端项目" + @echo " make run - 启动开发服务器" + @echo " make test - 运行测试" + @echo " make docker - 构建 Docker 镜像" + @echo " make clean - 清理构建产物" + @echo "" + +# 构建前后端项目 +build: build-frontend build-server + +build-frontend: + @echo "Building frontend..." + cd frontend && npm install && npm run build + +build-server: + @echo "Building server..." + cd server && go build -o bin/xinfra ./cmd/server + +# 启动开发服务器 +run: run-frontend run-server + +run-frontend: + @echo "Starting frontend dev server..." + cd frontend && npm run dev + +run-server: + @echo "Starting server..." + cd server && go run ./cmd/server + +# 运行测试 +test: test-frontend test-server + +test-frontend: + @echo "Running frontend tests..." + cd frontend && npm run test + +test-server: + @echo "Running server tests..." + cd server && go test ./... + +# 构建 Docker 镜像 +docker: docker-frontend docker-server + +docker-frontend: + @echo "Building frontend Docker image..." + docker build -t xinfra-frontend:latest -f deploy/docker/Dockerfile.frontend . + +docker-server: + @echo "Building server Docker image..." + docker build -t xinfra-server:latest -f deploy/docker/Dockerfile.server . + +# 清理构建产物 +clean: + @echo "Cleaning build artifacts..." + rm -rf frontend/dist frontend/node_modules + rm -rf server/bin server/vendor + find . -type d -name vendor -exec rm -rf {} + 2>/dev/null || true + +# 本地开发环境 +dev-up: + @echo "Starting local development environment..." + docker-compose up -d + +dev-down: + @echo "Stopping local development environment..." + docker-compose down + +# 数据库迁移 +migrate-up: + @echo "Running database migrations..." + cd server && go run ./cmd/server migrate up + +migrate-down: + @echo "Rolling back database migrations..." + cd server && go run ./cmd/server migrate down diff --git a/README.md b/README.md index 13e7b20..f0dcb82 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,126 @@ -# xinfra -Empowering developers to focus on delivery, ops to control risk, and management to gain full visibility — this is Xinfra in action. +# XINFRA - 统一运维入口平台 + +XINFRA 是一个统一运维入口平台,整合多个运维子系统,提供统一的登录认证、子系统导航、审计日志和 Ansible 运维调度功能。 + +## 项目特性 + +- 🔐 **统一认证**:支持 LDAP + SAML + OAuth 2.0 认证 +- 🎯 **子系统导航**:卡片式展示 6 个运维子系统,支持 SSO 跳转 +- 📊 **审计面板**:登录审计 + 运维操作审计,完整的操作追溯 +- 🚀 **Ansible 调度**:Playbook 执行、实时日志推送 +- 🔒 **安全可靠**:JWT 认证、HTTPS 传输、敏感配置 K8s Secret 管理 + +## 技术栈 + +| 层级 | 技术 | +|------|------| +| 后端 | Go 1.21+ / Gin | +| 前端 | Vue 3.3+ / Element Plus / Vite | +| 数据库 | MySQL 8.0 | +| 缓存 | Redis | +| 部署 | Kubernetes + Nginx | + +## 项目结构 + +``` +xinfra/ +├── frontend/ # 前端 Vue 3 项目 +│ ├── src/ +│ │ ├── api/ # API 请求封装 +│ │ ├── components/ # 可复用组件 +│ │ ├── composables/ # 组合式函数 +│ │ ├── layouts/ # 页面布局 +│ │ ├── router/ # 路由配置 +│ │ ├── stores/ # Pinia 状态管理 +│ │ ├── views/ # 页面视图 +│ │ └── utils/ # 工具函数 +│ └── ... +├── server/ # 后端 Go 项目 +│ ├── cmd/ # 程序入口 +│ ├── internal/ # 内部包(分层架构) +│ ├── pkg/ # 可复用公共包 +│ └── migrations/ # 数据库迁移 +├── deploy/ # 部署配置 +│ ├── docker/ # Docker 构建配置 +│ └── k8s/ # Kubernetes 配置 +├── docs/ # 项目文档 +└── ... +``` + +## 快速开始 + +### 环境要求 + +- Go 1.21+ +- Node.js 18+ +- MySQL 8.0 +- Redis 7.0+ + +### 本地开发 + +1. 克隆项目 + ```bash + git clone + cd xinfra + ``` + +2. 启动开发环境 + ```bash + make dev-up + ``` + +3. 启动前端开发服务器 + ```bash + make run-frontend + ``` + +4. 启动后端开发服务器 + ```bash + make run-server + ``` + +### 构建部署 + +1. 构建项目 + ```bash + make build + ``` + +2. 构建 Docker 镜像 + ```bash + make docker + ``` + +3. 部署到 Kubernetes + ```bash + kubectl apply -f deploy/k8s/ + ``` + +## 开发规范 + +### Git 提交规范 + +使用语义化提交信息: +- `feat:` 新功能 +- `fix:` 修复 bug +- `docs:` 文档更新 +- `style:` 代码格式调整 +- `refactor:` 重构 +- `test:` 测试相关 +- `chore:` 构建/工具相关 + +### 代码规范 + +- Go 代码遵循 `gofmt` 格式 +- Vue/TypeScript 代码遵循 ESLint 规范 +- 提交前请确保代码通过所有测试 + +## 相关文档 + +- [MVP 方案文档](docs/mvp-skeleton-plan.md) +- [API 接口文档](docs/api.md)(待补充) +- [部署文档](docs/deployment.md)(待补充) + +## 许可证 + +[待添加] diff --git a/deploy/docker/.gitkeep b/deploy/docker/.gitkeep new file mode 100644 index 0000000..ce73011 --- /dev/null +++ b/deploy/docker/.gitkeep @@ -0,0 +1,5 @@ +# Docker 构建配置 + +存放 Docker 镜像构建相关文件: +- Dockerfile.frontend: 前端镜像,基于 Node 构建 + Nginx 托管静态文件 +- Dockerfile.server: 后端镜像,基于 Go 编译 + 运行时最小镜像 diff --git a/deploy/k8s/.gitkeep b/deploy/k8s/.gitkeep new file mode 100644 index 0000000..cf25c4f --- /dev/null +++ b/deploy/k8s/.gitkeep @@ -0,0 +1,6 @@ +# Kubernetes 部署配置 + +存放 K8s 资源编排配置文件: +- frontend.yaml: 前端 Deployment,副本数、Service、环境变量配置 +- server.yaml: 后端 Deployment,副本数、Service、Secret 挂载 +- ingress.yaml: Ingress 配置,域名路由规则、TLS 证书 diff --git a/docs/.gitkeep b/docs/.gitkeep new file mode 100644 index 0000000..f6ff00e --- /dev/null +++ b/docs/.gitkeep @@ -0,0 +1,6 @@ +# 项目文档目录 + +存放项目相关文档: +- mvp-skeleton-plan.md: MVP 方案文档,定义代码骨架和实现要点 +- api.md: API 接口文档 +- deployment.md: 部署文档 diff --git a/frontend/public/.gitkeep b/frontend/public/.gitkeep new file mode 100644 index 0000000..92d0c73 --- /dev/null +++ b/frontend/public/.gitkeep @@ -0,0 +1,5 @@ +# 静态资源目录 + +存放静态资源文件,构建时原样复制到 dist 目录: +- favicon.ico: 网站图标 +- 图片资源等 diff --git a/frontend/src/api/.gitkeep b/frontend/src/api/.gitkeep new file mode 100644 index 0000000..89f9109 --- /dev/null +++ b/frontend/src/api/.gitkeep @@ -0,0 +1,7 @@ +# API 请求模块 + +存放封装后端 API 请求的文件: +- request.ts: Axios 实例封装,请求拦截器(Token 注入)、响应拦截器(错误处理) +- auth.ts: 认证相关接口:登录、登出、获取用户信息 +- audit.ts: 审计相关接口:查询登录审计、运维操作审计 +- subsystem.ts: 子系统相关接口:获取子系统列表、SSO 跳转 URL diff --git a/frontend/src/components/.gitkeep b/frontend/src/components/.gitkeep new file mode 100644 index 0000000..8cfff9b --- /dev/null +++ b/frontend/src/components/.gitkeep @@ -0,0 +1,6 @@ +# 可复用 UI 组件 + +存放按功能模块组织的可复用组件: +- Layout/: 页面布局组件(AppHeader、AppSidebar、AppMain) +- SubsystemCard.vue: 子系统卡片组件 +- AuditLogTable.vue: 审计日志表格组件 diff --git a/frontend/src/components/Layout/.gitkeep b/frontend/src/components/Layout/.gitkeep new file mode 100644 index 0000000..93a4d46 --- /dev/null +++ b/frontend/src/components/Layout/.gitkeep @@ -0,0 +1,6 @@ +# 布局组件 + +存放页面布局相关的组件: +- AppHeader.vue: 顶部导航栏,显示 Logo、用户名、退出登录 +- AppSidebar.vue: 侧边菜单栏,导航菜单项(仪表盘、子系统、审计) +- AppMain.vue: 主内容区,包裹路由视图的容器 diff --git a/frontend/src/composables/.gitkeep b/frontend/src/composables/.gitkeep new file mode 100644 index 0000000..2b3e8cd --- /dev/null +++ b/frontend/src/composables/.gitkeep @@ -0,0 +1,4 @@ +# Vue 3 组合式函数 + +存放可复用的业务逻辑: +- useAuth.ts: 认证状态管理,包括登录、登出、Token 校验、路由守卫 diff --git a/frontend/src/layouts/.gitkeep b/frontend/src/layouts/.gitkeep new file mode 100644 index 0000000..3f1472a --- /dev/null +++ b/frontend/src/layouts/.gitkeep @@ -0,0 +1,4 @@ +# 页面布局定义 + +存放不同页面的布局组件: +- DefaultLayout.vue: 默认布局,包含顶栏 + 侧边栏 + 内容区 diff --git a/frontend/src/router/.gitkeep b/frontend/src/router/.gitkeep new file mode 100644 index 0000000..bc090ff --- /dev/null +++ b/frontend/src/router/.gitkeep @@ -0,0 +1,4 @@ +# 前端路由配置 + +存放路由相关配置: +- index.ts: 路由实例,定义路由表、路由守卫(未登录重定向) diff --git a/frontend/src/stores/.gitkeep b/frontend/src/stores/.gitkeep new file mode 100644 index 0000000..710a762 --- /dev/null +++ b/frontend/src/stores/.gitkeep @@ -0,0 +1,5 @@ +# Pinia 状态管理 + +存放全局状态管理模块: +- auth.ts: 认证状态,存储 Token、用户信息,提供登录/登出 actions +- user.ts: 用户信息状态,缓存当前登录用户的详细信息 diff --git a/frontend/src/utils/.gitkeep b/frontend/src/utils/.gitkeep new file mode 100644 index 0000000..a0acc7b --- /dev/null +++ b/frontend/src/utils/.gitkeep @@ -0,0 +1,4 @@ +# 通用工具函数 + +存放不依赖业务逻辑的通用工具: +- auth.ts: 认证工具,Token 解析、过期校验、本地存储读写 diff --git a/frontend/src/views/.gitkeep b/frontend/src/views/.gitkeep new file mode 100644 index 0000000..5ac6c0d --- /dev/null +++ b/frontend/src/views/.gitkeep @@ -0,0 +1,7 @@ +# 页面视图组件 + +存放页面级组件,一个文件对应一个完整页面: +- auth/: 认证相关页面(Login.vue) +- dashboard/: 仪表盘页面(Index.vue) +- subsystem/: 子系统导航页面(Navigation.vue) +- audit/: 审计面板页面(LoginAudit.vue、OpsAudit.vue) diff --git a/frontend/src/views/audit/.gitkeep b/frontend/src/views/audit/.gitkeep new file mode 100644 index 0000000..a43f735 --- /dev/null +++ b/frontend/src/views/audit/.gitkeep @@ -0,0 +1,5 @@ +# 审计面板页面 + +存放审计相关的视图组件: +- LoginAudit.vue: 登录审计页,查询登录记录、按时间/IP/结果筛选 +- OpsAudit.vue: 运维操作审计页,查询操作记录、按类型/状态筛选 diff --git a/frontend/src/views/auth/.gitkeep b/frontend/src/views/auth/.gitkeep new file mode 100644 index 0000000..84a514b --- /dev/null +++ b/frontend/src/views/auth/.gitkeep @@ -0,0 +1,4 @@ +# 认证相关页面 + +存放认证相关的视图组件: +- Login.vue: 登录页,包含用户名密码表单、LDAP 认证入口 diff --git a/frontend/src/views/dashboard/.gitkeep b/frontend/src/views/dashboard/.gitkeep new file mode 100644 index 0000000..48fc181 --- /dev/null +++ b/frontend/src/views/dashboard/.gitkeep @@ -0,0 +1,4 @@ +# 仪表盘页面 + +存放仪表盘相关的视图组件: +- Index.vue: 首页仪表盘,展示系统概览、快捷入口 diff --git a/frontend/src/views/subsystem/.gitkeep b/frontend/src/views/subsystem/.gitkeep new file mode 100644 index 0000000..06b5069 --- /dev/null +++ b/frontend/src/views/subsystem/.gitkeep @@ -0,0 +1,4 @@ +# 子系统导航页面 + +存放子系统导航相关的视图组件: +- Navigation.vue: 子系统导航页,6 个子系统卡片网格展示 diff --git a/server/cmd/server/.gitkeep b/server/cmd/server/.gitkeep new file mode 100644 index 0000000..efbb44f --- /dev/null +++ b/server/cmd/server/.gitkeep @@ -0,0 +1,4 @@ +# 服务启动入口 + +存放 Go 程序入口文件: +- main.go: 服务启动入口,初始化配置、数据库、路由,启动 HTTP 服务 diff --git a/server/internal/config/.gitkeep b/server/internal/config/.gitkeep new file mode 100644 index 0000000..3f1878d --- /dev/null +++ b/server/internal/config/.gitkeep @@ -0,0 +1,4 @@ +# 配置管理模块 + +存放配置加载相关代码: +- config.go: 配置加载,读取 YAML 配置文件,支持环境变量覆盖 diff --git a/server/internal/handler/.gitkeep b/server/internal/handler/.gitkeep new file mode 100644 index 0000000..67a2a01 --- /dev/null +++ b/server/internal/handler/.gitkeep @@ -0,0 +1,8 @@ +# HTTP 处理器层(Controller) + +存放请求处理器,负责接收请求、校验参数、调用 Service: +- auth.go: 认证处理器,处理登录/登出/用户信息请求 +- audit.go: 审计处理器,处理登录审计/运维操作审计查询请求 +- subsystem.go: 子系统处理器,处理子系统列表/SSO URL 生成请求 +- task.go: 任务处理器,处理 Ansible 任务创建/状态查询请求 +- response.go: 统一响应,定义标准 JSON 响应格式和错误码 diff --git a/server/internal/middleware/.gitkeep b/server/internal/middleware/.gitkeep new file mode 100644 index 0000000..75697ab --- /dev/null +++ b/server/internal/middleware/.gitkeep @@ -0,0 +1,6 @@ +# HTTP 中间件 + +存放请求处理前后执行的通用逻辑: +- auth.go: 认证中间件,校验 JWT Token,注入用户信息到 Context +- logger.go: 日志中间件,记录请求方法、路径、耗时、状态码 +- audit.go: 审计中间件,自动记录非 GET 请求的操作审计日志 diff --git a/server/internal/model/.gitkeep b/server/internal/model/.gitkeep new file mode 100644 index 0000000..33256f7 --- /dev/null +++ b/server/internal/model/.gitkeep @@ -0,0 +1,6 @@ +# 数据模型层 + +存放数据库表结构和业务实体定义: +- user.go: 用户模型,对应 users 表,定义用户字段和状态枚举 +- audit.go: 审计模型,对应 login_audit / ops_audit 表 +- subsystem.go: 子系统模型,对应 subsystems 表,定义子系统信息 diff --git a/server/internal/repository/.gitkeep b/server/internal/repository/.gitkeep new file mode 100644 index 0000000..e6a190d --- /dev/null +++ b/server/internal/repository/.gitkeep @@ -0,0 +1,5 @@ +# 数据访问层(DAO) + +存放数据库 CRUD 操作封装: +- user.go: 用户仓储,用户查询、创建、更新、LDAP DN 映射 +- audit.go: 审计仓储,审计记录插入、分页查询、条件筛选 diff --git a/server/internal/router/.gitkeep b/server/internal/router/.gitkeep new file mode 100644 index 0000000..010eea4 --- /dev/null +++ b/server/internal/router/.gitkeep @@ -0,0 +1,4 @@ +# 路由注册模块 + +存放 API 路由配置: +- router.go: 路由注册,定义 API 路由表,绑定 Handler 和 Middleware diff --git a/server/internal/service/.gitkeep b/server/internal/service/.gitkeep new file mode 100644 index 0000000..4bb71a0 --- /dev/null +++ b/server/internal/service/.gitkeep @@ -0,0 +1,8 @@ +# 业务逻辑层 + +存放核心业务逻辑,编排 Repository: +- auth.go: 认证服务,LDAP 认证、本地降级认证、JWT 生成 +- ldap.go: LDAP 服务,封装 LDAP 连接、查询、认证逻辑 +- audit.go: 审计服务,记录登录审计、运维操作审计 +- subsystem.go: 子系统服务,子系统查询、OAuth 2.0 SSO URL 生成 +- ansible.go: Ansible 调度服务,创建任务、执行 Playbook、推送日志 diff --git a/server/internal/websocket/.gitkeep b/server/internal/websocket/.gitkeep new file mode 100644 index 0000000..77150fc --- /dev/null +++ b/server/internal/websocket/.gitkeep @@ -0,0 +1,4 @@ +# WebSocket 实时推送模块 + +存放 WebSocket 连接管理相关代码: +- hub.go: WebSocket Hub,管理客户端连接,广播 Ansible 任务日志 diff --git a/server/migrations/.gitkeep b/server/migrations/.gitkeep new file mode 100644 index 0000000..6c162a7 --- /dev/null +++ b/server/migrations/.gitkeep @@ -0,0 +1,4 @@ +# 数据库迁移脚本 + +存放按版本管理的表结构变更脚本: +- 001_init.sql: 初始化迁移,创建 users / subsystems / audit / ansible_tasks 表 diff --git a/server/pkg/database/.gitkeep b/server/pkg/database/.gitkeep new file mode 100644 index 0000000..dc7614e --- /dev/null +++ b/server/pkg/database/.gitkeep @@ -0,0 +1,4 @@ +# 数据库连接管理 + +存放数据库连接相关代码: +- mysql.go: MySQL 连接池,初始化连接、健康检查、优雅关闭 diff --git a/server/pkg/ldap/.gitkeep b/server/pkg/ldap/.gitkeep new file mode 100644 index 0000000..c26fe50 --- /dev/null +++ b/server/pkg/ldap/.gitkeep @@ -0,0 +1,4 @@ +# LDAP 客户端封装 + +存放可复用的 LDAP 相关代码: +- client.go: LDAP 客户端,连接管理、用户认证、属性查询 diff --git a/server/pkg/sso/.gitkeep b/server/pkg/sso/.gitkeep new file mode 100644 index 0000000..42dd31e --- /dev/null +++ b/server/pkg/sso/.gitkeep @@ -0,0 +1,5 @@ +# SSO 协议处理 + +存放 SSO 相关协议实现: +- oauth2.go: OAuth 2.0 客户端,主系统↔子系统的 Authorization Code 流程 +- saml.go: SAML 处理,主系统↔LDAP 的 SAML 断言生成和验证