基础设施数据聚合服务

Homelib是一款基础设施数据聚合服务,可从多个来源收集基础设施数据并通过Web UI、JSON API和MCP服务器提供统一视图。

  • by meltforce
  • Go
  • 本地部署
  • 更新于
在 GitHub 查看 meltforce/homelib

使用说明

homelib

Homelab库存服务从多个来源收集基础设施数据,并通过web UI、JSON API和MCP服务器提供统一的视图。

Homelib将Proxmox、Tailscale、Hetzner Cloud、Komodo和UniFi的主机、服务、网络和容量数据聚合到一个SQLite数据库中。它通过以下方式作为Tailscale节点运行 终端交换网络 --不需要反向代理或身份验证层。

注: 这是一个为我自己的家庭实验室建立的个人副项目。它按原样发布,可能看不到定期更新或主动维护。

特性

  • 多源采集 -Proxmox(SSH)、Tailscale(本地+控制平面API)、Hetzner Cloud、Komodo、UniFi
  • MCP服务器 --通过以下方式集成AI/代理的13个工具 模型上下文协议,可从Claude、Claude Code或任何MCP客户端使用
  • 网页用户界面 --仪表板、主机浏览器、服务、网络、Tailscale ACL查看器、容量规划器
  • 应用程序接口 -具有过滤和搜索功能的完整REST API
  • 主机合并 --对从多个来源发现的主机进行重复数据消除和合并
  • 交叉引用 --验证跨源的区域分配,生成不匹配的发现
  • 产能规划 --使用可用容量和区域聚合进行每节点CPU/内存分配跟踪
  • 角色充实 --通过配置为主机标记基础设施角色和应用程序类别
  • 插件系统 --使用输出JSON的自定义脚本(本地或SSH)扩展集合
  • 预定收款 --基于Cron的可配置保留
  • 优雅降级 --失败的收集器不会阻止其他收集器

截图

主机 容量 尾标ACL

MCP服务器

Homelib公开了一个 模型上下文协议 服务器在 /mcp (流式HTTP)。这让人工智能助手可以直接查询您的基础设施——询问容量、查找主机、在库存中搜索或触发集合。

工具 说明
list_hosts 列出具有筛选功能的主机
get_host 按名称列出的主机详细信息
list_services Docker服务,按主机/堆栈过滤
list_networks UniFi网络/VLAN
get_acl_policy Tailscale ACL策略
get_dns_config 尾标DNS配置
get_routes 尾标子网路由和出口节点
list_findings 按来源/严重程度列出的基础设施调查结果
get_summary 高级库存统计
search_inventory 所有数据的自由文本搜索
get_collection_status 当前/最新收款状态
trigger_collection 启动新收藏
get_capacity 按节点/区域列出的容量报告

与克劳德一起使用

要将homelib的MCP服务器与Claude.ai或其他远程MCP客户端一起使用,请参阅 tsmcp --一个网关,通过OAuth身份验证在互联网上公开基于tsnet的MCP服务器(如homelib)。

对于您Tailscale网络上的Claude Code或其他本地MCP客户端,请直接指向 https://<hostname>.your-tailnet.ts.net/mcp.

设置

Homelib通过tsnet作为自己的节点加入您的Tailscale网络。在第一次开始时,它需要一个 尾标认证密钥 注册。之后,tsnet将保持其状态并自动重新连接。

1.创建Tailscale身份验证密钥

在中生成可重用的身份验证密钥 Tailscale管理控制台.将其设置为 ts_auth_key 在您的配置中或作为 HOMELIB_TS_AUTH_KEY 环境变量。

2.创建配置

cp config.example.yaml config.yaml

编辑 config.yaml --启用所需的收集器,并为其API配置机密。看 配置 了解详情。

3.跑步

Docker Compose(推荐)

services:
  homelib:
    image: meltforce/homelib:latest
    restart: unless-stopped
    volumes:
      - ./data:/data
    environment:
      - HOMELIB_TS_AUTH_KEY=tskey-auth-xxxxx  # only needed on first start

放置您的 config.yaml 在 ./data/config.yaml那么:

docker compose up -d

一旦homelib在Tailscale注册,您就可以删除 HOMELIB_TS_AUTH_KEY 变量。

Docker运行

docker run -d \
  --name homelib \
  --restart unless-stopped \
  -v $(pwd)/data:/data \
  -e HOMELIB_TS_AUTH_KEY=tskey-auth-xxxxx \
  meltforce/homelib:latest

二进制

go build -o homelib .

