离线自托管仪表板

一个基于Homarr的离线自托管仪表板,提供集中管理界面,支持Docker容器、HTTPS安全认证和AI自动化功能。

  • by The-Incredible-Gamma-Man
  • Shell
  • 本地部署
  • 10 星标
  • 更新于
在 GitHub 查看 The-Incredible-Gamma-Man/HomeLab_Dashboard_MCP_Integrated

使用说明

离线HomeLab仪表板(MCP集成)

概述

这个家庭实验室仪表板,基于 霍马尔,为管理整个自托管生态系统提供了一个集中式界面。它利用 卡迪 反向代理子网上的所有Docker容器,同时使用自签名证书强制HTTPS,所有这些都不需要外部互联网访问。

仪表板预先配置了强大的工具,包括 云端下一站, GitLab公司, 三lium, 波特纳, 开放网络用户界面,以及 限流器 用于实时视频监控。Open WebUI与 奥拉玛 通过MCP(模型上下文协议)实现代理AI功能,实现跨应用程序的智能自动化。

为了额外的安全性和用户管理, 钥匙锁 通过单点登录处理集中身份验证和组管理。消除了创建多个帐户和复杂密码策略的需要。

最棒的是,它完全离线工作。 可选的VPN集成(ZeroTier、Tailscale)可以轻松集成,以便在需要时进行远程访问。

每个应用程序都作为一个具有自己域的独立容器运行,允许您在虚拟机或专用硬件设备之间分发应用程序,以实现精细的资源控制。

主要特点

  • ✅ 完全气隙 --在完全离线的环境中工作
  • 🤖 AI 代理 --Olama驱动的模型通过MCP处理应用程序中的任务
  • 🔐 集中式SSO --Keycloak管理所有用户和组
  • 🔒 HTTPS和自签名证书 --默认情况下安全
  • 🚪 对外端口有限 --所有内容都在局域网内部运行
  • 📦 便携式和模块化 --在Debian上测试;易于跨硬件分发
  • 🎯 极其灵活 --轻松添加、删除或自定义应用程序

