申请免费的Amazon云服务器
【操作步骤】
1.
访问亚马逊云服务,注册账号
2.
申请ec2云服务器
3.
使用puttygen生成访问密钥
4.
使用putty访问云服务器
5.
云服务器防火墙设置

【参考】
l 亚马逊云服务网站
https://aws.amazon.com/
l puttygen下载地址
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
l SUSE下nano的安装
suse的很多操作命令与其它linux有差别(大家可以选熟悉的ubuntu系统,它的操作基本与树莓派一致)
很多同学问SUSE下nano的安装,参考:https://software.opensuse.org/download.html?project=editors&package=nano
命令:
sudo zypper addrepo https://download.opensuse.org/repositories/editors/SLE_15/editors.repo
sudo zypper refresh
sudo zypper install nano


ssh隧道构建
【操作步骤】
1.
在树莓派上使用ssh登录云主机
2.
构建ssh隧道
3.
安装与使用autossh
4.
启动时自动执行autossh命令


【参考】

l 连接示意图


l 自启动/etc/rc.local添加内容
sudo -u pi /usr/bin/autossh -i “/home/pi/etc/amazon_xinjiapo.pem” -R 0.0.0.0:8000:127.0.0.1:8123 ec2-user@ec2-54-251-155-96.ap-southeast-1.compute.amazonaws.com -N -f


frp隧道构建
【操作步骤】
1.
打开防火墙规则
2.
在云主机上下载、配置、运行frp服务器端
3.
在树莓派上下载、配置、运行frp客户端
4.
将frps和frpc命令分别加入云主机与树莓派的启动执行中

【参考】
l 连接示意图

l frp软件github地址
https://github.com/fatedier/frp/
l frp软件下载地址
https://github.com/fatedier/frp/releases
l frp服务器端配置
[common]
bind_port = 7000
token = a1234
l frp客户端配置
[common]
server_addr = ec2-54-251-155-96.ap-southeast-1.compute.amazonaws.com
server_port = 7000
token = a1234

[HA]
type = tcp
local_ip = 127.0.0.1
local_port = 8123
remote_port = 80
l frp客户端自启动添加内容
注:前半部分在等待网络启动后才运行对应命令,其中网关地址需要修改为你实际环境中的地址
https://www.cnblogs.com/mafeng/p/10697303.html

(
until ping -nq -c3 47.96.18.54; do

Waiting for network

sleep 5
done
/home/pi/frp/frpc -c /home/pi/frp/frpc.ini
)&


为HA配上域名与数字证书
【操作步骤】
1.
申请一个免费的duckdns.org子域名
2.
下载certbot-auto
3.
申请数字证书
4.
在homeassistant中配置https访问
5.
设置frp隧道中443远程端口映射
6.
更新数字证书

【参考】
l duckdns官网
https://www.duckdns.org/
l Let’s Encrypt官网
https://letsencrypt.org
l certbot官网
https://certbot.eff.org/
l certbot-auto下载地址
https://dl.eff.org/certbot-auto或https://github.com/certbot/certbot/raw/master/certbot-auto
l 申请证书命令
sudo certbot-auto certonly --standalone --preferred-challenges http-01 --http-01-port 8123 --email your@email.address -d examplehome.duckdns.org
l 增加证书文件访问权限命令
sudo chmod 755 /etc/letsencrypt/live
sudo chmod 755 /etc/letsencrypt/archive
sudo chmod +r /etc/letsencrypt/archive -R
l HomeAssistant中证书的配置样例
http:
ssl_certificate: /etc/letsencrypt/live/examplehome.duckdns.org/fullchain.pem
ssl_key: /etc/letsencrypt/live/examplehome.duckdns.org/privkey.pem
base_url: examplehome.duckdns.org
l 更新证书命令
sudo certbot-auto renew --standalone --preferred-challenges tls-sni-01 --tls-sni-01-port 8123
注:
以上两条命令执行前需要先停止hass以释放8123端口。
其中的http-01用于远程80端口映射到本地的8123端口的情况,tls-sni-01用于远程的443端口映射到本地8123端口的情况,根据你构建的隧道决定使用哪个;你也可以使用非8123端口,这样就不用事先停止home assistant了,但需要额外构建通讯隧道。
命令中可以中加入—pre-hook和—post-hook参数用于指定更新前自动执行的停止hass和更新后启动hass的命令,如—pre-hook “sudo systemctl stop home-assistant@pi”


nginx代理
【操作步骤】
1.
问题与解决方案(为什么要用nginx代理)
2.
安装nginx
3.
修改nginx的配置
4.
修改HA配置
5.
修改frp配置
6.
演示

【参考】
l 示意图

l nginx官网
http://nginx.org/
l 安装nginx
sudo apt-get install nginx
l nginx配置内容
server {
listen 443;
server_name zjs.duckdns.org;

ssl on;
ssl_certificate /etc/letsencrypt/live/zjs.duckdns.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/zjs.duckdns.org/privkey.pem;
ssl_prefer_server_ciphers on;

location / {
proxy_pass http://127.0.0.1:8123;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
}
}
l 修改nginx配置命令
#编辑配置文件ha_ssl
sudo vi /etc/nginx/sites-available/ha_ssl
#在sites-enabled目录下建立配置文件链接
sudo ln -sf /etc/nginx/sites-available/ha_ssl /etc/nginx/sites-enabled/default
#重新加载nginx配置
sudo nginx -s reload