剪藏#剪藏#飘落的数码折腾日记

NAS服务太多记不住?Traefik+Homepage一套搞定

2026 年 7 月 19 日1 分钟
分享Twitter / XTelegram微博
NAS服务太多记不住?Traefik+Homepage一套搞定 封面

我最近在给 NAS 整理服务。

装了十几个容器——Immich 照片备份、Emby 媒体中心、Home Assistant 智能家居、Portainer 容器管理、AdGuard Home 去广告……每个服务都有自己的端口号。

Emby 是 8096 还是 8920?Jellyfin 是 8096 还是 8920?我自己都搞混了。每次想访问哪个服务,都得翻笔记或者翻聊天记录,烦得很。

后来我想,能不能有一个统一的入口,打开一个地址就能看到所有服务的图标,点一下就进去了?

于是我搭了 Traefik + Homepage 这套组合。一条命令启动,所有服务一个页面管理。

先看效果

打开 http://nas:3000,所有服务一目了然。点 Immich 就进照片,点 Emby 就进媒体中心,不用记任何端口号,也不用记任何域名。

Notion image

为什么要用 Traefik?

你可能会问:直接写 IP:端口不就行了吗?为什么非要加一层 Traefik?

好问题。答案是:纯内网用确实不用,但只要你有一点外网访问的需求,Traefik 就不是多余的。

具体来说,Traefik 解决三个问题:

1. 域名代替 IP:端口

没有 Traefik,Homepage 里的链接是这样的:

JAVASCRIPT
http://192.168.1.100:8096

有了 Traefik,链接变成:

JAVASCRIPT
http://media.mydomain.com

域名比 IP:端口好记,而且换 IP 不用改任何东西——换了 NAS、换了路由器,只要域名不变,所有链接都不用动。

2. 外网访问的安全

没有 Traefik,你要从外面访问 NAS,就得在路由器上做端口转发,把每个服务的端口都暴露出去。Emby 的 8096、Jellyfin 的 8920、HomeAssistant 的 8123……一堆端口对着互联网开放,安全隐患很大。

有了 Traefik,只需要转发 80 和 443 两个端口,所有服务都走这两个端口,通过域名来区分。外面的人只知道你在访问 media.mydomain.com,不知道背后是什么服务,也不知道用了什么端口。

3. 自动 HTTPS

外网访问最怕的就是证书。Let's Encrypt 的证书 90 天过期,手动续期很麻烦。Traefik 自动申请、自动续期,你什么都不用管。

所以,纯内网用确实可以不要 Traefik,直接 IP:端口。但只要你打算从外面访问,或者希望换 IP 不用改配置,Traefik 就有存在的意义。

为什么是 Traefik + Homepage

这两个东西各司其职,合在一起才是完整的体验:

  • Traefik 是反向代理。它负责把域名转发到对应的容器,自动管理 HTTPS 证书,还能自动发现新容器。

  • Homepage 是服务仪表盘。它把所有服务的链接、图标、状态信息集中在一个页面上,支持 Docker 自动发现,支持实时数据展示。

单独用任何一个都能解决问题的一部分,但合在一起才是完整的体验:Traefik 解决「怎么访问」,Homepage 解决「从哪里访问」。

Traefik 的自动发现是怎么工作的

很多人第一次用 Traefik 会觉得神奇——加了个标签,服务就自动上线了。其实原理很简单:

Traefik 启动后会监听 Docker socket,不断检查有没有新容器启动或者旧容器停止。当它发现一个容器时,会读取容器上的 traefik.* 标签,根据标签里的规则建立路由。

关键点在于 exposedByDefault: false 这个配置。它的意思是:默认不代理任何容器,只有显式加了 traefik.enable=true 标签的才会被代理。 这样你就算有其他不想暴露的容器(比如数据库),也不会被意外代理出去。

这也是为什么每个服务都要加 traefik.enable=true——没有这一行,Traefik 根本不管你这个容器。

