离线HomeLab仪表板(MCP集成)
概述
这个家庭实验室仪表板,基于 霍马尔,为管理整个自托管生态系统提供了一个集中式界面。它利用 卡迪 反向代理子网上的所有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链接!霍马尔为你管理。
- 请参阅示例配置:
______________________________________________________________________
注意事项
- 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至少。
______________________________________________________________________
项目库
\*ai-nextcloud-mcp显示为“offline”,直到配置文件中填充了每个应用程序的API密钥
\*Docker CPU百分比与正在使用的内核数量有关。100%=1芯
______________________________________________________________________
许可证
该项目根据 MIT许可证 -看看 LICENSE 文件以获取完整详细信息。
AI免责声明
大部分内容在 launch_dashboard.sh 脚本是在不同的时间由不同的主机单独生成的。Grok和Claude Sonnet习惯了 协助将这些元素编排到一个文件中,特别是处理复杂的内核级别和权限问题,同时改进脚本的 运行时外观和用户体验。
每一行都经过主要贡献者的仔细审查、编辑和测试,以确保安全性和正确性。没有什么是不受控制的。
