在Ubuntu服务器中部署HomeAssistant的步骤。个人备忘,以便需要时查看
0. 在Ubuntu中安装Docker
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
1.通过Docker运行HomeAssistant
- 使用以下命令拉取镜像
docker pull ghcr.io/home-assistant/home-assistant:latest
- 使用以下命令启动容器
docker run -d --name="hass" -v /home/hass/config:/config -p 8123:8123 ghcr.io/home-assistant/home-assistant:latest
将会把HA的配置保存在/home/hass
中,若需备份或恢复,直接拷贝整个文件夹即可
2. 修改HA的配置文件
首先需要修改HA的配置文件,以允许代理访问,否则将产生HTTP 400错误。
修改/home/hass/config/configuration.yaml
,添加如下内容
http:
use_x_forwarded_for: true
trusted_proxies:
- 127.0.0.1
- 172.17.0.1 # 填写Docker Bridge网络的地址,可使用docker network inspect bridge查看
3. 修改Nginx配置文件
刚开始以为直接添加http代理就行,就只对根路径写了proxy_pass http://127.0.0.1:8123
,可以打开HA的页面,但是输入账号密码一直登录失败,如图:
通过ssh转发8123端口到本地,登录进去发现这样的报错:
查了些资料,发现还需要添加websocket的代理才行。
最后贴出完整的配置文件
server {
listen 443 ssl;
server_name 域名;
ssl_certificate /etc/ssl/域名.pem;
ssl_certificate_key /etc/ssl/域名.key;
location / {
proxy_pass http://127.0.0.1:8123;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /api/websocket {
proxy_pass http://127.0.0.1:8123/api/websocket;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
access_log /var/log/nginx/ha.access.log;
}