离线HomeLab仪表板(MCP集成)
 ](https://www.docker.com/)     
概述
这个家庭实验室仪表板,基于 霍马尔,为管理整个自托管生态系统提供了一个集中式界面。它利用 卡迪 反向代理子网上的所有Docker容器,同时使用自签名证书强制HTTPS,所有这些都不需要外部互联网访问。
仪表板预先配置了强大的工具,包括 云端下一站, GitLab公司, 三lium, 波特纳, 开放网络用户界面,以及 限流器 用于实时视频监控。Open WebUI与 奥拉玛 通过MCP(模型上下文协议)实现代理AI功能,实现跨应用程序的智能自动化。
为了额外的安全性和用户管理, 钥匙锁 通过单点登录处理集中身份验证和组管理。消除了创建多个帐户和复杂密码策略的需要。
最棒的是,它完全离线工作。 可选的VPN集成(ZeroTier、Tailscale)可以轻松集成,以便在需要时进行远程访问。
每个应用程序都作为一个具有自己域的独立容器运行,允许您在虚拟机或专用硬件设备之间分发应用程序,以实现精细的资源控制。
主要特点
- ✅ 完全气隙 --在完全离线的环境中工作
- 🤖 AI 代理 --Olama驱动的模型通过MCP处理应用程序中的任务
- 🔐 集中式SSO --Keycloak管理所有用户和组
- 🔒 HTTPS和自签名证书 --默认情况下安全
- 🚪 对外端口有限 --所有内容都在局域网内部运行
- 📦 便携式和模块化 --在Debian上测试;易于跨硬件分发
- 🎯 极其灵活 --轻松添加、删除或自定义应用程序
______________________________________________________________________
入门指南
- ```bash
chmod +x launch_dashboard.sh
1. ```bash
./launch_dashboard.sh- 坚持使用默认的IP地址、域、端口和域名,直到你知道自己在做什么。
- 除非在安装过程中设置密码,否则它将在
docker-compose.yml. - 记得再生你的 客户端密钥 在Keycloak中,复制它并将其粘贴到突出显示的
docker-compose.yml变量(`#
并将2个文件传输到 `/certs` Caddy指向的文件夹。
1. **理解架构**
- 所有应用程序都通过Docker端口在内部HTTP上运行
- Caddy处理HTTPS终止并在端口443上公开服务
### 初始配置步骤
1. 使用登录Keycloak `admin` 密码(位于 `docker-compose.yml`)或者在安装过程中记住设置。
- 如果您在访问Keycloak时遇到问题,请编辑 `docker-compose.yml`,从管理员密码中删除任何特殊字符并运行;
- ```bash
docker compose down keycloak && docker compose up -d keycloak- 点击 创建领域 如果确实使用提供的备份,请导入
realm-export.JSON从适当的驱动器。 - 引导到 领域设置 → 行动 (右上)→ 部分进口
- 如果从头开始,请使用专用管理员用户创建一个新域(不要使用默认值
Master王国!). - 创建用户并将其分配到组。
- 确保 电子邮件已验证 被选中。 - 为每个用户添加电子邮件、姓名和密码。
- 如果你没有使用
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
在局域网中添加新网站
客户端(又名应用程序)配置
- 创建一个客户端 客户端身份验证 启用。如果你使用
realm-export.json,您将已经生成了客户端。 - 身份验证流程:启用 标准流程 (某些应用程序需要 直接访问 -查看官方文件)。
- PKCE方法:除非文件指定S256(SHA256),否则保持未选中状态。
- 网址:
- 根、主页和注销后URL: https://.lan - 有效的重定向URI: https://.lan/* 或 https:///oauth/oidc/callback (查看应用程序的官方文档)。
- 凭据选项卡:重新生成客户端密钥并将其复制到您的
docker-compose.yml - 客户端范围选项卡:
- 选择超链接 xxx-dedicated 范围。 - 添加: username, email, groups 从 添加预定义映射器 列表。 - 创建 groups 如果它不存在,则通过 配置新映射器 选项; - 选择 组成员 - 姓名= groups - 令牌声明名称= groups - 完整组路径= off - 保存
- 现在,对于每个客户端(应用程序),复制
credential secret并将其粘贴到相应的docker-compose.yml文件环境变量(如果需要)。 - 同样,在适当的范围内
docker-compose.yml文件,您可能需要输入realm-name如有规定。 - 奔跑;
docker compose down && docker compose up -d特定应用程序设置
开放网络用户界面
- 备份文件
- models-xxx.json → 上传到 管理设置 → 模型 - openwebui-configxxx.json → 上传到 管理设置 → 数据库
- 管理员设置配置
- 启用 新注册 - 启用 API 并为集成和模型设置权限。 - 最低24GB+GPU的推荐型号: qwen3-coder:30B 或 qwen3.5:9b (4比特量化最小值)。
- 拉取其他型号
docker exec ai-ollama ollama pull 云端下一站
- 创建本地管理员用户。
- 安装 OpenID连接后端 应用程序。
- 引导到 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
霍马尔
重要:某些应用程序需要初始本地管理员用户。
- 使用唯一的用户名创建本地管理员用户
- 创建一个Homarr管理组,您也可以将其应用于Keycloak(例如。,
homarr-admins) - 将您的本地用户添加到应用程序中的此组。
- 添加
./certs/rootCA证书到 管理 → 工具 → 证书 - 请注意,新用户将自动加载到默认值
everyone需要为新的板和集成提供组和权限。
向霍马尔进发
- Homarr依赖于video.js,因为它不理解RTSP等原生协议
- 需要编码器,例如“Restreamer”,才能通过HTTP从H.264转换为HLS或FLV
- 由于Docker需要通过硬件直接访问连接的摄像头,当摄像头可以在局域网上的任何机器上时,为Restreamer生成Docker compose文件是违反直觉的。
相反,您将在下面找到2个命令来启动Restreamer。一个用于临时使用,一个用于存储数据。如果您脱机运行,则需要预拉datarhei映像;
- 临时:
docker run --rm -d -p :8080 --device /dev/:/dev/video -e "RS_MODE=USBCAM" -e "RS_USBCAM_VIDEODEVICE=/dev/video" --tmpfs /tmp/hls datarhei/restreamer- 永久的:
docker run -d -p :8080 --device /dev/:/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:///memfs/.m3u8|也可在凸轮通道下方的限流器上找到,标记为
HLS
- 如果上述操作失败,请在Homarr中使用“iframe”项,并将Restreamer上的HTML链接粘贴到
Player配置选项。不是iFrame链接!霍马尔为你管理。
- 请参阅示例配置:
Recommended Restreamer Settings
______________________________________________________________________
注意事项
- Caddyfile:从添加具有匹配暴露端口的客户端配置
docker-compose.yml(即。...ports: "8080:80"= ...端口:“expose_to_caddy:internal_docker”) - 主机文件:更新
/etc/hosts。在大多数情况下,每个域都需要指向Caddy IP。球童是唯一需要知道谁是谁的机器。 - 超文本传输安全协议:切勿启用应用内HTTPS或证书使用,因为这一切都是通过Caddy管理的。
- 用户自动人口:组和用户详细信息在首次登录时自动填充。除了初始的本地管理员外,不需要在应用程序中创建新用户。
Docker命令
| 命令 | 目的 |
|---|---|
docker ps | 检查正在运行的容器的状态 |
docker exec ai-ollama ollama list | 列出Olama车型 |
docker compose -p team-platform logs -f | 跟踪服务日志 |
docker compose -p team-platform down | 停止服务 |
docker compose -p team-platform up -d | 启动服务 |
备注:从包含以下内容的目录中运行compose命令 docker-compose.yml.省略 `` 影响所有服务。Olama模型管理
# Pull a model
docker compose -p team-platform exec ollama ollama pull
# List available models
docker compose -p team-platform exec ollama ollama list
# Delete a model
docker compose -p team-platform exec ollama ollama rm ______________________________________________________________________
⚠️ 备注
- 每
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至少。
______________________________________________________________________
项目库
Demonstration of Open WebUI Calling MCP Tools
GitLab Login Page Demonstrating SSO Option
Demonstration of NextCloud Features
Keycloak Config Settings for NextCloud
Keycloak Config Settings for Portainer
Atlas Results Hierarchy Offline
Atlas Results Hosts Offline \*ai-nextcloud-mcp显示为“offline”,直到配置文件中填充了每个应用程序的API密钥 Atlas Results Hosts Web Connected
Atlas Results hosts web connected
\*Docker CPU百分比与正在使用的内核数量有关。100%=1芯
______________________________________________________________________
许可证
该项目根据 MIT许可证 -看看 LICENSE 文件以获取完整详细信息。
AI免责声明
大部分内容在 launch_dashboard.sh 脚本是在不同的时间由不同的主机单独生成的。Grok和Claude Sonnet习惯了 协助将这些元素编排到一个文件中,特别是处理复杂的内核级别和权限问题,同时改进脚本的 运行时外观和用户体验。
每一行都经过主要贡献者的仔细审查、编辑和测试,以确保安全性和正确性。没有什么是不受控制的。
