多年来,有几位朋友向我咨询管理家庭网络的技巧。在大多数情况下,他们都在设置家庭自动化,并且希望从外部访问他们的服务。
每次我帮助他们时,他们都会说同样的话:“你在开玩笑吗?发布一个简单的应用程序不可能这么复杂吧!”
发布不会使您的网络或集群面临风险的应用程序确实可能相当复杂。当我们开始开发 Traefik Hub(Traefik Labs 的最新产品)时,我就知道它将改变应用程序发布的游戏规则。
本文演示了发布服务的复杂性,以及 Traefik Hub 如何让您的生活更轻松。我用一个例子来说明如何设置一个服务器,使用在 Raspberry Pi 上运行的 Traefik Hub 远程控制您的家庭自动化。
挑战
设置一个服务器来管理你的家庭自动化很好,但是如果能够仅使用你的手机,就能从世界任何地方远程控制它,那就更好了!
然而,能力越大,责任越大。如果您想从外部访问您的本地网络,最好确保它的弹性,并且只有您有访问权限。
首先,我将介绍您通常需要采取的步骤来实现这一点。
随时远程访问您的 Home Assistant
Home Assistant 是一种管理家庭自动化设备的知名解决方案。它是一个用 Python 编写的开源项目。它允许您通过本地安装进行家庭自动化:云端没有数据,一切都保持私密。我推荐这篇优秀的文章,它可以帮助您使用 Docker 在 Raspberry Pi 上安装 Home Assistant。
要从外部访问您的 Home Assistant,您必须将您的 Raspberry Pi 暴露给互联网。为此,您必须:
注意:大多数互联网提供商分配动态公共 IP:每次您的路由器重启时,您的 IP 可能会发生变化。要构建一个有弹性的系统,您还需要一个动态域名。
加密很重要
当您与服务器通信时,您会发送敏感数据,例如您的用户名和密码。您必须使用 TLS 证书验证和加密通信,以避免这些数据被盗。
这需要:
- 一个 反向代理来进行 TLS 终止。
- 一个基础架构来生成和续订您的 Let's Encrypt 证书。
总结
总而言之,在 Raspberry Pi 上安装 Home Assistant 后,您需要:
- 获取您的路由器公共 IP。
- 创建一个端口转发到您的 Raspberry Pi。
- 购买一个域名。
- 创建一个动态域名。
- 安装一个反向代理,并使用 TLS 证书将其配置为加密访问。
现在,想象一下,如果您可以跳过以上所有步骤,只需点击几下即可发布您的服务!
Traefik Hub 来拯救
Traefik Hub 是一个云原生网络 SaaS 平台,允许用户快速在边缘发布他们的服务。使用 Traefik Hub,您只需点击几下即可发布您的 Home Assistant 应用程序。
还记得我之前提到的挑战吗? 忘记它们吧。一旦您在 Raspberry Pi 上安装了 Home Assistant,您所要做的就是将您的 Raspberry Pi 连接到 Traefik Hub。 Traefik Hub 会为您处理一切,包括:
- 使您的服务可以从互联网访问。
- 提供一个动态域名(免费)。
- 使用 TLS 证书和访问控制策略加密通信。
现在我已经介绍了 Traefik Hub,接下来我将开始配置它。
步骤 1:将您的 Raspberry Pi 连接到 Traefik Hub
首先,前往 Traefik Hub 并 注册一个免费帐户。您可以通过 Google 或 GitHub 注册。
您需要添加一个新的代理来将您的 Raspberry Pi 连接到 Traefik Hub。

