我做 Local AI Ops,不是为了让 AI 替我重启服务器,而是因为自己的域名、ECS、轻量服务器、OSS、续费信息和 SSH 记录散在太多地方。真正出问题时,常常先花十分钟找“这台机器到底在哪”,排故反而只用了五分钟。

截图使用的是本地空数据实例,所以能看到真实页面结构,但没有云账号、IP、域名、AccessKey 或监控结果。
先把确定的数据链跑通
这个项目是我围绕自己的运维需求立项和开发的,不是给某个现成面板换皮。FastAPI、React、Celery 这些开源框架负责基础能力,阿里云官方 SDK 负责读取云端资源;我主要做的是资产模型、检查流程、告警状态和本地安全边界。
整体数据流没有刻意做复杂,人工请求、定时巡检和诊断各走自己的路径。
用户明确触发资产同步后,FastAPI 会在当前请求中通过 RAM AccessKey 调用阿里云 OpenAPI,把 ECS、轻量应用服务器、OSS、域名和 DNS 转成统一的本地资产。PostgreSQL 保存资产、手工补充的运维资料、检查结果、告警和诊断;Redis、Celery Beat 与 Worker 只负责每分钟筛选并执行已经启用且到期的检查,不承担手动资产同步和诊断。
一次健康检查大致会这样走:Celery Beat 判断哪些检查到期,Worker 执行 HTTP、TCP、SSH、CloudMonitor 或云助手只读命令,把结果写回数据库,再根据连续失败次数更新告警。这里的关键是先拿到可重复验证的事实,而不是先问模型“服务器为什么挂了”。
AI 只放在最后一层
用户针对某条告警发起诊断时,系统会整理当前资产、告警内容和最近几次检查结果,先脱敏,再交给 OpenAI-compatible 接口生成摘要、可能原因和排查步骤。如果没有配置模型,或者接口调用失败,就回退到本地规则建议。
我刻意保留了几条边界:
- 模型只能给建议,不能自动执行修复。
- 模型建议只展示、不自动执行;真正进入 SSH 或云助手执行器的命令才受严格的只读白名单限制。
- 发送给模型前要去掉 AccessKey、密码、私钥和其他敏感字段。
- AI 不是监控数据的事实来源,HTTP 状态、端口和云指标才是。
这样做没有“全自动 AI 运维”听起来厉害,却更适合个人环境。一条看似正确的重启命令,如果落到错误实例上,损失会比少点几下控制台大得多。
为什么坚持本地优先
默认部署用 Docker Compose 拉起 React、FastAPI、PostgreSQL、Redis 和 Celery。数据库与 Redis 不需要直接暴露到公网,管理入口也定位在可信局域网。AccessKey、SSH 密码、私钥、面板密码和模型 Key 会以 AES-GCM 加密保存,但这不等于“绝对安全”——主密钥仍然要由部署者自己妥善保管。
Local AI Ops 也不打算替代阿里云控制台。云厂商控制台负责完整配置能力,这个工作台更像我的运维索引:哪些资源属于哪个项目、什么时候到期、最近是否可达、出问题时先看什么,都能在一个地方接起来。
AI 也参与开发,但不参与拍脑袋
开发时我会用 AI 编程工具辅助拆需求、补样板代码、梳理接口和测试边界。不过资产结构、安全规则、告警流程和真实云账号验证必须由我自己确定。涉及凭据和自动化时,我更相信“代码里能看到的限制”,而不是一句提示词承诺。
目前它仍是个人和小团队可用的 MVP,不是公网多租户 SaaS。v0.3.0 已经补上资产关系图、续费中心和纯本地数据库知识库;下一步更重要的是把手动同步、检查和诊断真正移入 Worker,并完善备份恢复、定时资产同步和操作审计。
项目入口
- GitHub 仓库:linsk-labs/local-ai-ops
- 项目总览:404_@林达 Projects
- GitHub 项目索引:404_@林达 GitHub 项目索引