- 前端: React 18 + TypeScript + Vite + Tailwind CSS + shadcn/ui - 后端: Go + Gin + GORM + JWT (golang-jwt/jwt/v5) - 功能: 服务器管理、K8s集群、监控告警、CI/CD、自动化运维、审批流程、审计日志 - 文档: 设计文档(ROADMAP/PDD/架构/模块)
305 lines
8.7 KiB
Markdown
305 lines
8.7 KiB
Markdown
# EZOps 后端服务
|
||
|
||
EZOps 是一个专业的 AIOps 智能运维平台后端服务,基于 Go + Gin 框架开发。
|
||
|
||
## 功能特性
|
||
|
||
### 核心模块
|
||
|
||
- **用户管理**: 用户认证、角色权限管理
|
||
- **资产管理**: 服务器资产、云账号、域名管理
|
||
- **Kubernetes 管理**: 集群、节点、Pod、Deployment、Service、Ingress 管理
|
||
- **监控告警**: 告警规则、告警事件、通知渠道
|
||
- **应用发布**: CI/CD 流水线、发布审批
|
||
- **自动化运维**: 定时任务、脚本管理、任务执行
|
||
- **审批流程**: 审批模板、审批流程管理
|
||
- **站内导航**: 导航分组、链接管理
|
||
- **审计日志**: 操作日志记录、查询、统计
|
||
|
||
## 技术栈
|
||
|
||
- **框架**: Gin Web Framework
|
||
- **ORM**: GORM
|
||
- **数据库**: MySQL / PostgreSQL
|
||
- **缓存**: Redis (可选)
|
||
- **认证**: JWT
|
||
- **日志**: Zap
|
||
- **配置**: Viper
|
||
- **文档**: Swagger
|
||
|
||
## 快速开始
|
||
|
||
### 环境要求
|
||
|
||
- Go 1.21+
|
||
- MySQL 8.0+ 或 PostgreSQL 14+
|
||
- Redis 6.0+ (可选)
|
||
|
||
### 安装依赖
|
||
|
||
```bash
|
||
cd backend
|
||
go mod download
|
||
```
|
||
|
||
### 配置
|
||
|
||
1. 复制配置文件示例:
|
||
|
||
```bash
|
||
cp config.yaml.example config.yaml
|
||
```
|
||
|
||
2. 编辑 `config.yaml`,根据实际情况修改数据库等配置
|
||
|
||
### 数据库初始化
|
||
|
||
```bash
|
||
# 创建数据库
|
||
mysql -u root -p -e "CREATE DATABASE ezops CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
|
||
|
||
# 或者使用 PostgreSQL
|
||
# createdb -U postgres ezops
|
||
```
|
||
|
||
### 运行
|
||
|
||
```bash
|
||
# 开发模式
|
||
go run cmd/main.go
|
||
|
||
# 或者编译后运行
|
||
go build -o ezops cmd/main.go
|
||
./ezops
|
||
```
|
||
|
||
服务启动后,访问 http://localhost:8080 查看 API 文档。
|
||
|
||
## API 文档
|
||
|
||
启动服务后,可以通过以下地址访问 Swagger API 文档:
|
||
|
||
- Swagger UI: http://localhost:8080/swagger/index.html
|
||
- API 规范: http://localhost:8080/swagger/doc.json
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
backend/
|
||
├── cmd/
|
||
│ └── main.go # 应用入口
|
||
├── internal/
|
||
│ ├── api/
|
||
│ │ ├── handlers/ # HTTP 处理器
|
||
│ │ ├── middleware/ # 中间件
|
||
│ │ └── routes/ # 路由注册
|
||
│ ├── config/ # 配置管理
|
||
│ └── models/ # 数据模型
|
||
├── pkg/
|
||
│ ├── database/ # 数据库连接
|
||
│ └── logger/ # 日志工具
|
||
├── config.yaml.example # 配置文件示例
|
||
├── go.mod # Go 模块定义
|
||
├── go.sum # Go 模块校验
|
||
└── README.md # 项目说明
|
||
```
|
||
|
||
## API 路由
|
||
|
||
### 认证相关
|
||
|
||
- `POST /api/v1/auth/login` - 用户登录
|
||
- `POST /api/v1/auth/register` - 用户注册
|
||
- `GET /api/v1/user/profile` - 获取用户信息
|
||
- `PUT /api/v1/user/profile` - 更新用户信息
|
||
- `PUT /api/v1/user/password` - 修改密码
|
||
|
||
### 用户管理 (管理员)
|
||
|
||
- `GET /api/v1/admin/users` - 用户列表
|
||
- `GET /api/v1/admin/users/:id` - 用户详情
|
||
- `POST /api/v1/admin/users` - 创建用户
|
||
- `PUT /api/v1/admin/users/:id` - 更新用户
|
||
- `DELETE /api/v1/admin/users/:id` - 删除用户
|
||
|
||
### 仪表盘
|
||
|
||
- `GET /api/v1/dashboard/stats` - 统计数据
|
||
- `GET /api/v1/dashboard/recent-alerts` - 最近告警
|
||
- `GET /api/v1/dashboard/recent-releases` - 最近发布
|
||
- `GET /api/v1/dashboard/metrics` - 指标数据
|
||
|
||
### 服务器管理
|
||
|
||
- `GET /api/v1/servers` - 服务器列表
|
||
- `GET /api/v1/servers/stats` - 服务器统计
|
||
- `GET /api/v1/servers/:id` - 服务器详情
|
||
- `POST /api/v1/servers` - 创建服务器
|
||
- `PUT /api/v1/servers/:id` - 更新服务器
|
||
- `DELETE /api/v1/servers/:id` - 删除服务器
|
||
- `POST /api/v1/servers/batch-delete` - 批量删除
|
||
|
||
### 云账号管理
|
||
|
||
- `GET /api/v1/cloud-accounts` - 云账号列表
|
||
- `POST /api/v1/cloud-accounts` - 创建云账号
|
||
- `DELETE /api/v1/cloud-accounts/:id` - 删除云账号
|
||
|
||
### 域名管理
|
||
|
||
- `GET /api/v1/domains` - 域名列表
|
||
- `POST /api/v1/domains` - 创建域名
|
||
- `DELETE /api/v1/domains/:id` - 删除域名
|
||
|
||
### Kubernetes 管理
|
||
|
||
- `GET /api/v1/k8s-clusters` - 集群列表
|
||
- `GET /api/v1/k8s-clusters/:id` - 集群详情
|
||
- `POST /api/v1/k8s-clusters` - 创建集群
|
||
- `PUT /api/v1/k8s-clusters/:id` - 更新集群
|
||
- `DELETE /api/v1/k8s-clusters/:id` - 删除集群
|
||
- `GET /api/v1/k8s-clusters/:id/nodes` - 节点列表
|
||
- `GET /api/v1/k8s-clusters/:id/pods` - Pod 列表
|
||
- `GET /api/v1/k8s-clusters/:id/deployments` - Deployment 列表
|
||
- `GET /api/v1/k8s-clusters/:id/services` - Service 列表
|
||
- `GET /api/v1/k8s-clusters/:id/ingresses` - Ingress 列表
|
||
|
||
### 监控告警
|
||
|
||
- `GET /api/v1/alerts` - 告警事件列表
|
||
- `GET /api/v1/alerts/rules` - 告警规则列表
|
||
- `POST /api/v1/alerts/rules` - 创建告警规则
|
||
- `PUT /api/v1/alerts/rules/:id` - 更新告警规则
|
||
- `DELETE /api/v1/alerts/rules/:id` - 删除告警规则
|
||
- `POST /api/v1/alerts/rules/:id/toggle` - 启用/禁用规则
|
||
- `POST /api/v1/alerts/:id/ack` - 确认告警
|
||
|
||
### 应用发布
|
||
|
||
- `GET /api/v1/pipelines` - 流水线列表
|
||
- `POST /api/v1/pipelines` - 创建流水线
|
||
- `GET /api/v1/pipelines/:id` - 流水线详情
|
||
- `PUT /api/v1/pipelines/:id` - 更新流水线
|
||
- `DELETE /api/v1/pipelines/:id` - 删除流水线
|
||
- `POST /api/v1/pipelines/:id/trigger` - 触发流水线
|
||
- `GET /api/v1/pipelines/:id/runs` - 运行记录
|
||
- `GET /api/v1/releases` - 发布列表
|
||
- `POST /api/v1/releases` - 创建发布
|
||
- `POST /api/v1/releases/:id/approve` - 审批发布
|
||
- `POST /api/v1/releases/:id/deploy` - 执行发布
|
||
- `POST /api/v1/releases/:id/rollback` - 回滚发布
|
||
|
||
### 自动化运维
|
||
|
||
- `GET /api/v1/cron-jobs` - 定时任务列表
|
||
- `POST /api/v1/cron-jobs` - 创建定时任务
|
||
- `GET /api/v1/cron-jobs/:id` - 定时任务详情
|
||
- `PUT /api/v1/cron-jobs/:id` - 更新定时任务
|
||
- `DELETE /api/v1/cron-jobs/:id` - 删除定时任务
|
||
- `POST /api/v1/cron-jobs/:id/toggle` - 启用/禁用任务
|
||
- `POST /api/v1/cron-jobs/:id/execute` - 立即执行
|
||
- `GET /api/v1/scripts` - 脚本列表
|
||
- `POST /api/v1/scripts` - 创建脚本
|
||
- `GET /api/v1/scripts/:id` - 脚本详情
|
||
- `PUT /api/v1/scripts/:id` - 更新脚本
|
||
- `DELETE /api/v1/scripts/:id` - 删除脚本
|
||
- `POST /api/v1/scripts/:id/execute` - 执行脚本
|
||
|
||
### 审批流程
|
||
|
||
- `GET /api/v1/approvals/templates` - 审批模板列表
|
||
- `POST /api/v1/approvals/templates` - 创建审批模板
|
||
- `GET /api/v1/approvals/templates/:id` - 模板详情
|
||
- `PUT /api/v1/approvals/templates/:id` - 更新模板
|
||
- `DELETE /api/v1/approvals/templates/:id` - 删除模板
|
||
- `GET /api/v1/approvals/processes` - 审批流程列表
|
||
- `POST /api/v1/approvals/processes` - 创建审批流程
|
||
- `GET /api/v1/approvals/processes/:id` - 流程详情
|
||
- `POST /api/v1/approvals/processes/:id/approve` - 审批通过
|
||
- `POST /api/v1/approvals/processes/:id/reject` - 审批驳回
|
||
|
||
### 站内导航
|
||
|
||
- `GET /api/v1/navigations/groups` - 导航分组列表
|
||
- `POST /api/v1/navigations/groups` - 创建分组
|
||
- `PUT /api/v1/navigations/groups/:id` - 更新分组
|
||
- `DELETE /api/v1/navigations/groups/:id` - 删除分组
|
||
- `GET /api/v1/navigations/links` - 导航链接列表
|
||
- `POST /api/v1/navigations/links` - 创建链接
|
||
- `PUT /api/v1/navigations/links/:id` - 更新链接
|
||
- `DELETE /api/v1/navigations/links/:id` - 删除链接
|
||
- `POST /api/v1/navigations/links/:id/favorite` - 收藏/取消收藏
|
||
|
||
### 审计日志
|
||
|
||
- `GET /api/v1/audit/logs` - 审计日志列表
|
||
- `GET /api/v1/audit/logs/:id` - 日志详情
|
||
- `GET /api/v1/audit/modules` - 模块列表
|
||
- `GET /api/v1/audit/actions` - 操作类型列表
|
||
- `GET /api/v1/audit/logs/export` - 导出日志
|
||
- `GET /api/v1/audit/statistics` - 统计信息
|
||
- `POST /api/v1/audit/logs/clear` - 清理日志
|
||
|
||
## 开发指南
|
||
|
||
### 添加新的 API
|
||
|
||
1. 在 `internal/models/` 下定义数据模型
|
||
2. 在 `internal/api/handlers/` 下创建处理器
|
||
3. 在 `internal/api/routes/routes.go` 中注册路由
|
||
|
||
### 生成 Swagger 文档
|
||
|
||
```bash
|
||
go install github.com/swaggo/swag/cmd/swag@latest
|
||
swag init -g cmd/main.go
|
||
```
|
||
|
||
## 部署
|
||
|
||
### Docker 部署
|
||
|
||
```dockerfile
|
||
FROM golang:1.21-alpine AS builder
|
||
WORKDIR /app
|
||
COPY . .
|
||
RUN go mod download
|
||
RUN CGO_ENABLED=0 GOOS=linux go build -o ezops cmd/main.go
|
||
|
||
FROM alpine:latest
|
||
RUN apk --no-cache add ca-certificates
|
||
WORKDIR /root/
|
||
COPY --from=builder /app/ezops .
|
||
COPY config.yaml .
|
||
EXPOSE 8080
|
||
CMD ["./ezops"]
|
||
```
|
||
|
||
构建并运行:
|
||
|
||
```bash
|
||
docker build -t ezops-backend .
|
||
docker run -p 8080:8080 -v $(pwd)/config.yaml:/root/config.yaml ezops-backend
|
||
```
|
||
|
||
### 生产环境建议
|
||
|
||
1. 使用反向代理(Nginx/Traefik)
|
||
2. 配置 HTTPS
|
||
3. 使用环境变量覆盖配置文件
|
||
4. 配置日志轮转
|
||
5. 启用数据库连接池
|
||
6. 配置监控告警
|
||
|
||
## 贡献指南
|
||
|
||
1. Fork 本仓库
|
||
2. 创建特性分支 (`git checkout -b feature/xxx`)
|
||
3. 提交更改 (`git commit -am 'Add xxx'`)
|
||
4. 推送到分支 (`git push origin feature/xxx`)
|
||
5. 创建 Pull Request
|
||
|
||
## 许可证
|
||
|
||
MIT License
|