入门指南

  1. chmod +x launch_dashboard.sh
    
  2. ./launch_dashboard.sh
    
  3. 坚持使用默认的IP地址、域、端口和域名,直到你知道自己在做什么。
  4. 除非在安装过程中设置密码,否则它将在 docker-compose.yml.
  5. 记得再生你的 客户端密钥 在Keycloak中,复制它并将其粘贴到突出显示的 docker-compose.yml 变量(# <---- Insert from Keycloak).
  6. 现在导航到新 /Downloads/team-platform/ 您可以在其中开始配置生态系统的目录。

安装后指南

证书!

  1. 导出根CA证书

    • 如果您打算从另一台计算机访问门户,则需要复制 rootCA.crt 从 ./certs 并将其安装在该设备上。
    • 无论你在哪里举办 Caddyfile,您需要将其指向每个应用程序 cert 和 key .pem 文件夹。
    • 在向环境中添加新应用程序时,从您启动的计算机 launch_dashboard.sh from,run:
      mkcert <new_app.lan> <new_app.lan> <new_app.lan>
      
      并将2个文件传输到 /certs Caddy指向的文件夹。
  2. 理解架构

    • 所有应用程序都通过Docker端口在内部HTTP上运行
    • Caddy处理HTTPS终止并在端口443上公开服务

初始配置步骤

  1. 使用登录Keycloak admin 密码(位于 docker-compose.yml)或者在安装过程中记住设置。
    • 如果您在访问Keycloak时遇到问题,请编辑 docker-compose.yml,从管理员密码中删除任何特殊字符并运行;
      • docker compose down keycloak && docker compose up -d keycloak
        
  2. 点击 创建领域 如果确实使用提供的备份,请导入 realm-export.JSON 从适当的驱动器。
  3. 引导到 领域设置 → 行动 (右上)→ 部分进口
  4. 如果从头开始,请使用专用管理员用户创建一个新域(不要使用默认值 Master 王国!).
  5. 创建用户并将其分配到组。
    • 确保 电子邮件已验证 被选中。
    • 为每个用户添加电子邮件、姓名和密码。
  6. 如果你没有使用 realm-export.JSON 备份文件,您需要映射 groups 到王国角色;
    • 选择 Client Scopes 从左侧菜单。
    • Create Client Scope
    • '名称'= groups |'类型'= Default |'在同意屏幕上显示'= off |'包含在令牌范围内'= on | Save
    • 选择 Mappers tab → Add mapper → From predefined mappers |选择 realm roles, client roles, audience resolve
    • 选择 Add mapper → By configuration → Group Membership |'名称'= groups |'令牌声明名称'= groups |'完整组路径'= off | Save

在局域网中添加新网站

客户端(又名应用程序)配置

  1. 创建一个客户端 客户端身份验证 启用。如果你使用 realm-export.json,您将已经生成了客户端。
  2. 身份验证流程:启用 标准流程 (某些应用程序需要 直接访问 -查看官方文件)。
  3. PKCE方法:除非文件指定S256(SHA256),否则保持未选中状态。
  4. 网址:
    • 根、主页和注销后URL: https://<app>.lan
    • 有效的重定向URI: https://<app>.lan/* 或 https://<app.lan>/oauth/oidc/callback (查看应用程序的官方文档)。
  5. 凭据选项卡:重新生成客户端密钥并将其复制到您的 docker-compose.yml
  6. 客户端范围选项卡:
    • 选择超链接 xxx-dedicated 范围。
    • 添加: username, email, groups 从 添加预定义映射器 列表。
    • 创建 groups 如果它不存在,则通过 配置新映射器 选项;
      • 选择 组成员
      • 姓名= groups
      • 令牌声明名称= groups
      • 完整组路径= off
      • 保存
  7. 现在,对于每个客户端(应用程序),复制 credential secret 并将其粘贴到相应的 docker-compose.yml 文件环境变量(如果需要)。
  8. 同样,在适当的范围内 docker-compose.yml 文件,您可能需要输入 realm-name 如有规定。
  9. 奔跑;
    docker compose down && docker compose up -d
    

特定应用程序设置

开放网络用户界面

  1. 备份文件

    • models-xxx.json → 上传到 管理设置 → 模型
    • openwebui-configxxx.json → 上传到 管理设置 → 数据库
  2. 管理员设置配置

    • 启用 新注册
    • 启用 API 并为集成和模型设置权限。
    • 最低24GB+GPU的推荐型号: qwen3-coder:30B 或 qwen3.5:9b (4比特量化最小值)。
  3. 拉取其他型号

    docker exec ai-ollama ollama pull <model>
    

云端下一站

  1. 创建本地管理员用户。
  2. 安装 OpenID连接后端 应用程序。
  3. 引导到 OpenID连接 并使用以下设置注册Keycloak:
    • 发现端点: https://keycloak.lan/realms/YOUR_REALM_NAME/.well-known/openid-configuration
    • 反向通道注销URL: https://nextcloud.lan
    • 重定向URI: https://nextcloud.lan
    • 客户端密钥:来自Keycloak证书
    • 提供者: Keycloak
    • 客户端ID:必须与Keycloak完全匹配
    • 范围: openid email profile
    • 额外索赔: preferred_username email name groups

霍马尔

重要:某些应用程序需要初始本地管理员用户。

  1. 使用唯一的用户名创建本地管理员用户
  2. 创建一个Homarr管理组,您也可以将其应用于Keycloak(例如。, homarr-admins)
  3. 将您的本地用户添加到应用程序中的此组。
  4. 添加 ./certs/rootCA 证书到 管理 → 工具 → 证书
  5. 请注意,新用户将自动加载到默认值 everyone 需要为新的板和集成提供组和权限。

向霍马尔进发

  • Homarr依赖于video.js,因为它不理解RTSP等原生协议

  • 需要编码器,例如“Restreamer”,才能通过HTTP从H.264转换为HLS或FLV

  • 由于Docker需要通过硬件直接访问连接的摄像头,当摄像头可以在局域网上的任何机器上时,为Restreamer生成Docker compose文件是违反直觉的。 相反,您将在下面找到2个命令来启动Restreamer。一个用于临时使用,一个用于存储数据。如果您脱机运行,则需要预拉datarhei映像;

    • 临时:
    docker run --rm -d -p <ext_ip_add:port for Caddy to connect to>:8080 --device /dev/<cam location>:/dev/video -e "RS_MODE=USBCAM" -e "RS_USBCAM_VIDEODEVICE=/dev/video" --tmpfs /tmp/hls datarhei/restreamer
    
    • 永久的:
    docker run -d -p <ext_ip_add:port for Caddy to connect to>:8080 --device /dev/<cam location>:/dev/video -e RS_HTTPS=true -e "RS_MODE=USBCAM" -e "RS_USBCAM_VIDEODEVICE=/dev/video" --tmpfs /tmp/hls -v           /mnt/restreamer/db:/core/config -v /opt/restreamer/data:/core/data datarhei/restreamer`
    
  • 粘贴到Homarr仪表板中的“视频流”项->http://ip:port/memfs/.m3u8|也可在凸轮通道下方的限流器上找到,标记为 HLS

  • 如果上述操作失败,请在Homarr中使用“iframe”项,并将Restreamer上的HTML链接粘贴到 Player 配置选项。不是iFrame链接!霍马尔为你管理。

  • 请参阅示例配置:


注意事项

  1. Caddyfile:从添加具有匹配暴露端口的客户端配置 docker-compose.yml(即。 ...ports: "8080:80" = ...端口:“expose_to_caddy:internal_docker”)
  2. 主机文件:更新 /etc/hosts。在大多数情况下,每个域都需要指向Caddy IP。球童是唯一需要知道谁是谁的机器。
  3. 超文本传输安全协议:切勿启用应用内HTTPS或证书使用,因为这一切都是通过Caddy管理的。
  4. 用户自动人口:组和用户详细信息在首次登录时自动填充。除了初始的本地管理员外,不需要在应用程序中创建新用户。

Docker命令

命令 目的
docker ps 检查正在运行的容器的状态
docker exec ai-ollama ollama list 列出Olama车型
docker compose -p team-platform logs -f <service> 跟踪服务日志
docker compose -p team-platform down <service> 停止服务
docker compose -p team-platform up -d <service> 启动服务

备注:从包含以下内容的目录中运行compose命令 docker-compose.yml.省略 <service> 影响所有服务。

Olama模型管理

# Pull a model
docker compose -p team-platform exec ollama ollama pull <model:quantization>

# List available models
docker compose -p team-platform exec ollama ollama list

# Delete a model
docker compose -p team-platform exec ollama ollama rm <model>

⚠️ 备注

  • 每 docker-compose.yml 环境是独一无二的——有关具体配置,请参阅官方应用程序文档

  • 此设置仍在测试中;请报告任何问题或改进

  • 大部分工作都是由安装脚本自动完成的!

  • 如果您选择在另一台机器上部署应用程序,只需复制相关内容 docker-compose.yml 为该应用程序分段并创建新的 docker-compose.yml 在该机器上存档并编辑;

    • 环境变量中对IP地址的任何引用。
    • Caddy接触的端口暴露——如果需要,以避免与其他正在运行的服务发生冲突。
    • /etc/hosts 应始终指向Caddy IP地址,但托管Caddy的计算机除外-更新此计算机的 /etc/hosts 使用新的IP。
    • 更新Caddyfile以访问新的主机IP。
    • 记得将rootCA.crt上传到新机器上。
  • 不要忽视你的防火墙规则!

    sudo ufw default deny incoming && sudo ufw default allow outgoing && sudo ufw reload
    

    至少。


项目库

*ai-nextcloud-mcp显示为“offline”,直到配置文件中填充了每个应用程序的API密钥

*Docker CPU百分比与正在使用的内核数量有关。100%=1芯


许可证

该项目根据 MIT许可证 -看看 LICENSE 文件以获取完整详细信息。

AI免责声明

大部分内容在 launch_dashboard.sh 脚本是在不同的时间由不同的主机单独生成的。Grok和Claude Sonnet习惯了 协助将这些元素编排到一个文件中,特别是处理复杂的内核级别和权限问题,同时改进脚本的 运行时外观和用户体验。

每一行都经过主要贡献者的仔细审查、编辑和测试,以确保安全性和正确性。没有什么是不受控制的。