2026 Homepage 自建导航页:把所有自建服务入口聚合到一个仪表盘
PVE 上跑了八九个 Docker 服务,NPM 配好了域名反代,每个服务都有自己的子域名——Jellyfin、Immich、AdGuard Home、FreshRSS、n8n、Uptime Kuma、Stirling PDF……加起来的子域名数量超过了一个人能记住的范围。每次想打开某个服务,要不就翻浏览器书签,要不就在地址栏里猜子域名,猜错了还得去 NPM 里查端口号。而且书签多了之后跟没有一样——几十个书签混在一起,找起来比直接输域名还慢。更烦的是你不知道哪个服务当前是不是正常在跑——点了书签发现打不开,还得去 Uptime Kuma 里查状态。
Homepage 就是来解决这个问题的。它是一个开源的导航页工具,Docker 一键部署后,把你所有的自建服务入口整理到一个漂亮的仪表盘上。每个服务有图标、有名字、有状态指示灯——绿色表示容器正常运行、红色表示已停止或异常、黄色可能有问题,一眼扫过去就知道所有服务的状态。而且 Homepage 会自动检测 Docker 容器的运行状态和系统资源占用(CPU、内存、磁盘),不需要额外配置。所有信息在一个页面上全部展示。
部署好之后你把浏览器默认首页设成 Homepage 的地址。每次打开浏览器第一眼看到的就是所有服务的仪表盘——想用哪个点哪个,服务状态颜色一眼得知。不用记子域名、不用翻书签、不用 SSH 登录查状态。而且 Homepage 的界面很精致,自带深色主题,放在那里当桌面展示也很好看。
一、Docker 部署
Homepage 的配置全部通过 YAML 文件完成,没有数据库,没有后台管理界面。你编辑配置文件,重启容器就生效。
services: homepage: image: ghcr.io/gethomepage/homepage:latest container_name: homepage restart: unless-stopped ports: - "3002:3000" volumes: - ./homepage/config:/app/config - /var/run/docker.sock:/var/run/docker.sock:ro environment: PUID: 1000 PGID: 1000关键配置说明:映射 Docker Socket 后 Homepage 可以自动发现本机的所有运行容器,自动添加它们到仪表盘上。config 目录用来存放服务的配置文件。
docker compose up -d启动后访问 http://你的IP:3002,你会看到一个默认的仪表盘——如果映射了 Docker Socket,上面已经自动列出了本机正在运行的所有容器。每个容器一个卡片,显示容器名称、运行状态和访问端口。
二、基础配置
Homepage 使用三个 YAML 配置文件,都在 ./homepage/config/ 目录下:
| 配置文件 | 作用 | 必须创建 |
|---|---|---|
services.yaml | 定义要展示的服务列表 | 否(有 Docker 自动发现) |
bookmarks.yaml | 定义常用链接书签 | 否 |
settings.yaml | 自定义主题、标题、布局 | 否 |
widgets.yaml | 配置小组件(天气、时间、搜索框等) | 否 |
如果你映射了 Docker Socket,Homepage 会自动发现本机的容器,不需要手动写 services.yaml。但自动发现的服务名称是容器名,如果你想自定义显示名、分组排序或者加入非 Docker 服务(比如外部网站),就需要手动创建 services.yaml。
创建 services.yaml:
---- 媒体服务: - Jellyfin: icon: jellyfin href: https://jellyfin.你的域名.com description: 电影和电视剧
- 日常工具: - AdGuard Home: icon: adguard href: http://192.168.1.100:3000 description: DNS 广告拦截
- FreshRSS: icon: rss href: https://rss.你的域名.com description: RSS 阅读器每个服务卡片的 icon 字段可以填 Homepage 内置的图标名,也可以用自定义图片的 URL。Homepage 内置了上百种常见服务的图标——Jellyfin、Immich、AdGuard、Nginx、Portainer、GitHub 都有,直接写名字就行。href 是服务的访问地址,可以是内网 IP 加端口,也可以是反代后的子域名。description 会显示在图标下方,方便识别。
把写好的 services.yaml 放到 config 目录后重启容器。打开浏览器刷新页面,仪表盘上就会按你定义的分组展示所有服务。每个服务卡片上还会有一个小圆点——绿色表示容器在运行,红色表示已停止。如果某个服务卡片没有状态灯,说明这个服务不是在 Docker 里跑的,或者 Homepage 没有检测到它的状态,这种情况下状态灯不会显示,不影响使用。
如果需要调整分组排序或者添加更多外部服务,继续编辑 services.yaml 然后重启容器就行。配置文件的语法是 YAML,注意缩进要对齐——用两个空格作为一个缩进层级,不要用 Tab。
三、实用 Widget 配置
Homepage 支持多种小组件,可以显示在仪表盘顶部。在 widgets.yaml 里配置:
---- 搜索: provider: google target: _blank
- 时间: - 资源监控: label: 服务器 cpu: true memory: true disk: /
- 天气: location: 上海 unit: metric几个实用的组件推荐配一下:
搜索框: 配置了搜索框后,你直接在 Homepage 的搜索栏里输入关键词,回车就跳到搜索结果。支持 Google、DuckDuckGo、Bing 等搜索引擎。如果你在用自建的 SearXNG 实例,也可以把 provider 设为自定义的 URL。这样你甚至不需要打开浏览器地址栏搜索了——Homepage 既是服务导航入口也是搜索入口,两步合一步。平时打开浏览器后最常用的两个操作——搜东西和打开某个服务——在这个页面上全部解决。
资源监控: 显示服务器的 CPU、内存、磁盘使用率。不用单独登录 PVE 或者 SSH 去看服务器负载了——瞥一眼 Homepage 就知道资源够不够。如果同时监控多台服务器,可以配置多个信息源,在仪表盘上并排显示多台机器的资源占用。家里一台 PVE 做主力、办公室一台 NAS 做备份——都在一个页面上看到状态,不需要切换到不同后台去查。
Docker 状态: 如果映射了 Docker Socket,Homepage 会自动在服务卡片上显示运行状态指示灯——绿色表示容器正常运行,红色表示已停止或异常。这个功能不需要额外配置,映射了 Socket 就自动生效。服务多的时候你不用逐个点开确认,扫一眼仪表盘就知道哪些在跑哪些需要处理。三个红色卡片在一个灰色的仪表盘上非常醒目,不会漏掉。
四、进阶定制
多服务器支持: 如果你的服务分布在多台机器上(比如家里的 PVE 和办公室的 NAS),可以配置多个信息源。Homepage 支持通过环境变量指定多个 Docker Socket 地址或 Kubernetes 集群。你可以在 docker-compose.yml 里添加多个 -v /path/to/remote/docker.sock:/var/run/docker.sock 或者通过 SSH 连接远程 Docker 主机。配置后 Homepage 会统一展示所有机器上的服务状态。
自定义 Docker 发现: 自动发现的 Docker 容器会以容器名为分组显示。如果你想让某个容器显示在特定的分组里(比如把 Jellyfin 放到”媒体”组,Immich 也放到”媒体”组),可以在容器的 Labels 里加两行:homepage.group=媒体 和 homepage.name=Jellyfin。在 docker-compose.yml 的对应服务下加 labels 配置,重启容器后 Homepage 就会按你的分组显示,而不是默认的容器名分组。这个功能对服务多了之后整理仪表盘很有用。
主题自定义: Homepage 支持浅色/深色主题切换,也支持自定义 CSS。在 settings.yaml 里可以配置页面标题、Logo 图片、背景色、卡片圆角等视觉元素。默认主题已经很精致了,大多数人不需要改。
五、常见问题
Q:不想映射 Docker Socket 可以吗?
可以。不映射 Socket 的话,Homepage 不会自动发现容器,你需要在 services.yaml 里手动添加所有服务。这种方式更安全——映射 Docker Socket 意味着 Hompeage 有权限管理 Docker 容器,如果 Homepage 被攻破攻击者可以操作所有容器。但个人自部署场景下风险不大,映射了方便很多。如果你还是不放心,可以给 Homepage 创建一个只读的 Docker 用户,限制它只能读取容器信息而不能创建或删除容器。
Q:服务状态指示灯不准?
Homepage 通过 Docker API 检测容器的”运行”状态。如果某个容器虽然在运行但里面的服务本身挂了(比如 Jellyfin 进程崩溃了但容器因为 restart: unless-stopped 还在反复重启),状态灯不会变红——在 Docker 看来容器还在运行。这种情况需要配合 Uptime Kuma 做 HTTP 层面的健康检测。不过对大多数自部署场景来说,容器状态灯已经够用了。
Q:可以设置为浏览器主页吗? 可以。Chrome 和 Firefox 都能自定义主页——把 Homepage 的地址填进去就行。每次打开浏览器看到的就是你所有服务的仪表盘。建议配合自定义新标签页插件(比如 Chrome 的 New Tab Redirect)一起使用,打开新标签页也显示 Homepage。
Q:跟 Heimdall / Flame 比哪个好? Homepage 是这三个里最活跃的,GitHub 更新频率高、功能最多、社区大。Heimdall 配置简单但开发已经停滞了几年。Flame 更轻量但支持的集成和 Widget 比较少。Homepage 最大的优势是 Docker 自动发现和实时状态检测——不需要手动添加每个服务,而且能看到状态。选 Homepage 基本不会错。
延伸阅读
- Docker 换源避坑指南 — 部署前的必备准备
- Nginx Proxy Manager 反代面板 — 统一管理所有服务的访问入口
- 自建 RSS 信息流 — 彻底告别算法推荐
Homepage 的价值在于:你不用记 10 个子域名、不用维护一个越来越长的书签列表、不用 SSH 登录去查服务状态。打开浏览器看到的首页就是你所有服务的入口,每个服务一个卡片,哪个挂了颜色直接告诉你——红色的不用点进去也知道有问题,绿色的一扫而过就放心了。而且这还是一个”越用越值钱”的工具——每多部署一个服务,Homepage 上就自动多一个卡片展示它。不像书签需要你手动添加再整理分类,Homepage 发现新容器自动展示在仪表盘上,什么都不用做。把浏览器主页设成它之后,每天打开电脑一眼看到的就是所有服务的状态,习惯几天就回不去了。
推荐指数:⭐⭐⭐⭐⭐(自部署用户的必备仪表盘)
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!