Добавим HTTPS в Home Assistant (SSL) — установим SWAG и Duck DNS в Docker, настроим веб-сервер Nginx

В этой статье расскажу как добавить HTTPS в Home Assistant с автоматическим обновлением бесплатных сертификатов SSL
Добавим HTTPS в Home Assistant (SSL) - установим SWAG и Duck DNS в Docker, настроим веб-сервер Nginx

Для реализации 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:

Добавим HTTPS (SSL) в Home Assistant - установим Let's Encrypt и Duck DNS в Docker, настроим веб-сервер Nginx Умный дом, Home Assistant, Докер, Https, Nginx, DNS, Длиннопост

Однако мы рассмотрим универсальную инструкцию (не зависящую от версии 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-адресу  вашего сервера.

Duck DNS в Docker

Далее будем использовать 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 …. — выделенные жирным, укажите естественно свои!

Добавим HTTPS (SSL) в Home Assistant - установим Let's Encrypt и Duck DNS в Docker, настроим веб-сервер Nginx Умный дом, Home Assistant, Докер, Https, Nginx, DNS, Длиннопост

В строке proxy_pass — указываете локальный адрес вашей машины или в случае с VPS Oracle — «Private IP Address»:

После этого в Portainer и перезапускаем контейнер letsencrypt (swag):

Теперь заходим по адресу HTTPS://yourdomain.duckdns.org и входим в Home Assistant со своими учётными данными:

Добавим HTTPS (SSL) в Home Assistant - установим Let's Encrypt и Duck DNS в Docker, настроим веб-сервер Nginx Умный дом, Home Assistant, Докер, Https, Nginx, DNS, Длиннопост

Ф С Ё ! ! ! Цель достигнута 🙂

В итоге вы имеете не только удалённый доступ к своему Home Assistant через «шифрованные транспортные механизмы SSL», но и можете настроить, например  управление колонками с Алисой из Home Assistant… и/или  добавить ваши умные устройства из Home Assistant в умный дом Яндекса и управлять ими с любого устройства с Алисой, в том числе с колонок….

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх