如何用Raspberry Pi和Traefik Hub远程控制你的家庭自动化系统

476 阅读7分钟

采用开源网络来促进云原生应用程序。

多年来,有几个朋友向我请教管理家庭网络的技巧。在大多数情况下,他们正在建立家庭自动化,并希望从外部访问他们的服务。

每次我帮助他们时,每个人都说了同样的话。"你在开玩笑吗?发布一个简单的应用程序不可能这么复杂!"

发布不会使你的网络或集群处于风险之中的应用程序确实可以相当复杂。当我们开始研究Traefik Hub-- Traefik实验室的最新产品时,我知道它将改变发布应用程序的游戏规则。

这篇文章展示了发布服务的复杂性,以及Traefik Hub如何让你的生活变得更加轻松。我以建立一个服务器为例,用运行在Raspberry Pi上的Traefik Hub远程控制你的家庭自动化。

挑战

建立一个服务器来管理你的家庭自动化系统是很好的,但如果能够在世界任何地方只用你的手机就能远程控制它,那就更棒了!但是,权力越大,责任越大。

然而,强大的力量伴随着巨大的责任。如果你想从外部访问你的本地网络,你最好确保它是有弹性的,而且你是唯一可以访问的人。

首先,我看一下你通常会采取哪些步骤来实现这一目标。

随时远程联系你的家庭助理

家庭助理是一个著名的管理家庭自动化设备的解决方案。它是一个用Python编写的开源项目。它允许你以本地安装的方式实现家庭自动化。云上没有数据,一切都保持隐私。我推荐这篇优秀的文章,帮助你使用Docker在树莓派上安装家庭助理。

为了从外部接触到你的家庭助理,你必须将你的Raspberry Pi暴露在互联网上。要做到这一点,你必须。

注意:大多数互联网供应商都会分配动态的公共IP--每次你的路由器重新启动时,你的IP可能会改变。为了建立一个有弹性的系统,你还需要一个动态域名。

加密很重要

当你与你的服务器通信时,你会发送敏感数据,如你的用户名和密码。你必须使用TLS证书验证和加密通信,以避免这些数据被盗。

这需要。

TL;DR

总而言之,在树莓派上安装家庭助理后,你需要。

  • 获取你的路由器公共IP。
  • 为你的Raspberry Pi创建一个端口转发。
  • 购买一个域名。
  • 创建一个动态域名。
  • 安装一个反向代理,并使用TLS证书对其进行加密访问配置。

现在,想象一下,如果你能跳过上面所有的步骤,只需点击几下就能发布你的服务!

Traefik Hub来拯救你

Traefik Hub是一个云原生网络SaaS平台,允许用户在边缘快速发布他们的服务。使用Traefik Hub,你只需点击几下就可以发布你的家庭助理应用程序。

还记得我前面提到的挑战吗?刮目相看吧。一旦你在树莓派上安装了家庭助理,你所要做的就是把你的树莓派连接到Traefik Hub。Traefik Hub为你处理一切,包括。

  • 使你的服务可以从互联网上到达。
  • 提供一个动态域名(免费)。
  • 用TLS证书和访问控制策略对通信进行加密。

现在我已经介绍了Traefik Hub,我将开始配置它的工作。

第1步:将你的树莓派连接到Traefik Hub上

首先,前往Traefik Hub,注册一个免费账户。你可以通过谷歌或GitHub注册。

你需要添加一个新的代理,将你的Raspberry Pi连接到Traefik Hub。

add an agent

Traefik Hub提供了几个片段,允许你从头开始。

由于家庭助理的设置有点复杂,你可以从Hub的用户界面上获得你的令牌,并在这个例子中使用下面的脚本。该令牌允许你将你的代理连接到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就会发现在你的集群上运行的每一个服务,这样你就可以发布它们,而不需要挖掘你的配置文件。

Configure Home Assistant

选择你的家庭助理服务,并点击保存和发布按钮来发布它。

Publish Home Assistant service

现在让神奇的事情发生吧!

Success message for published service

形象代言人。

(Nicolas Mengin, CC BY-SA 4.0)

一旦Hub通知你,你的服务已经发布,你可以使用Traefik Hub生成的域名从互联网上访问它。这种连接是可验证的,而且是加密的,即使你的公共IP发生变化,你的家庭助理仍然可以到达。

Secure connection confirmed

幕后花絮

你的应用程序已经发布。接下来,我将讨论Traefik Hub在幕后处理的一些事情,以提供一个无缝的体验和一些方便的配置选项。

Traefik实例

当你安装Traefik Hub代理时,你肯定注意到它附带了一个Traefik代理实例。

Traefik Hub在其平台和你安装在Raspberry Pi上的代理之间建立一个隧道,以便在互联网上发布你的服务。代理商将请求传递给开源的Traefik Proxy,它被用作一个入口控制器。Traefik Hub管理域名和TLS证书,它与你的Traefik实例共享证书,以允许它进行TLS终止。

Traefik connection topology

访问控制策略

需要记住的另一点是,部署的家庭助理应用程序带有自己的登录系统。然而,当你使用Traefik Hub发布服务时,你可以通过使用访问控制策略(如JWT和Basic Auth)进一步限制访问。

New access control policy

Kubernetes

如果你是Kubernetes用户,你也可以发布你的Kubernetes服务。Traefik Hub可以通过用户界面或专门的CRD来管理Kubernetes服务。

管理和监控

Traefik Hub还提供了一个Web UI,允许你管理和监控服务的展示。

Performance dashboard

总结

这篇文章一开始就介绍了通过加密和可验证的连接发布应用程序所带来的长而复杂的任务清单。设置家庭自动化是这种复杂程度的一个很好的例子。但是,当事情看起来不可能那么难的时候,总有一个更简单的选择Traefik Hub通过接管大部分平凡的操作任务,节省时间,让开发人员专注于构建应用程序,从而使你的生活更加简单。