Привет Пикабу!
В этом посте расскажу как добавить HTTPS (SSL) в Home Assistant.
А для этого установим Let's Encrypt и Duck DNS в Docker, настроим веб-сервер Nginx.
Здесь была "подготовительная часть" - "Установка Docker, Docker Compose и Portainer"
Вы это легко можете сделать с помощью аддонов, если у вас версия Home Assistant Supervised или Home Assistant OS:
Мы же рассмотрим универсальную инструкцию (не зависящую от версии Home Assistant) с установкой Let's Encrypt Duck DNS и Nginx в в Docker, которая одинаково подходит для обоих вариантов, рассмотренных мной ранее: - Home Assistant Supervised и Home Assistant Core.
Рассматриваемый вариант вполне подходит для 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 для создания и запуска своих образов и контейнеров, а именно Let's Encrypt и 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=89eJKhnby678nknt6NGHfghffe823
- LOG_FILE=false #optional
volumes:
- ./config:/config #optional
restart: unless-stopped
letsencrypt:
image: linuxserver/swag
container_name: letsencrypt
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 с Пикабу отступов не будет - поставьте по 2 и 4 пробела в файле вручную (как на фото ниже).
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 и Duck DNS успешно запустились:
Осталось настроить Nginx.
Сейчас ваш 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;
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:
Теперь заходим по адресу HTTPS://yourdomain.duckdns.org и входим в Home Assistant со своими учётными данными:
В С Ё!!! Цель достигнута ;-)
Теперь вы имеете не только удалённый доступ к своему Home Assistant через "шифрованные транспортные механизмы SSL", но и можете настроить, например управление колонками с Алисой из Home Assistant... и/или добавить ваши умные устройства из Home Assistant в умный дом Яндекса и управлять ими с любого устройства с Алисой, в том числе с колонок....
Всем пока и "Бобра"! ;-)