家庭实验室仪表盘Labby

简介

什么是 Labby ?

Labby 是一个开源的自托管家庭实验室仪表盘,轻量如 Glance,交互如 Homarr。它使用单个 Bun 进程运行,配置存储在小型 SQLite 数据库中,支持应用内编辑。

主要特点

  • 丰富的 Widget 组件:支持服务监控、DockerqBittorrent/TransmissionSABnzbdAdGuardJellyfinEmbyPlexBeszelRadarrSonarrReelward、天气、日历、速度测试、RedditHacker News 等多种集成
  • 实时更新:服务器轮询集成并通过 SSE 推送更改,无需客户端轮询,确保数据实时性
  • 交互式控制:支持启动/停止 Docker 容器、暂停/恢复下载任务、切换 AdGuard 保护等功能
  • 配置与凭据管理:配置存储在 SQLite 数据库中,支持 Zod 验证,可通过应用内的「管理服务」页面编辑服务 URL 和密钥
  • 主题定制:支持命名颜色方案保存到数据库,首次加载无闪烁
  • 开源免费:基于 MIT 协议开源,可免费使用和修改

应用场景

  • Homelab 服务监控:统一查看所有自托管服务的运行状态,包括 NAS、媒体服务器、下载工具、网络工具等
  • Docker 容器管理:通过 Web 界面直接启动、停止容器,无需登录服务器命令行
  • 下载任务管理:控制 qBittorrentTransmission 等下载客户端,暂停、恢复下载任务
  • 网络工具集成:集成 AdGuardPi-hole 等网络工具,一键切换保护状态
  • 媒体库管理:查看 JellyfinEmbyPlex 等媒体服务器状态,管理电影、剧集等媒体资源
  • 开发测试环境:开发人员可以快速搭建统一的测试环境入口

Labby 是一个轻量级、功能丰富的家庭实验室仪表盘,帮助 Homelab 爱好者统一管理和监控所有自托管服务。通过丰富的 Widget 组件和实时更新功能,用户可以轻松查看服务状态、控制 Docker 容器、管理下载任务等。

安装

在群晖上以 Docker 方式安装。

本文写作时, latest 版本对应为 1.5.0

镜像托管在 ghcr.io,群晖 Docker 套件无法直接搜索,需要通过命令行拉取镜像。

docker cli 安装

如果你熟悉命令行,可能用 docker cli 更快捷

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 新建文件夹 labby 和 子目录
mkdir -p /volume1/docker/labby/config

# 进入 labby 目录
cd /volume1/docker/labby

# 修改目录权限
chmod a+rw config

# 一键启动
docker run -d \
--name=labby \
--restart=unless-stopped \
-p 8425:8080 \
-v /volume1/docker/labby/config:/app/config \
ghcr.io/samuelloranger/labby:latest

docker-compose 安装

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

1
2
3
4
5
6
7
8
9
10
11
version: '3.8'

services:
labby:
image: ghcr.io/samuelloranger/labby:latest
container_name: labby
restart: unless-stopped
ports:
- "8425:8080"
volumes:
- ./config:/app/config # 配置文件目录

然后通过 SSH 登录到您的群晖,执行下面的命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 新建文件夹 labby 和 子目录
mkdir -p /volume1/docker/labby/config

# 进入 labby 目录
cd /volume1/docker/labby

# 修改目录权限
chmod a+rw config

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

配置

用户配置存储在 SQLite 数据库中。无效配置会显示错误状态,而不会导致服务器崩溃。

服务凭据和实例设置(监控站点、天气位置、Docker 主机、下载客户端 URL 等)存储在 integrations 表中。仪表盘组件通过 integrationId 引用集成,仅携带显示选项(标题、布局样式、最大项目数)。轮询频率在集成行中设置(refreshSeconds),而不是在仪表盘 JSON 中。

所有配置都从「管理服务」页面进行,无需 .env 文件或环境变量。

内置集成

