# OCManager **Repository Path**: wei_ha/ocmanager ## Basic Information - **Project Name**: OCManager - **Description**: OCManager 是 OpenCloudOS 的智能管家,核心解决大规模 Linux 集群"看不全、管不住、查不出、修不快"的闭环问题。 - **Primary Language**: Unknown - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 5 - **Created**: 2026-06-24 - **Last Updated**: 2026-06-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # OCManager OpenCloudOS智能管家,由 **Vue 3 + Vite 前端**、**Go 后端**(`manager/backend` 多服务共享同一 Go module)与 **数据通道**(`tms/` 下 7 个 tRPC 服务,负责 agent 接入、资产 / 证书、任务下发、物料分发)共同组成。三层应用与 `infra/` 下的 MySQL/Redis/Kafka/ClickHouse 通过同一份 docker-compose 编排一键部署。 ## 功能简介 | 模块 | 说明 | |------|------| | 主机管理 | 实例导入、状态跟踪、项目分组、批量操作 | | 指标采集 | msg-etl 消费 Agent 上报消息,写入 ClickHouse,驱动指标流水线 | | 整机监控 | 操作系统画像、指标总览 | | 系统诊断 | 命令助手(远程执行,下游对接数据通道) | | 运维任务编排 | `tms/` **数据通道**:agent 接入、资产/证书、心跳判活、任务下发、物料分发(详见 [docs/architecture/tms-channel.md](docs/architecture/tms-channel.md)) | | OCAI 智能问答 | 控制台内嵌 AI 助手前端入口,对接外部 AI 推理服务(详见 [docs/architecture/frontend-app.md](docs/architecture/frontend-app.md#ocai-智能问答)) | | 用户与审计 | 本地账号/JWT 登录、操作记录、浏览日志 | ## 仓库结构 ``` ocmanager/ ├── README.md ├── LICENSE / NOTICE / SECURITY.md ├── CONTRIBUTING.md / CHANGELOG.md ├── docs/ # 文档 │ ├── QUICKSTART.md # 10 分钟上手 │ ├── DEVELOPMENT.md # 日常开发 │ ├── STRUCTURE.md # 目录简表 │ ├── architecture/ # 系统上下文、后端分层、数据通道 │ └── reference/ # 目录详细参考 ├── scripts/ # 构建辅助脚本(含一键部署,覆盖 manager + tms) ├── examples/ # 示例与占位 ├── manager/ # 产品主体(前端 + Go 后端 monorepo) │ ├── Makefile # 统一构建入口 │ ├── config/ │ │ └── env.example # 环境变量样例(复制为 .env 使用) │ ├── deployments/ │ │ └── compose/ │ │ └── docker-compose.yml # manager 业务(footstone / msg-etl / sysdiagnose / frontend) │ ├── backend/ # Go monorepo(go.mod 根) │ │ ├── cmd/ # 各服务入口 │ │ ├── services/ # 业务服务(footstone / msg-etl / sysdiagnose) │ │ ├── pkg/ # 跨服务公共包 │ │ ├── protocol/ # protobuf 定义及生成产物 │ │ └── migrations/ # 数据库迁移 SQL │ └── frontend/ # Vue 3 + Vite(含 OCAI 智能问答前端) ├── infra/ # 顶层基础设施(MySQL / Redis / Kafka / Zookeeper / ClickHouse) │ ├── docker-compose.yml # 被 manager + tms 共同复用,唯一基础组件入口 │ └── tms.override.yml # 让 tms compose 复用顶层 infra(关闭其自带 redis/kafka) └── tms/ # 数据通道(每个服务独立 go.mod,业务层面是 manager 的 agent 接入侧) ├── api/ # 对外 HTTP facade(18 个接口) ├── gateway/ # Agent mTLS 接入与指令推送中枢 ├── asset-manager/ # Agent 资产生命周期与内置 CA ├── heartbeat/ # Agent 在线状态中心 ├── task-manager/ # 运维任务编排(ops_task / target 状态机) ├── file-svc/ # 二进制物料 CAS 存储 ├── data-proxy/ # Agent 上报数据投 Kafka 的数据面 ├── proto/ # 服务间 RPC 契约(独立 module) ├── pkg/ # tms 内共享 Go 库(独立 module) └── deploy/ # tms 自带 docker-compose(叠加 infra/tms.override.yml 后复用顶层 infra) ``` > **manager 与 tms 的关系**:**数据通道**(`tms/`)与 manager 同仓库、同发布、同部署,**必装不可缺省**,承担 agent 接入侧能力。技术上 `manager/backend` 是单 Go module、`tms/*` 每个服务独立 `go.mod`(互相通过 `replace ../pkg ../proto` 引用,**不依赖** `manager/backend`),但运行时通过 `infra/` 共享 Redis/Kafka,并由 manager 通过 `TMS=http://127.0.0.1:8080` 调用 tms/api。`scripts/deploy.sh` 默认就会一次性拉起 infra → tms → manager 三层(manager 调 tms,所以 tms 必须先启动)。 ## 快速开始 > 完整步骤(含故障排查)见 **[docs/QUICKSTART.md](docs/QUICKSTART.md)**;部署架构、持久化、Agent、OCAI/私有模型、多团队隔离等见 **[docs/FAQ.md](docs/FAQ.md)**。 ### 方式一:Docker 一键部署(推荐) **前置依赖**: - **Docker 20.10+**(含 Compose v2)+ **Go 1.24+**(`deploy.sh` 会在本机静态编译后端二进制,再 COPY 进镜像) - 当前用户能**直接调用 docker**(root 或在 `docker` 组里) - 当前用户能 **sudo**(首次部署时若需自动安装系统依赖会用到) > 自检: `bash scripts/check-environment.sh`(`deploy.sh` 也会自动调用)。 > 详细安装指引与排错见 [`docs/QUICKSTART.md`](docs/QUICKSTART.md)。 ```bash # 1. 复制并编辑配置(至少修改 SERVER_HOST;本地体验可直接用默认值) cp config/env.example config/.env vi config/.env # 2. 一键构建镜像并启动 infra + tms + manager 三层 bash scripts/deploy.sh ``` 脚本按 **`infra → tms → manager`** 顺序拉起全栈(manager 业务侧的 sysdiagnose 通过 `.env` 里 `TMS=` 调用 tms/api,所以 tms 必须先于 manager 起;制品上传也安排在两者之间,让 MD5 在 manager 启动前已经回写到 `.env``): 1. **infra**:`infra/docker-compose.yml` —— MySQL / Redis / Kafka / Zookeeper / ClickHouse 2. **数据通道(`tms/`)**:`tms/deploy/docker-compose.yaml` + `infra/tms.override.yml` —— gateway / api / asset-manager / heartbeat / task-manager / file-svc / data-proxy(自带的 redis/kafka 被 override 关闭,复用 infra 层实例;`REDIS_PWD` 与 manager 共用,compose 注入 tms 容器后 ExpandEnv 展开)。tms 起来后立即上传 sysdiagnose 诊断工具制品到 `tms/api`,并将返回的 MD5 写回 `.env`。 3. **manager**:`manager/deployments/compose/docker-compose.yml` —— footstone / msg-etl / sysdiagnose / frontend 启动完成后即可访问: ``` http://127.0.0.1:13070 默认账号 admin / Admin123456@ ``` 常用管理命令: ```bash bash scripts/deploy.sh ps # 查看三层全部容器状态 bash scripts/deploy.sh logs # 跟踪 manager 全部服务日志 bash scripts/deploy.sh logs footstone # 查看单个服务日志(manager / tms / infra 均可) bash scripts/deploy.sh restart # 重启 manager + tms 应用服务 bash scripts/deploy.sh down # 停止全部三层(保留数据卷) bash scripts/deploy.sh clean # 停止并清空数据(⚠️ 不可恢复) ``` **仅操作 数据通道**(独立调试时用,不会触碰 manager 与 infra): ```bash bash scripts/deploy.sh tms up # 拉起 / 重建数据通道(tms/,自动 envsubst 注入密码) bash scripts/deploy.sh tms ps # 数据通道(tms/)容器状态 bash scripts/deploy.sh tms logs gateway # 单独跟踪某个 tms 服务日志 bash scripts/deploy.sh tms build # 重新构建 tms 镜像 bash scripts/deploy.sh tms restart # 重启数据通道(tms/) bash scripts/deploy.sh tms down # 仅停数据通道(tms/) ``` > 三层 compose 也可直接用原生 `docker compose -f --env-file config/.env ...` 操作;日常运维建议统一走 `deploy.sh`。 --- ### 方式二:本地开发(make + Vite Dev Server) **前置依赖**:Go 1.24+、Node.js 18+、Docker 20.10+、**gcc**(编译 `tms/file-svc` 的 CGO/sqlite)。 **配置关系**: - **manager 三件套 + 前端**:`bash scripts/gen-config.sh` 会把 `config/.env` 渲染进 `manager/backend/services/*/bin/conf/`。 - **数据通道本机二进制**:各进程在**服务源码目录**读取同级 `trpc_go.yaml`(例如 `tms/gateway/trpc_go.yaml`),**不会自动读 `config/.env`**;仓库已默认把 **Redis/Kafka 宿主端口**(`16379` / `19092`)、**gateway 上游** 写成 `127.0.0.1`,与 `config/env.example` + 顶层 `infra/docker-compose.yml` 映射一致。**启动 heartbeat / data-proxy 前**请在 shell 中加载 `config/.env`(使 `${REDIS_PWD}` 与 infra 内 Redis 一致),例如:`set -a && . ./config/.env && set +a`(在仓库根执行)。 #### 推荐流程(基础设施 Docker + 数据通道本机 + manager/前端本机) ```bash # 1. 配置(Redis 密码等须与 infra 一致,见 env.example 说明) cp config/env.example config/.env vi config/.env # SERVER_HOST、REDIS_PWD、端口等 # 2. 启动顶层 infra(mysql/redis/kafka/zookeeper/clickhouse,并创建 ocmanager-net) docker compose -f infra/docker-compose.yml --env-file config/.env up -d # 3. mTLS CA、数据目录与数据通道二进制(7 个服务各占终端时,每个终端先 source .env) sudo bash tms/deploy/scripts/init-ca.sh sudo mkdir -p /data/ocm/task-manager /data/ocm/files /data/ocm/asset-manager /var/log/ocmanager sudo chown -R "$(id -u):$(id -g)" /data/ocm /var/log/ocmanager for s in asset-manager heartbeat task-manager file-svc data-proxy gateway api; do make -C "tms/$s" build done set -a && . ./config/.env && set +a # 接着按 docs/QUICKSTART.md「方式二 · 步骤 3」在 7 个终端启动各 ../bin/(须先启动齐再 upload) bash scripts/deploy.sh upload # 5. manager 配置与二进制 bash scripts/gen-config.sh make -C manager/backend build-bin # 6. 启动 manager 三个后端(各占一个终端) cd manager/backend/services/footstone/bin ../../../bin/footstone -appconf=./conf/application.yaml -trpcconf=./conf/trpc_go.yaml start gateway stream cd manager/backend/services/msg-etl/bin ../../../bin/msg-etl -appconf=./conf/application.yaml -trpcconf=./conf/trpc_go.yaml start gateway stream cd manager/backend/services/sysdiagnose/bin ../../../bin/sysdiagnose -appconf=./conf/application.yaml -trpcconf=./conf/trpc_go.yaml start gateway # 7. 前端开发服务器 cd manager/frontend && npm install && npm run dev:linux ``` 访问 `http://127.0.0.1:3070`,默认账号 `admin`,密码 `Admin123456@`,**登录后请立即修改密码**。 **数据通道启动顺序与逐条命令**以 **[docs/QUICKSTART.md](docs/QUICKSTART.md)**「方式二 · 步骤 3」为准。 #### (可选)改用 Docker 跑数据通道 若希望少开终端、与线上一致,可 **`bash scripts/deploy.sh tms up`**(须先停掉本机已占用的数据通道相关端口)。日常命令:`bash scripts/deploy.sh tms ps|logs|restart|down`,详见 [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md)。 #### (可选)混合调试 对单个服务用 `dlv` 时:停掉对应端口的本机进程或容器,仅在 `tms//` 下替换运行 `../bin/` 即可。 --- ### 方式三:在被管节点上部署 Agent 控制平面(infra + tms + manager)跑起来后只是 **服务端**——要让被管节点上报数据 / 接收命令,需要在每台目标主机上部署 **Agent**。Agent 与控制平面(具体是 `tms/gateway`)走 mTLS 长连接互信,所以必须先把 **控制平面对外可达地址** 签进 server 证书的 SAN。 > **Agent 源码不在本仓库**——OCManager 只交付控制平面(manager + tms)。Agent 以独立仓库 / 制品形式发布,下面的 `agent/` 路径请替换为你本机上 agent 项目的实际路径。完整步骤详见 [`tms/deploy/docs/DEPLOY-GUIDE.md#11-下一步部署-agent`](tms/deploy/docs/DEPLOY-GUIDE.md)。 ```bash # === 控制平面所在机器 === # 1. 把控制平面对外地址写入 server 证书 SAN # 首次部署或新增对外地址(如绑公网 IP / 域名)时执行;CA 默认目录 /data/ocm/ca sudo EXTRA_SAN="IP:<对外地址>" bash tms/deploy/scripts/init-ca.sh --force # 2. 重启 tms gateway / asset-manager 让新证书生效 bash scripts/deploy.sh tms restart # 3. 在 agent 项目里打包安装包(GATEWAY_ADDR 指向 tms gateway 对外端口 8989) cd GATEWAY_ADDR=<对外地址>:8989 bash scripts/build-tar.sh # 产物例如 dist/agent--.tar.gz # === 目标 Agent 主机 === # 4. 把 tar 包分发过来后解压安装(首次会签发 client 证书并启动 agent) tar -xzf agent--.tar.gz && cd agent-* sudo bash install.sh ``` 控制平面对外**只需放行两个端口**: | 端口 | 用途 | 谁访问 | |------|------|--------| | `:13070`(一键部署默认 nginx) / `:3070`(dev server) | 控制台 Web | 运维 / 管理员浏览器 | | `:8989`(`tms/gateway`) | Agent mTLS 接入 | 被管主机上的 Agent | 生产环境务必把这两个端口仅暴露给可信网络。 ## 产品截图 > 全部截图均已脱敏(内网 IP → `192.0.2.x`,资产编号 → `OC-SAMPLE-xxxx`)。 > 完整截图清单与贡献规范见 [`docs/images/README.md`](docs/images/README.md)。 **主机管理** ![主机管理](docs/images/ui-hosts.png) **主机详情** ![主机详情](docs/images/ui-instance-detail.png) **命令助手** ![命令助手](docs/images/ui-command-assistant.png) **整机监控** ![整机监控](docs/images/ui-monitor.png) ## 文档索引 ### 入门 | 文档 | 说明 | |------|------| | [docs/QUICKSTART.md](docs/QUICKSTART.md) | 10 分钟上手,含故障排查 | | [docs/user-guide/](docs/user-guide/) | **控制台使用指南**(按功能模块) | | [docs/runbook.md](docs/runbook.md) | 生产排障 SOP | ### 架构与参考 | 文档 | 说明 | |------|------| | [docs/architecture/](docs/architecture/) | 系统上下文、后端分层、前端定位、命令助手设计、数据流时序 | | [docs/reference/database-schema.md](docs/reference/database-schema.md) | **数据库表结构 + ER 图** | | [docs/reference/api-reference.md](docs/reference/api-reference.md) | **API / Kafka 消息总览** | | [docs/reference/env-variables.md](docs/reference/env-variables.md) | 环境变量参考(按服务/用途索引) | | [docs/reference/backend-resource-keys.md](docs/reference/backend-resource-keys.md) | 后端配置键名约定 | | [docs/reference/repository-layout.md](docs/reference/repository-layout.md) | 仓库目录详表 | | [docs/STRUCTURE.md](docs/STRUCTURE.md) | 目录简表 | ### 开发与贡献 | 文档 | 说明 | |------|------| | [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md) | 日常开发、测试、镜像 | | [CONTRIBUTING.md](CONTRIBUTING.md) | 参与贡献流程 | | [docs/OPEN_SOURCE_PLAN.md](docs/OPEN_SOURCE_PLAN.md) | 开源路线图 | | [manager/README.md](manager/README.md) | 产品目录说明 | ## 许可证 本项目以 **GNU General Public License v2.0** 授权(见 [LICENSE](LICENSE))。前端子目录另含 **TDesign** 相关 **MIT** 许可,见 [NOTICE](NOTICE) 与 [manager/frontend/LICENSE](manager/frontend/LICENSE)。 ## 安全 如发现安全问题,请按 [SECURITY.md](SECURITY.md) 说明私下反馈,勿在公开 issue 中披露细节。