# ECMDB - 资产管理服务端
以 CMDB 为核心的资产模型、资源关系与插件能力服务端。




[](https://duke1616.github.io)
[](http://www.fleetops.top)
ECMDB 是一个以 CMDB 为核心的运维服务端项目。当前仓库主要提供资产模型、资产数据、模型关系、资产关系、导入导出、插件能力和终端连接等后端接口,并通过 EIAM SDK 接入登录态与权限校验。
前端界面、身份服务、工单系统、任务执行服务等由独立项目配合使用。本仓库可以单独作为 ECMDB API 服务开发,也可以通过 `deploy/docker-compose.yaml` 与其他服务一起联调。
## 主要功能
- 模型管理:支持模型、模型分组、属性、属性分组和模型关系的维护。
- 资产管理:基于自定义模型管理资产数据,支持列表、详情、搜索、加密字段读取和自定义列。
- 关系管理:维护关系类型、模型关系和资产实例关系,提供关系图谱查询接口。
- 数据导入导出:支持基于 Excel 的资产数据导入、导出和模板导出。
- 终端与文件:对接 SSH/SFTP,提供在线终端、文件浏览、上传下载、预览和基础文件操作接口。
- 权限接入:通过 EIAM SDK 做登录校验、权限校验,并在启动时同步接口权限资源。
## 特色能力:插件化资源动作
ECMDB 的插件能力用于把“资产数据”和“外部操作”连接起来。核心仓库负责插件定义导入、模型与关联关系管理、资源动作绑定、运行时上下文解析和插件服务代理;具体插件后端可以在独立仓库中实现和发布。
官方插件示例与 SSH 插件迁移到独立仓库维护:。
- Schema 导入:内置插件可以随绑定自动导入模型、属性、关系类型和模型关系。
- 绑定图:插件动作可以绑定到指定模型,并定义资源字段映射、关联方向、数量基数和过滤条件。
- 动作解析:系统会根据当前资源和绑定图解析动作输入,返回前端需要的 UI 类型、参数和上下文。
- 外部插件:插件可以独立实现 Gin Web Handler、EIAM 权限接入和后端能力,并通过 ECMDB 提供的插件契约与 gRPC Runtime 接口接入主站。
- SSH 插件:`ecmdb-plugins` 中提供 SSH 终端和 SFTP 文件管理插件示例,支持从主机资源及可选网关链路中解析连接信息。
## 项目结构
```text
.
├── api/proto # protobuf 定义与生成配置
├── cmd # CLI 子命令:server、init、backup、repair、plugin
├── config # 本地配置示例
├── deploy # Dockerfile、docker-compose 与部署配置
├── docs # 项目说明和测试说明文档
├── init # 初始化菜单等内置数据
├── internal
│ ├── domain # 领域对象
│ ├── repository # 数据访问层
│ ├── service # 业务逻辑
│ ├── web # HTTP Handler
│ └── plugin # 内置插件实现
├── ioc # Wire 依赖注入装配
├── pkg # 可复用基础包
└── scripts # 辅助脚本
```
## 快速开始
### 使用 Docker Compose
`deploy/docker-compose.yaml` 会同时启动 ECMDB 及联调所需的 MySQL、MongoDB、Redis、Kafka、Etcd、MinIO、EIAM、EFlow、ETask、EAlert 和前端服务。
```bash
# 创建 Docker 网络
docker network create ecmdb
# 启动 ECMDB 及联调依赖服务
docker compose -p ecmdb -f deploy/docker-compose.yaml up -d
# 初始化系统内置数据
docker exec -it ecmdb ./ecmdb init
```
前端默认映射到:
```text
http://127.0.0.1:8888
```
默认管理员账号以初始化数据为准;如果使用仓库默认配置,通常为:
```text
admin / 12345678
```
### 本地运行服务端
本地运行前请先准备 MongoDB、Redis、Kafka、Etcd、MinIO,并确保 EIAM 服务可访问。配置文件默认读取 `config/config.yaml`,也可以通过 `--config` 指定。
```bash
go mod download
go run main.go init
go run main.go server --config config/config.yaml
```
常用命令:
```bash
# 启动 ECMDB API 服务
go run main.go server
# 初始化系统内置数据
go run main.go init
# 导入系统内置插件定义
# 修复历史数据中的加密字段
go run main.go repair
```
## 开发命令
仓库内提供了 `Taskfile.yaml`,常用入口如下:
```bash
task run # 启动服务
task init # 初始化系统数据
task gen # 生成 protobuf 代码
task mock # 执行 go generate,生成 mock / wire 等代码
```
也可以直接运行 Go 命令:
```bash
go test ./...
go generate ./...
```
部分集成测试需要依赖外部服务和测试配置,具体可参考 [集成测试开发指南](docs/集成测试开发指南.md)。
## 配置说明
可从 `config/example.yaml` 复制一份到 `config/config.yaml` 后按环境修改。
## 相关项目
| 项目 | 说明 | 地址 |
| --- | --- | --- |
| ECMDB | 当前仓库,提供 CMDB 服务端能力 | |
| ECMDB Web | ECMDB 前端界面 | |
| ECMDB Plugins | ECMDB 外部插件仓库,包含 SSH 等插件实现 | |
| EIAM | 身份、登录态和权限服务 | |
| EFlow | 工单系统,负责工单模板、流程定义、审批流转和自动派发 | |
| ETask | 自动化任务执行服务 | |
## 截图
|  |  |
|:---:|:---:|
| 首页导航 | CMDB 资产管理 |
|  |  |
| 权限配置 | 排班管理 |
|  |  |
| 工单列表 | EFlow 工单流程 |
|  |  |
| 工单模板 | 自动化代码库 |
## License
本项目使用 [MIT License](LICENSE)。