В этой статье расскажу как добавить HTTPS в Home Assistant с автоматическим обновлением бесплатных сертификатов SSL
Для реализации HTTPS в Home Assistant нам поможет SWAG — Secure Web Application Gateway (ранее известный как letsencrypt, но не имеющий отношения к Let’s Encrypt ™), который настраивает веб-сервер Nginx и обратный прокси-сервер с поддержкой php и встроенным клиентом certbot.
Certbot автоматизирует процессы генерации и обновления бесплатных сертификатов SSL-сервера (Let’s Encrypt и ZeroSSL).
SWAG также содержит fail2ban для предотвращения вторжений.…
Здесь была «подготовительная часть» — «Установка Docker, Docker Compose и Portainer»
Есть конечно более простой способ добавить HTTPS в Home Assistant с помощью аддонов, если у вас версия Home Assistant Supervised или Home Assistant OS:
Однако мы рассмотрим универсальную инструкцию (не зависящую от версии Home Assistant) с установкой SWAG (Let’s Encrypt + и Nginx) и Duck DNS в в Docker, которая одинаково подходит для обоих вариантов, рассмотренных мной ранее: — Home Assistant Supervised и Home Assistant Core.
Рассматриваемый вариант установки HTTPS в Home Assistant также вполне подходит для Ubuntu 20.04 / Debian 10 / Kali Linux … (Сервер, Десктоп, VPS Oracle … )
Прежде всего создадим домен на duckdns.org
— привяжем IP адрес реальной или виртуальной машины, где расположен наш Home Assistant к имени DNS вида вашдомен.duckdns.org
DNS (Domain Name System) — система доменных имен, смысл которой в том, что каждому цифровому IP-адресу присваивается понятное буквенное имя (домен). Когда вы вводите в браузере доменное имя, сервера DNS преобразуют его в IP-адрес. Например, вашдомен.duckdns.org будет соответствовать IP-адресу вашего сервера.
Далее будем использовать docker-compose для создания и запуска своих образов и контейнеров, а именно SWAG и Duck DNS. Вот содержание docker-compose.yml для этого:
version: '3.3'
services:
duckdns:
image: ghcr.io/linuxserver/duckdns
container_name: duckdns
environment:
- PUID=1000 #optional
- PGID=1000 #optional
- TZ=Europe/Samara
- SUBDOMAINS=вашдомен.duckdns.org
- TOKEN=48ghygghff-chhb-4hy4-8ys4-a6dfgggfgh5f
- LOG_FILE=false #optional
volumes:
- ./config:/config #optional
restart: unless-stopped
swag:
image: linuxserver/swag
container_name: swag
cap_add:
- NET_ADMIN
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Samara
- URL=вашдомен.duckdns.org
- VALIDATION=http
- EMAIL=mail@mail.ru #optional
- EXTRA_DOMAINS=вашдомен.duckdns.org
volumes:
- ./config:/config
ports:
- 443:443
- 80:80 #optional
restart: unless-stopped
ВАЖНО СОБЛЮДАТЬ ТАБУЛЯЦИЮ (ОТСТУПЫ)!!! (при копировании текста в ваш docker-compose.yml)
TOKEN, DOMAIN (duckdns) …. — выделенные жирным, укажите естественно свои!
Итак, создаём файл docker-compose.yml в удобном для вас месте и удобным для вас способом. Я покажу пример для Ubuntu 20.04 на VPS Oracle, где у меня стоит тестовая Home Аssistant Supervised (конечно же это полная аналогия и для других вариантов).
Создам его по пути /home/ubuntu
# echo "version: '3.3'
services:" >/home/ubuntu/docker-compose.yml
Вы можете командой echo сразу отправить весь текст (содержание файла выше), либо открыть файл после создания командой nano, вставить содержимое:
# sudo nano /home/ubuntu/docker-compose.yml
После этого сохраняем и закрываем файл, нажав CTRL + X, Y, а затем ENTER.
Либо, всё то же самое можно сделать через WinSCP
Для создания и редактирования таких файлов рекомендую использовать Notepad++ вместо «блокнота»:
После создания и сохранения файла, переходим в терминале в папку, где у нас лежит docker-compose.yml командой # cd (в Ubuntu 20.04 на VPS Oracle мы по умолчанию находимся в ней) и запускаем контейнеры:
# docker-compose up -d
Если будет ошибка: «docker.errors.DockerException: Error while fetching server API version: (‘Connection aborted.’, PermissionError(13, ‘Permission denied’))«, то возможно вы просто забыли добавить «своего пользователя» в группу докеров на этом этапе.
# sudo usermod -aG docker $USER
# newgrp docker
Если вы ставили Ubuntu 20.04 на бесплатный VPS сервер от Oracle, то необходимо открыть порт 80 и 443 в Oracle. Как это сделать написано в конце этого поста.
Для «домашней» Ubuntu или Debian на сервере или десктопе тоже нужно открыть порты 80 и 443 для Let’s Encrypt, пробросив их на вашу машину в роутере (см. инструкцию к нему)
Проверяем в Portainer, что контейнеры Let’s Encrypt (SWAG) и Duck DNS успешно запустились:
Осталось настроить Nginx (Добавить HTTPS в Home Assistant)
Сейчас ваш Home Assistant всё ещё открывается по адресу HTTP://вашдомен.duckdns.org:8123 нам же нужен HTTPS (HTTPS://вашдомен.duckdns.org) :-)))
Открываем (для редактирования, удобным вам способом) файл с настройками Nginx — default.
(В папке, где у вас был файл docker-compose.yml — появилась папка config)
В моём примере файл default расположен по пути /home/ubuntu/config/nginx/site-confs
# sudo nano /home/ubuntu/config/nginx/site-confs/default
ALT+T — очищаем всё его содержимое файла default, и вставляем следующее:
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name вашдомен.duckdns.org;
include /config/nginx/ssl.conf;
client_max_body_size 0;
# enable for ldap auth, fill in ldap details in ldap.conf
#include /config/nginx/ldap.conf;
# enable for Authelia
#include /config/nginx/authelia-server.conf;
location / {
proxy_pass http://10.0.0.42:8123;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /api/websocket {
proxy_pass http://10.0.0.42:8123/api/websocket;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
После этого сохраняем и закрываем файл, нажав CTRL + X, Y, а затем ENTER.
СОБЛЮДАЕМ ТАБУЛЯЦИЮ (ОТСТУПЫ)! Если при копировании в ваш файл default их не будет — поставьте пробелы в файле вручную (как на фото ниже).
вашдомен.duckdns.org и http://10.0.0.2:8123 …. — выделенные жирным, укажите естественно свои!
В строке proxy_pass — указываете локальный адрес вашей машины или в случае с VPS Oracle — «Private IP Address»:
После этого в Portainer и перезапускаем контейнер letsencrypt (swag):
Теперь заходим по адресу HTTPS://yourdomain.duckdns.org и входим в Home Assistant со своими учётными данными:
Ф С Ё ! ! ! Цель достигнута 🙂
В итоге вы имеете не только удалённый доступ к своему Home Assistant через «шифрованные транспортные механизмы SSL», но и можете настроить, например управление колонками с Алисой из Home Assistant… и/или добавить ваши умные устройства из Home Assistant в умный дом Яндекса и управлять ими с любого устройства с Алисой, в том числе с колонок….