使用说明
离线HomeLab仪表板(MCP集成)
概述
这个家庭实验室仪表板,基于 霍马尔,为管理整个自托管生态系统提供了一个集中式界面。它利用 卡迪 反向代理子网上的所有Docker容器,同时使用自签名证书强制HTTPS,所有这些都不需要外部互联网访问。
仪表板预先配置了强大的工具,包括 云端下一站, GitLab公司, 三lium, 波特纳, 开放网络用户界面,以及 限流器 用于实时视频监控。Open WebUI与 奥拉玛 通过MCP(模型上下文协议)实现代理AI功能,实现跨应用程序的智能自动化。
为了额外的安全性和用户管理, 钥匙锁 通过单点登录处理集中身份验证和组管理。消除了创建多个帐户和复杂密码策略的需要。
最棒的是,它完全离线工作。 可选的VPN集成(ZeroTier、Tailscale)可以轻松集成,以便在需要时进行远程访问。
每个应用程序都作为一个具有自己域的独立容器运行,允许您在虚拟机或专用硬件设备之间分发应用程序,以实现精细的资源控制。
主要特点
- ✅ 完全气隙 --在完全离线的环境中工作
- 🤖 AI 代理 --Olama驱动的模型通过MCP处理应用程序中的任务
- 🔐 集中式SSO --Keycloak管理所有用户和组
- 🔒 HTTPS和自签名证书 --默认情况下安全
- 🚪 对外端口有限 --所有内容都在局域网内部运行
- 📦 便携式和模块化 --在Debian上测试;易于跨硬件分发
- 🎯 极其灵活 --轻松添加、删除或自定义应用程序
入门指南
-
chmod +x launch_dashboard.sh -
./launch_dashboard.sh - 坚持使用默认的IP地址、域、端口和域名,直到你知道自己在做什么。
- 除非在安装过程中设置密码,否则它将在
docker-compose.yml. - 记得再生你的 客户端密钥 在Keycloak中,复制它并将其粘贴到突出显示的
docker-compose.yml变量(# <---- Insert from Keycloak). - 现在导航到新
/Downloads/team-platform/您可以在其中开始配置生态系统的目录。
安装后指南
证书!
-
导出根CA证书
- 如果您打算从另一台计算机访问门户,则需要复制
rootCA.crt从./certs并将其安装在该设备上。 - 无论你在哪里举办
Caddyfile,您需要将其指向每个应用程序cert和key.pem文件夹。 - 在向环境中添加新应用程序时,从您启动的计算机
launch_dashboard.shfrom,run:并将2个文件传输到mkcert <new_app.lan> <new_app.lan> <new_app.lan>/certsCaddy指向的文件夹。
- 如果您打算从另一台计算机访问门户,则需要复制
-
理解架构
- 所有应用程序都通过Docker端口在内部HTTP上运行
- Caddy处理HTTPS终止并在端口443上公开服务
初始配置步骤
- 使用登录Keycloak
admin密码(位于docker-compose.yml)或者在安装过程中记住设置。- 如果您在访问Keycloak时遇到问题,请编辑
docker-compose.yml,从管理员密码中删除任何特殊字符并运行;-
docker compose down keycloak && docker compose up -d keycloak
-
- 如果您在访问Keycloak时遇到问题,请编辑
- 点击 创建领域 如果确实使用提供的备份,请导入
realm-export.JSON从适当的驱动器。 - 引导到 领域设置 → 行动 (右上)→ 部分进口
- 如果从头开始,请使用专用管理员用户创建一个新域(不要使用默认值
Master王国!). - 创建用户并将其分配到组。
- 确保 电子邮件已验证 被选中。
- 为每个用户添加电子邮件、姓名和密码。
- 如果你没有使用
realm-export.JSON备份文件,您需要映射groups到王国角色;- 选择
Client Scopes从左侧菜单。 Create Client Scope- '名称'=
groups|'类型'=Default|'在同意屏幕上显示'=off|'包含在令牌范围内'=on|Save - 选择
Mapperstab →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://<app>.lan - 有效的重定向URI:
https://<app>.lan/*或https://<app.lan>/oauth/oidc/callback(查看应用程序的官方文档)。
- 根、主页和注销后URL:
- 凭据选项卡:重新生成客户端密钥并将其复制到您的
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 <model>
云端下一站
- 创建本地管理员用户。
- 安装 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完全匹配
- 范围:
openidemailprofile - 额外索赔:
preferred_usernameemailnamegroups
- 发现端点:
霍马尔
重要:某些应用程序需要初始本地管理员用户。
- 使用唯一的用户名创建本地管理员用户
- 创建一个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 <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链接!霍马尔为你管理。 -
请参阅示例配置:
注意事项
- 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 <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习惯了
协助将这些元素编排到一个文件中,特别是处理复杂的内核级别和权限问题,同时改进脚本的
运行时外观和用户体验。
每一行都经过主要贡献者的仔细审查、编辑和测试,以确保安全性和正确性。没有什么是不受控制的。