# Development (localhost:8080, no Tailscale)
./homelib --local --config config.yaml

# Production (tsnet)
export HOMELIB_TS_AUTH_KEY=tskey-auth-xxxxx
./homelib --config config.yaml

4.访问权限

运行后,homelib可在 https://<hostname>.your-tailnet.ts.net (默认为配置中的主机名 homelib).无需端口转发或反向代理——访问由您的Tailscale ACL控制。

配置

复制 config.example.yaml 并编辑以匹配您的环境。所有的秘密都通过一个链来解决:

  1. 环境变量 HOMELIB_<UPPER_KEY> (例如。 HOMELIB_HETZNER_API_TOKEN)
  2. 在首尔贸易中心 秘密商店(如果 secret_backend.type: setec)
  3. 1Password命令行界面 op:// 引用(如果值以开头 op://)
  4. 字面值

收集器

收集器 来源 收集的数据
尾鳞 tsnet本地API+控制平面API 设备,联机状态,ACL,DNS配置,子网路由
Proxmox 通过Tailscale进行SSH 节点、VM、LXC容器、CPU/内存/磁盘、状态
赫茨纳 云API 服务器、规格、定价、防火墙
科莫多 API Docker堆栈、容器、图像
统一的 控制器API VLAN、子网、DHCP、网络设备

Tailscale收集器始终处于活动状态-homelib通过tsnet在Tailscale上运行,并使用本地API作为其主要数据源。其他收集器可以独立启用/禁用。所有收集器同时运行。

角色

通过以下方式用应用程序和类别元数据丰富发现的主机 roles 部分。应用程序和类别显示在主机表、容量页面和主机详细信息视图中。

roles:
  application_categories:
    jellyfin: media-server
    immich: photos
    vaultwarden: security

  guest_overrides:
    my-vm: homeassistant    # when hostname != application name

  tailscale_devices:
    my-nas:
      role: fileserver
      application: truenas

  proxmox_nodes:
    my-node:
      infrastructure_role: hypervisor
      workload_specialization: general

插件

使用返回JSON的脚本扩展homelib。插件在本地或通过SSH运行,可以贡献主机、发现和指标。

plugins:
  - name: my-plugin
    enabled: true
    type: ssh              # or "local"
    host: my-server
    user: root
    command: /usr/local/bin/my-script --json
    timeout: 30s
    schedule: default

插件输出架构:

{
  "plugin": "my-plugin",
  "version": "1.0",
  "hosts": [
    { "name": "host1", "host_type": "vm", "details": {} }
  ],
  "metrics": { "metric_name": "value" },
  "findings": [
    { "severity": "warning", "host_name": "host1", "message": "High memory usage" }
  ]
}

REST API

所有端点都在 /api/v1/。响应是JSON。

方法 端点 描述
得到 /api/v1/hosts 列出主机(筛选器: source, zone, status, type, q)
得到 /api/v1/hosts/{name} 主机详细信息及相关服务
得到 /api/v1/services 列出服务(筛选器: host, stack)
得到 /api/v1/networks 列出网络/VLAN
得到 /api/v1/findings 列出调查结果(筛选器: source, severity)
得到 /api/v1/summary 库存统计
得到 /api/v1/capacity 容量规划报告
得到 /api/v1/collections 收藏运行历史记录
职位 /api/v1/collections/trigger 触发收集运行

建筑

config.yaml
    |
    v
  main.go
    |-- Store (SQLite, WAL mode)
    |-- Orchestrator
    |     |-- Collectors (Proxmox, Tailscale, Hetzner, Komodo, UniFi)
    |     |-- Plugins (custom scripts)
    |     |-- Merge (deduplicate hosts across sources)
    |     |-- Crossref (validate zones, enrich roles)
    |     '-- Persist results
    |-- Scheduler (cron)
    |-- HTTP Server
    |     |-- Web UI (embedded templates)
    |     '-- JSON API
    '-- MCP Server (/mcp)

项目结构

main.go                    Entry point, tsnet, HTTP server, scheduler
internal/
  config/                  YAML config, secret resolution
  model/                   Data types (Host, Service, Network, Finding, etc.)
  collector/               Collector interface + implementations
  crossref/                Zone validation, role enrichment
  store/                   SQLite persistence (WAL mode)
  capacity/                Capacity planning calculations
  scheduler/               Cron scheduling
  server/                  HTTP handlers (Web UI + JSON API)
  mcp/                     MCP server (Streamable HTTP)
  web/                     Embedded templates + static assets

许可证

麻省理工学院