Homepage 的两种配置方式

Homepage 有两种方式添加服务:

  1. 手动配置 — 在 services.yaml 里一条条写,精确控制每个服务的显示

  2. Docker 自动发现 — 给容器加上 homepage.* 标签,Homepage 自动抓取

两种方式各有优劣。手动配置灵活,可以加描述、分组、自定义图标。Docker 自动发现省事,新服务不用手动加。

我推荐手动配置为主,Docker 自动发现为辅——手动配置核心的、常用的服务,Docker 自动发现作为兜底,把漏掉的都捞上来。

一套 Docker Compose 搞定

我把 Traefik 和 Homepage 放在同一个 docker-compose.yml 里,一条命令启动全部:

JAVASCRIPT
version: 「3services:
  # ── Traefik:反向代理 ──
  traefik:
    image: traefik:v3.0
    container_name: traefik
    restart: unless-stopped
    ports:
      -80:80
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./traefik.yml:/etc/traefik/traefik.yml:ro
    networks:
      - proxy   # ── Homepage:服务仪表盘 ──
  homepage:
    image: ghcr.io/gethomepage/homepage:latest
    container_name: homepage
    restart: unless-stopped
    ports:
      -3000:3000
    volumes:
      - ./homepage/config:/app/config
      - /var/run/docker.sock:/var/run/docker.sock:ro
    networks:
      - proxy networks:
  proxy:
    driver: bridge

启动:

JAVASCRIPT
docker-compose up -d

就这么简单。两个服务,一个 compose 文件,一条命令。

小提示: 如果只在内网用,不需要 HTTPS,去掉 443 端口相关配置就行。如果只需要 HTTP,把 Traefik 的 entryPoints 只留 web(80 端口),去掉 websecurecertificatesResolvers 部分。

给服务加上 Traefik 标签

Traefik 的核心功能是自动发现 Docker 容器并路由。你不需要写配置文件,只需要在服务的 docker-compose.yml 里加几个标签。

Notion image

比如 Immich:

JAVASCRIPT
services:
  immich:
    image: ghcr.io/immich-app/immich-server:release
    container_name: immich
    restart: unless-stopped
    networks:
      - proxy
    labels:
      - 「traefik.enable=true
      - 「traefik.http.routers.immich.rule=Host(`photos.mydomain.com`)」
      - 「traefik.http.routers.immich.entrypoints=web」
      - 「traefik.http.services.immich.loadbalancer.server.port=2283

四个标签,四个意思:

  • traefik.enable=true — 启用这个容器的代理

  • traefik.http.routers.immich.rule=Host(...) — 用 photos.mydomain.com 这个域名访问

  • traefik.http.routers.immich.entrypoints=web — 从 80 端口进入

  • traefik.http.services.immich.loadbalancer.server.port=2283 — 转发到容器的 2283 端口

为什么要显式指定端口? 因为有些容器会暴露多个端口,Traefik 不知道该用哪个。显式指定 loadbalancer.server.port 就是告诉它用哪个端口转发。

新增一个服务,加几个标签,重新 docker-compose up -d,Traefik 自动发现,不用重启。

配置 Homepage

Homepage 的配置在 ./homepage/config 目录下,三个 YAML 文件就够了。

services.yaml** — 定义你的服务:**

JAVASCRIPT
---
media:
  - Immich:
      href: http://photos.mydomain.com
      description: 照片备份
      icon: immich.png
  - Emby:
      href: http://media.mydomain.com
      description: 媒体中心
      icon: emby.png automation:
  - HomeAssistant:
      href: http://home.mydomain.com
      description: 智能家居
      icon: home-assistant.png infrastructure:
  - Traefik:
      href: http://traefik.mydomain.com
      description: 反向代理管理
      icon: traefik.png
  - Portainer:
      href: http://docker.mydomain.com
      description: Docker 管理
      icon: portainer.png