(Nicolas Mengin,CC BY-SA 4.0)
Traefik Hub 提供了几个代码片段,允许您从头开始。
由于 Home Assistant 设置有点复杂,您可以从 Hub UI 获取您的令牌,并在此示例中使用以下脚本。该令牌允许您将您的代理连接到 Traefik Hub。然后,Traefik Hub 将此代理附加到您的帐户,您可以开始发布您的服务。
这是脚本
version: '3'
networks:
traefik: {}
services:
homeassistant:
container_name: homeassistant
image: "ghcr.io/home-assistant/home-assistant:stable"
volumes:
# /!\\ Mount the custom configuration file described below /!\\
- ./configuration.yaml:/config/configuration.yaml
- /etc/localtime:/etc/localtime:ro
restart: unless-stopped
privileged: true
networks:
- traefik
ports:
- 8123
# Start the agent with the latest version
hub-agent:
image: ghcr.io/traefik/hub-agent-traefik:v0.7.2
restart: "on-failure"
container_name: hub-agent
networks:
- traefik
command:
- run
- --hub.token=<YOUR_TOKEN> # Set your token here
- --auth-server.advertise-url=http://hub-agent
- --traefik.host=traefik
- --traefik.tls.insecure=true
- --hub.url=https://platform.hub.traefik.io/agent
- --hub.ui.url=https://hub.traefik.io
volumes:
- /var/run/docker.sock:/var/run/docker.sock
depends_on:
- traefik
# Start Traefik with the latest version
traefik:
image: traefik:v2.8
container_name: traefik
networks:
- traefik
command:
# Enable Hub communication (open the port 9900 and 9901 by default)
- --experimental.hub=true
- --hub.tls.insecure=true
- --metrics.prometheus.addrouterslabels=true
# ./configuration.yaml to mount on your home assistant container
# in /config/configuration.yaml
# These modifications are required by home assistant to be exposed using
# a third party software such as the Traefik Hub agent
# Loads default set of integrations. Do not remove.
default_config:
http:
ip_ban_enabled: true
login_attempts_threshold: 5
use_x_forwarded_for: true
trusted_proxies:
- 192.168.1.0/24
- 172.18.0.0/24
- 127.0.0.1
- ::1
- fe80::/64
- fe00::/64
- fd00::/64
# Text to speech
tts:
- platform: google_translate
步骤 2:发布您的服务
一旦您在 Raspberry Pi 上安装了代理,Traefik Hub 会发现集群上运行的每个服务,因此您可以发布它们,而无需深入研究您的配置文件。

(Nicolas Mengin,CC BY-SA 4.0)
选择您的 Home Assistant 服务,然后点击 保存并发布 按钮以发布它。

(Nicolas Mengin,CC BY-SA 4.0)
现在让奇迹发生吧!

(Nicolas Mengin,CC BY-SA 4.0)
一旦 Hub 通知您您的服务已发布,您就可以使用 Traefik Hub 生成的域名从互联网访问它。该连接是可验证和加密的,即使您的公共 IP 发生变化,您的 Home Assistant 仍然可以访问。

(Nicolas Mengin,CC BY-SA 4.0)
幕后花絮
您的应用程序已发布。接下来,我将讨论 Traefik Hub 在幕后处理的一些事情,以提供无缝的体验和一些方便的配置选项。
Traefik 实例
当您安装 Traefik Hub 代理时,您肯定注意到它带有一个 Traefik Proxy 实例。
Traefik Hub 在其平台和您安装在 Raspberry Pi 上的代理之间创建一个隧道,以便在互联网上发布您的服务。代理将请求传递给开源的 Traefik Proxy,它被用作 Ingress Controller。 Traefik Hub 管理域名和 TLS 证书,并与您的 Traefik 实例共享该证书,以允许它进行 TLS 终止。

(Nicolas Mengin,CC BY-SA 4.0)
访问控制策略
另一点要记住的是,已部署的 Home Assistant 应用程序带有自己的登录系统。但是,当您使用 Traefik Hub 发布服务时,您可以使用 访问控制策略(例如 JWT 和 Basic Auth)进一步限制访问。

(Nicolas Mengin,CC BY-SA 4.0)
Kubernetes
如果您是 Kubernetes 用户,您也可以发布您的 Kubernetes 服务。 Traefik Hub 可以通过 UI 或专用的 CRD 管理 Kubernetes 服务。
管理和监控
Traefik Hub 还提供了一个 Web UI,允许您管理和监控服务的暴露。

(Nicolas Mengin,CC BY-SA 4.0)
总结
本文首先介绍了一系列漫长而复杂的任务,这些任务伴随着通过加密和可验证的连接发布应用程序。 设置家庭自动化是该级别复杂性的一个很好的例子。 但是,当事情看起来难以置信时,总有一种更简单的替代方案! Traefik Hub 接管了大多数平凡的运营任务,从而简化了您的生活,节省了时间,并允许开发人员专注于构建应用程序。
现在,即使您在世界的另一端,您也可以打开家里的灯!
如果您有兴趣了解更多关于 Traefik Hub 的信息,请查看这篇 入门文章。 Traefik Hub 目前处于 Beta 版,所以请不要犹豫,尝试一下并提供反馈——您可以直接在 UI 中进行。
我希望您觉得这篇文章有帮助,感谢您的阅读!
1 条评论