类型 配置说明
monitor HTTP 站点检查(每个站点的标题、URL、图标)
docker 读/写 Docker 主机,容器过滤器(running / all
qbittorrent URL、用户名、密码
transmission URL、用户名、密码
sabnzbd URL、API 密钥
adguard URL、用户名、密码
jellyfin URL、API 密钥
emby URL、API 密钥
plex URL、令牌
beszel URL、用户名、密码、令牌
radarr URL、API 密钥
sonarr URL、API 密钥
reelward URL、API 密钥
weather OpenWeather API 密钥、城市或经纬度、单位
calendar ICS 订阅 URL(每行一个)
speedtest Speedtest Tracker URL、API 令牌
reddit 合并为一个订阅源的 Subreddits
hackernews 无需配置(Algolia 前端)

您可以添加多个相同类型的集成(例如两个 Radarr 实例) - 每个都有自己的行、轮询间隔和 SSE 通道(int:<id>)。

Docker 集成配置

要实现对 Docker 容器的交互式控制(启动/停止),需要通过 Docker Socket Proxy 方式连接。

注意LabbyDocker 集成 UI 只支持 http://https://s3:// 格式的 URL,不支持 unix:// 格式的 socket 路径。因此需要使用 Docker Socket ProxyUnix socket 转换为 HTTP API

方案一:使用 Docker Socket Proxy(推荐)

使用 tecnativa/docker-socket-proxy 作为中间代理,将 Docker socket 转换为 HTTP API:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
version: '3.8'

services:
labby:
image: ghcr.io/samuelloranger/labby:latest
container_name: labby
restart: unless-stopped
ports:
- "8425:8080"
volumes:
- ./config:/app/config # 配置文件目录
depends_on:
- docker-proxy

docker-proxy:
image: tecnativa/docker-socket-proxy:latest
container_name: docker-proxy
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro # 挂载 Docker Socket(只读)
environment:
- CONTAINERS=1 # 允许容器操作
- POST=1 # 允许 POST 请求
# - EXEC=1 # 允许执行命令
# - NETWORKS=1 # 允许网络操作
# - VOLUMES=1 # 允许卷操作

Labby 中添加 Docker 集成时,host 填写:http://docker-proxy:2375

Labby 中添加 Docker 集成时,如果想控制 Docker 启停,需要配置两个字段:

  • RO Host(只读主机)http://docker-proxy:2375(用于查看容器列表、日志等只读操作)

  • RW Host(读写主机)http://docker-proxy:2375(用于启动、停止、重启容器等操作)

方案二:群晖 DSM 6.2 直接开放 Docker TCP(不推荐)

如果不想使用 Docker Socket Proxy,可以在群晖上直接开放 Docker TCP API

第一步:修改 Docker 配置文件

通过 SSH 登录群晖,编辑 Docker 配置文件:

1
2
3
4
5
# 备份原始配置
sudo cp /var/packages/Docker/etc/dockerd.json /var/packages/Docker/etc/dockerd.json.bak

# 编辑配置文件
sudo vi /var/packages/Docker/etc/dockerd.json

在配置文件中添加 hosts 字段(保留原有内容):

1
2
3
4
{
"registry-mirrors": [],
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
}

第二步:重启 Docker 服务

1
sudo synoservice --restart pkgctl-Docker

第三步:验证端口是否开放

1
netstat -tuln | grep 2375

如果显示 tcp 0 0 0.0.0.0:2375 0.0.0.0:* LISTEN,说明配置成功。

第四步:在 Labby 中添加 Docker 集成

host 填写:http://<群晖IP>:2375(如 http://192.168.0.199:2375

安全警告:直接暴露 Docker TCP API 会赋予完全控制宿主机 Docker 的权限,相当于 root 权限。请确保:

  1. 仅在内网或 VPN 环境下使用
  2. 不要暴露到公网
  3. 配置防火墙规则,仅允许特定 IP 访问 2375 端口

图标

icon 字段接受带前缀的字符串:

前缀 示例
di: di:jellyfin - dashboard-icons(构建时内置,CDN 回退)
sh: sh:immich - selfh.st
lucide: lucide:film - 内置线条图标
URL / 路径 https://.../icons/custom.svg

刷新间隔

在「管理服务」页面为每个集成设置轮询频率(refresh Seconds;默认值来自集成类型)。浏览器通过 SSE 接收更新,而不是自己的定时器。

运行

在浏览器中访问 http://<群晖IP>:8425 即可进入 Web 界面。

点击页面右上角的数据库图标进入 Manager services

在「管理服务」页面添加您的服务 URL 和凭据,根据需要添加不同的集成(DockerJellyfinqBittorrent 等)

配置完成后,仪表盘会自动显示各个服务的状态

进入 docker

查个日志

或者启停都是可以的

注意事项

  1. 无认证功能Labby 本身没有认证机制,请确保在反向代理后面运行,或仅在局域网/VPN 内访问
  2. 目录权限config/ 目录必须对容器运行的用户可写,否则会出现 SQLITE_READONLY 错误。如果遇到权限问题,可以在 docker-compose.yml 中添加 user: "<uid>:<gid>" 配置
  3. 数据持久化:所有配置和数据都保存在 config/labby.db 文件中,定期备份此文件即可完整备份 Labby 数据
  4. 端口冲突:确保本地端口 8425 没有被其他服务占用,如有冲突请修改端口映射
  5. 安全建议:不要将 Labby 暴露到公共互联网,除非有网络级别的访问控制

参考文档

samuelloranger/labby: Self-hosted homelab dashboard — lightweight like Glance, interactive like Homarr
地址:https://github.com/samuelloranger/labby

Labby - Docker 镜像
地址:https://ghcr.io/samuelloranger/labby