settings.yaml** — 全局设置:**

JAVASCRIPT
---
headerStyle: tiled

docker.yaml** — 开启 Docker 自动发现:**

JAVASCRIPT
---
my-server:
  socket: /var/run/docker.sock

改完 YAML 刷新页面就生效,不需要重启容器。

注意: 这里的 href 填的是 Traefik 代理后的域名(photos.mydomain.com),不是 IP:端口。这样无论内网还是外网,点击链接都走 Traefik 的路由规则,统一由域名访问。

效果对比

之前 192.168.1.100:8096 + 翻笔记 烦
只用 Homepage http://192.168.1.100:8096 + 翻笔记 好一点,但还是得记 IP
Traefik + Homepage http://media.mydomain.com → 点一下 完美

常见问题 FAQ

Q:内网没有域名,能用吗?

可以。内网直接用 IP:端口访问也行,但这样就没用到 Traefik 了。如果想用 Traefik 的域名解析,可以在内网用 AdGuard Home 把 *.mydomain 解析到 NAS 的 IP,或者直接改电脑 hosts 文件。

Q:Homepage 和 Heimdall、Homarr 有什么区别?

Homepage 是 YAML 配置,轻量快速(大概 50MB 内存),有 100+ 服务集成,能显示实时数据。Homarr 是拖拽式 GUI 配置,不需要碰 YAML。Heimdall 更简单,纯书签页,没有实时数据。我选 Homepage 是因为配置文件方便备份和版本管理。

Q:Docker Socket 暴露安全吗?

docker.sock 只读挂载(:ro)是社区推荐的做法。Homepage 和 Traefik 都需要这个权限来自动发现容器。如果追求更高安全,可以使用 Docker Socket Proxy。

Q:Traefik 重启会影响正在运行的服务吗?

不会。Traefik 重启时会自动重新发现所有正在运行的容器,短暂中断后自动恢复路由。

Q:已经装了很多服务,迁移麻烦吗?

每个服务只需要在 docker-compose.yml 里加上 Traefik 的标签,连到 proxy 网络就行。Homepage 那边在 services.yaml 里一条条加上。我当初就是逐步迁移的,不影响其他服务。

Q:访问服务时出现 404 或 502 怎么办?

最常见的几个原因:

  • 忘了加 traefik.enable=true,Traefik 根本不代理这个容器

  • 忘了把容器加到 proxy 网络,Traefik 找不到它

  • 容器暴露了多个端口但没有在标签里指定 loadbalancer.server.port,Traefik 用错了端口

  • Homepage 的 href 填的地址不对,点进去打不开

排查时先用 docker logs traefik 看日志,Traefik 会把配置错误的信息打印出来。

这套组合我用下来感觉很好。Traefik 管底层路由和证书,Homepage 管前端入口,都在一个 docker-compose 里管理,一条命令启动全部服务。现在我的 NAS 上十几个服务,打开 http://nas:3000 就能看到所有服务的图标,点一下就走,再也不用翻笔记找端口号了。

如果你也在为 NAS 服务管理头疼,这套组合值得试试。

觉得有用的话,点个赞 + 在看,让更多人看到 ❤️

你 NAS 上跑了多少个服务?每个都记得端口号吗?评论区聊聊 👇

原文地址: https://mp.weixin.qq.com/s?__biz=MzY5ODAyMjk3Mg==&mid=2247484230&idx=1&sn=1df7a485360177afe1e8accbb522d33d&chksm=f57b5bd0fe7e1db9b37d1f521e3efdf8a1342980b6225ef830fda79ad83f9fad4f7545bb9691&mpshare=1&scene=1&srcid=07196ABrxfHe8hWayGtFQVqp&sharer_shareinfo=6374bd04a5727647f504cdf5d1dce926&sharer_shareinfo_first=6374bd04a5727647f504cdf5d1dce926#rd

相关文章