July 5

Home Assistant Container вместо Supervised на любой машине.

Я как-то не сразу отловил новость про отказ сообщества от версии Supervised, которая перестанет получать обновления 12/2025 … вот так и все. Теперь только 2 версии:

Я выбрал в качестве основы Orange Pi для себя и клиентов - оптимальная цена и мощное железо, по сравнению с raspberry pi. Небольшие манипуляции и Home assistant с аддонами уже стоит на любом debian. Да были проблемы со сторонними контейнерами, когда я ставил frigate как отдельный контейнер так как мне нужен был полный доступ на Orange Pi 5 Plus. Да HA ругался на это, но продолжал работать.

Вот разрабы и решили что либо полностью сам, либо через OS. А я то уже затарил orange pi)))) Операционную систему можно установить на х86 пк или на Rapberry Pi и наверное я в дальнешейм так и буду делать на заказ.

Для себя решил поднять в контейнерах и максимально приблизить к удобству использования Supervised.

По опыту установки Supervised и Container на слабое железо JetHome D1 могу сказать что контейнер намного меньше ресурсов съедает. Спойлер - при Supervised мой JetHome D1 даже работать не мог, уходил в запой. На контейнере все шустро и отлично работает, при то что все установки аналогичные - но не через аддоны конечно. Вот тут подробнее про мучения

C Dockge вообще установка контейнеров простая, как и обновление. По обновлениям - да в Supervised приходит сообщение, что можно обновиться для самого HA так и для контейнеров. У меня для этого будет проверка версий и при необходимости можно обновить. Если смотреть реально - то ручное обновление то что мне нужно для клиентов. Я поставил и проверил что все работает, после я могу быть уверен что случайно не обновится какой-то элемент Home assistant или аддон который может сломать все - а такое уже бывало. Скажем честно, как часто нам нужно обновлять систему? Только когда планируем новую интеграцию или оборудование, что просиходит не так часто.

Supervised и OS ещё отвечают за так называемый ингресс контейнеров - простыми словами, когда заходим в Home assistant и переходим на аддоны сам HA перенаправляет нас на нужный. Особенно важно когда мы заходим по внешней ссылке с httpS и внутри сети спокойно смотрим аддоны. В контейнерной версии я долго бился найти оптимальный подход что бы все работало по внешней ссылке и не было проблем со смешанным контентом - для обеспечения безопасности и решения проблем смешанного контента использую Nginx Proxy Manager. Хотя его не особо хвалят, он справляется со своей задачей. Я также пробовал Traefik, который сейчас активно пиарят, но с ним нужно очень сильно разбираться.

В OS/Supervised уже продумали все про бекапы, которые в случае проблемы восстановит и аддоны. В контейнере все иначе, тут уже самому нужно следить за бекапами. Я настроил отдельную папку под конфигурации и бекап через Duplicati. Все сохраняется на sd карту и в случае чего можно все восстановить достаточно быстро.

Все элементы если их правильно собрать по папкам - можно посмотреть через VS Code

Что понадобится:

  • Система на Linux с работающим Docker. Я попробовал как на версиях с ядром 5, так и с ядром 6 линукса - разница никакой, в этом преимущество контейнеров. Не надо править никакие текстовые файлы в самом дебин или app armor что бы Home Assistant не ругался.
  • Аккаунт Google (обязательно).

Железо для сервера

НО! Можно взять и мощнее для frigate

  • Orange pi 3b 8gb - на мой взгляд самое удачное по критерию цена-качество. Возможность подключить ssd и запас в 8 гб памяти
Купить на Orange pi 3b 8gb Алиэкспресс или Яндекс Маркет
  • 128 gb NVMe 2280 - холивар про sd карты под умный дом идут давно, мол могут подохнуть под сервером. Поэтому на всякий случай недорогой ставлю ssd.
Купить KingSpec 128 GB на Алиэкспресс или M.2 SSD Smartbuy 128GB 2280 на Яндекс маркете
  • Металлический корпус с вентилятором для orange pi. Ранее использовал прозрачный бокс в который еле влезла плата (одну стенку так и не поставил), да и неудобно собирать. Такой использовал на Orange pi 3 и отлично работает (там ещё без вентилятора был).
Купить Металлический корпус Алиэкспресс https://aliclick.shop/r/c/1snpu97iu16evjh2?erid=2SDnjcpi6Tu
  • Sonoff ZBDongle-E проверенный временем для Zigbee устройств. Его надо прошить на новую прошивку и в путь.
Купить на Sonoff ZBDongle-E На ЯМ https://ya.cc/m/6kqThj?erid=5jtCeReNx12oajvEZBXrWX9
Али https://aliclick.shop/r/c/1svuoy2ccjzq7ldp?erid=2SDnjdA6vfX
  • Удлинитель для стика usb. Важно отодвинуть от сервера и роутера сам Zigbee стик, так как могут быть помехи.
  • Ethernet кабель. Тут все понятно, связь только по кабелю с роутером.
  • Питание по usb-c . Забыл добавить на фото, нужен кабель питания.

Финальная согласованная структура директорий на Orange Pi 3B

Все контейнеры распределены на две папки: одна для установочных файлов (compose) и другая для системных файлов. Это необходимо для удобства резервного копирования.

На Orange Pi будут две основные корневые директории для всех Docker-стеков и их данных:

/opt/dockge/: Директория для установки Dockge.

Внутри неё, по пути /opt/dockge/data/stacks/, будут храниться только файлы compose.yaml для каждого твоего Docker-стека.

Пример структуры:

/opt/dockge/
├── data/
│   └── stacks/
│       ├── nginx-proxy-manager/
│       │   └── compose.yaml  # Стек для Nginx Proxy Manager (NPM)
│       ├── home-automation/
│       │   └── compose.yaml  # Стек для Home Assistant, Mosquitto, Zigbee2MQTT
│       ├── esphome/
│       │   └── compose.yaml  # Стек для ESPHome (компилятора)
│       ├── esphome-editor/
│       │   └── compose.yaml  # Стек для ESPHome Editor (веб-интерфейса)
│       ├── code-server/
│       │   └── compose.yaml  # Стек для Code-Server
│       └── matter-server/
│           └── compose.yaml  # Стек для Matter Server
└── ... # Другие служебные файлы Dockge

/udobnidom/: Центральная, специально созданная директория для всех постоянных данных, конфигураций и логов всех твоих Docker-контейнеров.

Каждый сервис будет иметь свою поддиректорию или набор поддиректорий внутри /udobnidom/ для хранения своих данных.

Пример структуры:

/udobnidom/
├── nginx-proxy-manager/    # Центральная директория для данных и конфигов сервисов
│   ├── data/               # Данные и база данных NPM
│   └── letsencrypt/        # Сертификаты Let's Encrypt
├── homeassistant/
│   └── config/             # Основные конфигурации Home Assistant
├── mosquitto/
│   ├── config/             # Файлы конфигурации Mosquitto
│   ├── data/               # Постоянные данные Mosquitto
│   └── logs/               # Логи Mosquitto
├── zigbee2mqtt/
│   └── data/               # Данные Zigbee2MQTT
├── esphome/
│   └── config/             # Данные для ESPHome (компилятора)
├── esphome-editor/
│   └── data/               # Данные для ESPHome Editor (веб-интерфейса)
├── duplicati/
│   ├── config/
│   └── backup/
├── code-server/
│   └── data/
└── matter-server/
    └── data/

Примечание: Данные ESPHome и ESPHome Editor разделены на /udobnidom/esphome/config и /udobnidom/esphome-editor/data для четкого разделения их постоянных файлов.

Установка

С контейнерами возможности использования Home Assistant сильно расширяются; теперь совершенно всё равно, какая операционная система, главное, чтобы там работал Docker. Я выбрал официальный образ с Debian, так как привык к этой системе, а на официальном образе установлены все драйверы для Orange Pi.

Установка будет с чистого листа, так как мне нужно было подготовить сервер для других. Свой сервер на Orange Pi 5 Plus буду переносить в свободное время, но принцип не поменяется.

Могу сказать что такой метод установки сработает на любом оборудовании и операционной системе где есть Docker.

Часть 1: Подготовка Orange Pi и установка Docker

Обязательно присваиваим на роутере фиксированный ip для сервера - важно, так как вся настройка будет привязана к этому адресу.

1. Базовая настройка системы и удаление старого Docker:

Сначала подключимся к Orange Pi и выполним необходимые подготовительные действия.

Подключись к Orange Pi по SSH:

Открой терминал на своем компьютере и используй команду:

ssh root@<IP_OrangePi>

Замени <IP_OrangePi> на фактический IP-адрес твоей Orange Pi в локальной сети. Пароль по умолчанию для root обычно orangepi .

Настрой часовой пояс:

Установи правильный часовой пояс, чтобы логи и расписания работали корректно.

dpkg-reconfigure tzdata

Следуй инструкциям на экране. Тебе нужно будет выбрать Europe, а затем Moscow (или другой подходящий для тебя часовой пояс).

Включи Bluetooth (опционально, если планируешь использовать):

Если тебе понадобится Bluetooth для каких-либо устройств, активируй его с помощью утилиты orangepi-config.

sudo apt install -y orangepi-config
sudo orangepi-config

В открывшемся меню orangepi-config перейди в Wireless (Беспроводные настройки), затем выбери BT install (Установка Bluetooth) и убедись, что Bluetooth включен. После этого можешь выйти из утилиты.

Удаление старого Docker и очистка:

Мы удаляем старую версию Docker и очищаем связанные файлы, чтобы избежать конфликтов и ошибок при установке новой версии. Иногда при попытке обновления Debian с установленным Docker могут возникать ошибки, связанные с изменением версий репозиториев или некорректным размером файлов, как, например, N: Repository 'http://repo.huaweicloud.com/debian bookworm InRelease' changed its 'Version' value from '12.8' to '12.11'. Полная очистка гарантирует чистую установку.

Удали файл списка источников Docker (если он существует):

sudo rm -f /etc/apt/sources.list.d/docker.list

Удали пакеты Docker:

sudo apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin -y

Очисти кеш пакетов:

sudo apt clean

После того как выполнишь эти команды без ошибок, сообщи мне. Мы продолжим с обновлением системы и установкой новой версии Docker.

2. Обновление системы и установка Docker CE:

Теперь, когда всё очищено, обновим систему и установим Docker.

Выполни полное обновление системы:

sudo apt update && sudo apt upgrade -y

Эта команда сначала обновит списки пакетов, а затем установит все доступные обновления.

Установи Docker CE и Docker Compose Plugin:

Сначала установи необходимые пакеты, которые помогут Docker работать.

sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release udisks2 -y

Затем добавь GPG-ключ Docker и репозиторий, чтобы система знала, откуда скачивать пакеты Docker.

# Добавление GPG-ключа (пример для Debian, может потребоваться обновление URL)
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL <https://download.docker.com/linux/debian/gpg> | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Добавление репозитория Docker
echo \\
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] <https://download.docker.com/linux/debian> \\
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

После этого установи сам Docker CE и Docker Compose Plugin:

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

Проверь установку Docker:

Убедись, что Docker установлен и работает корректно.

sudo docker run hello-world

Если всё в порядке, ты увидишь сообщение "Hello from Docker!".

Делаем перезагрузку через sudo reboot

Часть 2: Организация директорий, настройка сети и установка Code-Server на хост

Эта часть описывает подготовку твоей файловой системы, Docker-сети и установку Code-Server непосредственно на Orange Pi, чтобы ты имел прямой доступ ко всем файлам системы и не "возился с папками". Code-Server очень поможет на всех этапах, да и в дальнейшем, так как никто не отменял копаться в конфиге Home Assistant.

1. Создание центральной директории /udobnidom/ и её подпапок:

Нам нужно создать основную директорию /udobnidom/, где будут храниться все данные твоих сервисов, а также поддиректории для каждого конкретного сервиса. Это обеспечит порядок и удобство управления данными.

Создай все необходимые поддиректории одной командой:

sudo mkdir -p /udobnidom/{nginx-proxy-manager/data,nginx-proxy-manager/letsencrypt,homeassistant/config,mosquitto/{config,data,logs},zigbee2mqtt/data,esphome/config,esphome-editor/data,duplicati/{config,backup},matter-server/data}

Примечание: директория code-server/data теперь не нужна в /udobnidom/, так как Code-Server будет установлен напрямую на хост и будет использовать свои системные папки и /root/.config/code-server/ для конфигурации.

Настрой права доступа для /udobnidom/:

Убедись, что твой текущий пользователь (или root, если ты продолжаешь работать под ним) имеет полные права на эти директории.

sudo chown -R $(whoami):$(whoami) /udobnidom/

(Если ты работаешь под root, $(whoami) вернет root, и команда будет sudo chown -R root:root /udobnidom/.)

2. Создание общей Docker-сети (homeiot_internal):

Эта сеть позволит некоторым твоим Docker-контейнерам (например, Mosquitto и Zigbee2MQTT) общаться друг с другом по имени сервиса, что очень удобно. Речь идет про контейнеры, которые не устанавливаются как host.

Создай эту сеть командой:

docker network create homeiot_internal

3. Установка и настройка Code-Server на хосте:

Мы установим Code-Server напрямую на твою Orange Pi. Это обеспечит тебе самый прямой доступ ко всем файлам системы.

3.1 Скачивание и установка Code-Server:

Используй официальный скрипт установки Code-Server. Он автоматически установит необходимые зависимости и сам Code-Server.

curl -fsSL <https://code-server.dev/install.sh> | sh

По умолчанию code-server будет установлен в \\$HOME/.local/bin и добавится в PATH.

3.2 Настройка автозапуска через systemd:

Мы создадим системный сервис, чтобы Code-Server запускался автоматически и работал как фоновая служба.

Создай файл сервиса systemd:

sudo tee /etc/systemd/system/code-server@.service > /dev/null << 'EOF'
[Unit]
Description=code-server for %i
After=network.target

[Service]
Type=simple
User=%i
Group=%i
WorkingDirectory=/root
ExecStart=/usr/bin/code-server #
Restart=always

[Install]
WantedBy=multi-user.target
EOF

3.3 Настройка Code-Server (установка пароля и порта):

Теперь мы настроим Code-Server, чтобы он слушал на порту 9091 и требовал пароль для входа.

Запусти Code-Server один раз, чтобы он создал конфигурационные файлы:

sudo systemctl start code-server@root

Подожди несколько секунд, чтобы Code-Server успел создать необходимые каталоги и файл config.yaml.

Останови службу Code-Server:

sudo systemctl stop code-server@root

Это нужно, чтобы мы могли безопасно отредактировать конфигурационный файл.

Открой файл конфигурации Code-Server:

sudo nano /root/.config/code-server/config.yaml

Теперь этот файл должен существовать.

Добавь или измени следующие строки в файле config.yaml:

bind-addr: 0.0.0.0:9091 # Указываем Code-Server слушать на всех IP по порту 9091
auth: password # Включаем аутентификацию по паролю
password: YourVeryStrongAndSecretPassword # ОБЯЗАТЕЛЬНО ЗАМЕНИ НА СВОЙ СЛОЖНЫЙ ПАРОЛЬ!

Важно: Убедись, что ты заменил YourVeryStrongAndSecretPassword на свой уникальный и надежный пароль!

  • Также, если в файле уже есть строка cert: true, измени её на cert: false для первоначальной простой установки по http.

Сохрани изменения (нажми Ctrl+O, затем Enter) и выйди из редактора (Ctrl+X).

3.4 Активация и запуск сервиса Code-Server:

После того как мы настроили systemd сервис и файл конфигурации, запустим Code-Server.

sudo systemctl daemon-reload 
sudo systemctl start code-server@root
sudo systemctl restart code-server@root
sudo systemctl enable code-server@root
sudo systemctl status code-server@root

3.5 Проверка доступа к Code-Server:

Теперь ты можешь попробовать зайти в Code-Server через веб-браузер.

Открой веб-браузер на своем компьютере.

Введи IP-адрес твоей Orange Pi и порт 9091:

http://<IP_OrangePi>:9091

Например, если IP твоей Orange Pi 192.168.2.38, то адрес будет http://192.168.2.38:9091.

Введи пароль, который ты указал в файле config.yaml.

После входа ты должен увидеть интерфейс Code-Server со всей файловой системой твоей Orange Pi, доступной напрямую в левой панели "Explorer". Нужно открыть папку и выбрать / и подтвердить. Теперь доступны все файлы системы.

Мы можем видеть наши созданные папки.

Часть 3: Установка и настройка Dockge

В этой части мы установим и запустим Dockge. Можно использовать Portainer, но он слишком навороченный для наших задач. Поэтому используем Dockge. Либо можно использовать Arcane, но он в пререлизной версии.

1. Установка Dockge:

Убедись, что директории Dockge созданы:

sudo mkdir -p /opt/dockge/data/stacks

Эта команда создаст необходимые папки для хранения данных Dockge и файлов compose.yaml твоих стеков.

Создай файл compose.yaml для Dockge:

Открой или создай файл /opt/dockge/compose.yaml с помощью текстового редактора nano:

sudo nano /opt/dockge/compose.yaml

Вставь в него следующее содержимое:

version: '3.8'
services:
  dockge:
    image: louislam/dockge:latest
    restart: unless-stopped
    ports:
      - 5001:5001 # Порт для доступа к веб-интерфейсу Dockge
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock # Для доступа Dockge к Docker API
      - /opt/dockge/data:/app/data # Данные Dockge (файлы compose.yaml и т.д.)
      - /opt/dockge/data/stacks:/opt/stacks # Путь к твоим стекам

Пояснение:

  • ports: 5001:5001 пробрасывает порт 5001 контейнера на порт 5001 твоего хоста (Orange Pi).
  • volumes: - /var/run/docker.sock:/var/run/docker.sock это очень важная строка, она позволяет Dockge взаимодействовать с твоим Docker демоном на хосте.
  • volumes: - /opt/dockge/data:/app/data — привязывает созданную ранее папку для данных Dockge.
  • volumes: - /opt/dockge/data/stacks:/opt/stacks — указывает Dockge, где искать твои compose.yaml файлы.

Сохрани изменения (нажми Ctrl+O, затем Enter) и выйди из редактора (Ctrl+X).

Запусти Dockge:

Перейди в директорию Dockge и запусти его:

cd /opt/dockge
docker compose up -d

Эта команда запустит контейнер Dockge в фоновом режиме.

2. Доступ к Dockge:

Перейди в браузере по адресу:

http://<IP_OrangePi>:5001

Замени <IP_OrangePi> на фактический IP-адрес твоей Orange Pi (например, http://192.168.2.38:5001).

Ты увидишь веб-интерфейс Dockge. При первом запуске тебе будет предложено создать учетную запись администратора. Создай надежный логин и пароль.

Часть 4: Развертывание остальных сервисов с помощью Dockge

Мы будем развертывать сервисы по очереди, создавая для каждого свой стек Docker Compose в Dockge.

Развертывание Nginx Proxy Manager (NPM):

Nginx Proxy Manager позволит тебе легко управлять доступом к твоим сервисам извне, используя доменные имена и SSL-сертификаты.

Создай новый стек в Dockge:

Открой веб-интерфейс Dockge (http://<IP_OrangePi>:5001).

В верхнем меню (или по навигационной цепочке) найди раздел "Stacks".

Нажми кнопку "New Stack" (Новый стек).

Назови стек и укажи директорию:

В поле "Stack Name" (Имя стека) введи nginx-proxy-manager.

Dockge автоматически создаст папку для стека с этим именем (/opt/dockge/data/stacks/nginx-proxy-manager/) на твоей Orange Pi.

Цель: убедиться, что путь к файлу compose.yaml в итоге будет выглядеть как /opt/dockge/data/stacks/nginx-proxy-manager/compose.yaml на хосте.

Нажми "Create" (Создать).

Вставь содержимое compose.yaml:

В большое текстовое поле, которое появится, вставь следующий код compose.yaml:

version: '3.8'
services:
  app:
    image: jc21/nginx-proxy-manager:latest
    container_name: nginx-proxy-manager
    restart: unless-stopped
    ports:
      - '80:80'   # HTTP-трафик
      - '81:81'   # Веб-интерфейс NPM
      - '443:443' # HTTPS-трафик
    volumes:
      - /udobnidom/nginx-proxy-manager/data:/data
      - /udobnidom/nginx-proxy-manager/letsencrypt:/etc/letsencrypt
    networks:
      - homeiot_internal
networks:
  homeiot_internal:
    external: true

Пояснение:

  • image: jc21/nginx-proxy-manager:latest — указывает на официальный образ NPM.
  • ports: — пробрасывает необходимые порты для веб-трафика и интерфейса NPM.
  • volumes: — монтирует папки, которые мы создали в /udobnidom/ для постоянного хранения данных и сертификатов NPM.
  • networks: - homeiot_internal — подключает NPM к нашей общей сети Docker, которую мы создали ранее.
  • external: true под networks: homeiot_internal: — говорит Docker, что эта сеть уже существует и её не нужно создавать заново.

Сохрани и разверни стек:

Нажми кнопку "Save" (Сохранить) в Dockge.

Затем нажми кнопку "Up" (Вверх), чтобы развернуть и запустить контейнер.

Первичная настройка Nginx Proxy Manager:

После запуска NPM, тебе нужно будет зайти в его веб-интерфейс, чтобы настроить аккаунт.

Открой веб-интерфейс Nginx Proxy Manager:

В браузере перейди по адресу:

http://<IP_OrangePi>:81

Например, http://192.168.2.38:81.

Зарегистрируй аккаунт:

Ты увидишь страницу входа. Используй данные администратора по умолчанию:

  • Email: admin@example.com
  • Password: changeme

После входа тебе будет предложено сменить Email и пароль. Обязательно смени их на свои надежные данные.

3. Настройка доменного имени (DuckDNS) и SSL-сертификатов через Nginx Proxy Manager:

Для безопасного доступа к твоим сервисам из интернета по доменным именам, нам потребуется:

Получить доменное имя (мы будем использовать бесплатный сервис DuckDNS).

Создать SSL-сертификаты (Let's Encrypt) через NPM.

Настроить "Proxy Hosts" в NPM для каждого сервиса.

3.1 Получение доменного имени через DuckDNS:

Создай аккаунт на DuckDNS:

Открой браузер и перейди на сайт DuckDNS.

Войди, используя одну из предложенных учетных записей (Google, GitHub, Twitter).

Создай свой домен:

После входа, в поле "Domain" введи желаемое имя (например, мойумныйдом).

Выбери один из доступных доменов (например, duckdns.org), так что твой полный домен будет мойумныйдом.duckdns.org.

Нажми "add domain".

Обязательно поставь свой локальный IP и нажми UPDATE

Сохрани токен:

На главной странице DuckDNS ты увидишь свой домен и длинную строку под ним, озаглавленную "token". Скопируй этот токен и сохрани его в надежном месте. Он понадобится для NPM.

3.2 Создание SSL-сертификата в Nginx Proxy Manager:

Теперь, когда у тебя есть домен и токен DuckDNS, мы используем его для получения SSL-сертификата.

Зайди в веб-интерфейс Nginx Proxy Manager (http://<IP_OrangePi>:81).

Перейди в "SSL Certificates":

В верхнем меню (или по навигационной цепочке) выбери "SSL Certificates".

Нажми кнопку "Add SSL Certificate" (Добавить SSL-сертификат), затем выбери "Let's Encrypt".

Заполни поля для сертификата:

  • Domain Names: Введи свой новый домен DuckDNS (например, мойумныйдом.duckdns.org). Обязательно добавь еще одну . запись: .мойумныйдом.duckdns.org (со звездочкой перед доменным именем). Это позволит тебе создавать поддомены для каждого сервиса (например, dockge.мойумныйдом.duckdns.org, ha.мойумныйдом.duckdns.org) и использовать один сертификат для всех.
  • Email Address: Введи свой действующий адрес электронной почты.
  • Use a DNS Challenge: Поставь галочку.
  • DNS Provider: Выбери DuckDNS.
  • Credentials File Content: Сюда вставь токен DuckDNS, который ты скопировал ранее.
  • Поставь галочку "I Agree to the Let's Encrypt Terms of Service".
  • Нажми "Save" (Сохранить).

NPM свяжется с Let's Encrypt через DuckDNS, чтобы получить твой сертификат. Это может занять несколько минут. Дождись, пока статус сертификата станет "Active".

Если возникла ошибка

Просто ставим задержку в 30 секунд и жмем ОК снова.

3.3 Создание Proxy Hosts для каждого сервиса:

Proxy Host в Nginx Proxy Manager — это правило, которое связывает твое доменное имя (например, dockge.мойумныйдом.duckdns.org) с внутренним IP-адресом и портом твоего сервиса на Orange Pi.

Мы создадим Proxy Host для Dockge в качестве примера, а затем ты будешь следовать той же логике для других сервисов.

Перейди в "Proxy Hosts":

В верхнем меню (или по навигационной цепочке) выбери "Proxy Hosts".

Нажми кнопку "Add Proxy Host" (Добавить Proxy Host).

Настрой Proxy Host для Dockge:

  • Details (Вкладка "Детали"):
    • Domain Names: Введи поддомен для Dockge (например, dockge.мойумныйдом.duckdns.org).
    • Scheme: Выбери http.
    • Forward Hostname / IP: Введи IP-адрес твоей Orange Pi (например, 192.168.2.38).
    • Forward Port: Введи порт Dockge, который мы настроили (5001).
    • Cache Assets: Оставь выключенным.
    • Block Common Exploits: Можешь включить для дополнительной безопасности.
    • Websockets Support: Оставь выключенным (для Dockge это не нужно, но для некоторых других сервисов, таких как Home Assistant и Code-Server, это будет очень важно).
  • SSL (Вкладка "SSL"):
    • SSL Certificate: Выбери свой новый сертификат (тот, что ты только что создал для мойумныйдом.duckdns.org).
    • Force SSL: Включи (это автоматически перенаправит весь HTTP трафик на HTTPS).
    • HSTS Enabled: Можешь включить.
  • Advanced (Вкладка "Расширенные"): Здесь пока ничего не трогай. Мы вернемся сюда для некоторых сервисов.
  • Нажми "Save" (Сохранить).

Теперь ты должен смочь получить доступ к своему Dockge по доменному имени (например, https://dockge.мойумныйдом.duckdns.org/). Так нужно будет делать со всеми сервисами, которые мы устанавливаем и где хотим иметь доступ из Home Assistant. Без этого при заходе по внешней ссылке и попытке провалиться в контейнеры мы будем получать ошибку смешанного контента.

Все сертификаты нормально работают.

Развертывание и настройка Mosquitto (MQTT-брокер):

Mosquitto будет служить центральным хабом для всех MQTT-сообщений. Он же и нужен для работы с Zigbee-устройствами через Zigbee2MQTT.

Создай необходимые директории на Orange Pi:

Подключись по SSH к твоей Orange Pi.

Убедись, что директории для Mosquitto существуют:

sudo mkdir -p /udobnidom/mosquitto/config /udobnidom/mosquitto/data /udobnidom/mosquitto/logs

Создай и настрой файл mosquitto.conf на Orange Pi (ДО запуска контейнера):

Открой файл mosquitto.conf для редактирования (он может быть пустым или не существовать):

sudo nano /udobnidom/mosquitto/config/mosquitto.conf

Вставь в него следующее содержимое:

persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
allow_anonymous true #<---Разрешает анонимный доступ
listener 1883
protocol mqtt
listener 9001
protocol websockets
  • Пояснение: allow_anonymous true означает, что для подключения к MQTT брокеру не потребуется логин и пароль.
  • Сохрани изменения (нажми Ctrl+O, затем Enter) и выйди из редактора (Ctrl+X).

Создай новый стек "mosquitto" в Dockge:

Зайди в веб-интерфейс Dockge (http://<IP_OrangePi>:5001).

В верхнем меню (или по навигационной цепочке) найди раздел "Stacks".

Нажми кнопку "New Stack" (Новый стек).

Stack Name: mosquitto

Нажми "Create".

Вставь содержимое compose.yaml для Mosquitto:

version: '3.8'
services:
  mosquitto:
    container_name: mosquitto
    image: eclipse-mosquitto:latest
    volumes:
      - /udobnidom/mosquitto/config:/mosquitto/config
      - /udobnidom/mosquitto/data:/mosquitto/data
      - /udobnidom/mosquitto/logs:/mosquitto/log
    ports:
      - '1883:1883' # Стандартный порт MQTT
      - '9001:9001' # Порт для Websockets
    restart: unless-stopped
    networks:
      - homeiot_internal
networks:
  homeiot_internal:
    external: true

Сохрани и разверни стек:

Нажми кнопку "Save" (Сохранить) в Dockge.

Затем нажми кнопку "Up" (Вверх), чтобы развернуть и запустить контейнер.

Дождись, пока контейнер mosquitto запустится и станет зеленым. Так как файл конфигурации уже создан, он будет использовать его с первого запуска.

Развертывание и настройка Zigbee2MQTT:

Zigbee2MQTT будет преобразовывать сообщения от твоих Zigbee-устройств в формат MQTT и отправлять их в Mosquitto, делая их доступными для Home Assistant.

Подключи Zigbee-стик к Orange Pi и узнай его путь:

Важно: Прежде чем продолжить, подключи твой Zigbee-стик (например, Sonoff Zigbee 3.0 USB Dongle Plus или аналогичный Ember-адаптер) к USB-порту твоей Orange Pi.

Чтобы узнать путь к твоему Zigbee-стику, подключись по SSH к Orange Pi и выполни команду:

ls -l /dev/serial/by-id/

Ты увидишь что-то вроде:

lrwxrwxrwx ... usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_...-if00-port0 -> ../../ttyUSB0

Рекомендация: Для максимальной стабильности рекомендуется использовать полный путь /dev/serial/by-id/... (например, /dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_xxxxxxxxxxxx-if00-port0), так как /dev/ttyUSB0 может измениться после перезагрузки. Однако, если ты уверен, что /dev/ttyUSB0 всегда будет твоим стиком, можешь использовать его. В этой инструкции мы будем использовать /dev/ttyUSB0, как ты указал в своей конфигурации.

Запомни или запиши этот путь (например, /dev/ttyUSB0), он понадобится тебе в файлах конфигурации.

Создай необходимые директории на Orange Pi:

Подключись по SSH к твоей Orange Pi.

Убедись, что директории для Zigbee2MQTT существуют:

cd
sudo mkdir -p /udobnidom/zigbee2mqtt/data

Создай и настрой файл configuration.yaml для Zigbee2MQTT (ДО запуска контейнера):

Открой файл configuration.yaml для редактирования:

sudo nano /udobnidom/zigbee2mqtt/data/configuration.yaml

Вставь в него следующее содержимое.

# Home Assistant integration
homeassistant:
  enabled: true # Включает автообнаружение устройств в Home Assistant через MQTT

# MQTT settings
mqtt:
  server: 'mqtt://mosquitto:1883' # Указываем адрес Mosquitto и порт

# Serial port settings for your Zigbee adapter
serial:
  port: /dev/ttyUSB0 #<---ПУТЬ К ТВОЕМУ ZIGBEE СТИКУ (как определили выше)
  adapter: 'ember' # Указываем тип адаптера, например, 'ember' для Silicon Labs/EZSP
  baudrate: 115200 # Скорость передачи данных
  rtscts: false # Управление потоком данных

# Frontend settings (веб-интерфейс)
frontend:
  enabled: true
  port: 8080 # Порт для веб-интерфейса Zigbee2MQTT
  host: 0.0.0.0 # Разрешает доступ со всех интерфейсов

# Permit joining new devices (разрешить присоединение новых устройств)
permit_join: true # Установи false после добавления всех устройств для безопасности

# Advanced settings
advanced:
  channel: 11 # Рекомендуемый канал Zigbee (11, 15, 20, 25), выбери наименее загруженный
  pan_id: 0x1aef # Произвольный PAN ID, измени, если сталкиваешься с помехами
  ext_pan_id: GENERATE # <--- ИСПРАВЛЕНО: Будет сгенерирован при первом запуске
  network_key: GENERATE # Генерирует новый ключ сети Zigbee при первом запуске
  # Если у тебя уже есть существующая Zigbee сеть и ты хочешь мигрировать к ней,
  # то здесь нужно будет указать network_key твоей старой сети, а также ext_pan_id в формате массива байтов,
  # например: ext_pan_id: [0, 18, 75, 0, 26, 239, 42, 28]

# Data directory (необязательно, если используется Docker volume)
data_path: /app/data

Сохрани изменения (нажми Ctrl+O, затем Enter) и выйди из редактора (Ctrl+X).

Создай новый стек "zigbee2mqtt" в Dockge:

Зайди в веб-интерфейс Dockge (http://<IP_OrangePi>:5001).

В верхнем меню (или по навигационной цепочке) найди раздел "Stacks".

Нажми кнопку "New Stack" (Новый стек).

Stack Name: zigbee2mqtt

Нажми "Create" (Создать).

Вставь содержимое compose.yaml для Zigbee2MQTT:

В большое текстовое поле в Dockge вставь следующий код. Обязательно убедись, что путь к стику в секции devices соответствует /dev/ttyUSB0, как ты указал.

version: '3.8'
services:
  zigbee2mqtt:
    container_name: zigbee2mqtt
    image: koenkk/zigbee2mqtt:latest
    volumes:
      - /udobnidom/zigbee2mqtt/data:/app/data # Здесь будет храниться configuration.yaml и другие данные
      - /run/udev:/run/udev:ro # Для доступа к USB-портам
    devices:
      - /dev/ttyUSB0:/dev/ttyACM0 #<---ИСПОЛЬЗУЕМ /dev/ttyUSB0 как источник, /dev/ttyACM0 как цель в контейнере
    environment:
      - TZ=Europe/Chisinau # <-- ЗАМЕНИ НА СВОЮ ВРЕМЕННУЮ ЗОНУ (Moldova)
      - MQTT_SERVER=mqtt://mosquitto # Указываем адрес Mosquitto по имени сервиса (доступ через внутреннюю сеть Docker)
      # Логин и пароль MQTT не требуются, так как Mosquitto настроен на анонимный доступ
    ports:
      - '8080:8080' # Веб-интерфейс Zigbee2MQTT
    restart: unless-stopped
    privileged: true # Может потребоваться для доступа к USB-стику
    networks:
      - homeiot_internal
networks:
  homeiot_internal:
    external: true

Если ты используешь полный путь (например, /dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_...-if00-port0), то тебе нужно изменить /dev/ttyUSB0 на фактический путь к твоему стику на Orange Pi. /dev/ttyACM0 - это имя, которое Zigbee2MQTT будет видеть внутри контейнера.

TZ=Europe/Chisinau: Если ты находишься в другом часовом поясе, замени Europe/Chisinau на свой.

Сохрани и разверни стек:

Нажми кнопку "Save" (Сохранить) в Dockge.

Затем нажми кнопку "Up" (Вверх), чтобы развернуть и запустить контейнер.

Дождись, пока контейнер zigbee2mqtt запустится и станет зеленым. Так как файл конфигурации уже создан, он будет использовать его с первого запуска.

Создай Proxy Host для Zigbee2MQTT в Nginx Proxy Manager:

Зайди в веб-интерфейс Nginx Proxy Manager.

Перейди в "Proxy Hosts" -> "Add Proxy Host".

Details (Вкладка "Детали"):

  • Domain Names: Введи поддомен для Zigbee2MQTT (например, z2m.мойумныйдом.duckdns.org).
  • Scheme: Выбери http.
  • Forward Hostname / IP: Введи IP-адрес твоей Orange Pi (например, 192.168.2.38).
  • Forward Port: Введи порт Zigbee2MQTT (8080).
  • Можешь включить "Block Common Exploits".

SSL (Вкладка "SSL"):

  • SSL Certificate: Выбери свой созданный сертификат (тот, что ты делал для .мойумныйдом.duckdns.org).
  • Force SSL: Включи (это автоматически перенаправит весь HTTP трафик на HTTPS).
  • Можешь включить "HSTS Enabled".

Advanced (Вкладка "Расширенные"):

Важно: В этом разделе обязательно включи "Websockets Support" (Поддержка WebSockets), поставив галочку. Это критически важно для корректной работы веб-интерфейса Zigbee2MQTT через прокси.

Нажми "Save" (Сохранить).

Теперь ты должен смочь получить доступ к веб-интерфейсу Zigbee2MQTT по доменному имени (например, https://z2m.мойумныйдом.duckdns.org/).

Развертывание и настройка Home Assistant:

Home Assistant — это сердце системы умного дома. Мы установим его как Docker-контейнер, что обеспечит гибкость и изоляцию, а также максимальный доступ к сети для сканирования устройств. Тут главное дать максимальный доступ к системе, чтобы Home Assistant мог найти новые устройства.

Создай необходимые директории на Orange Pi:

Подключись по SSH к твоей Orange Pi и создай директории для данных Home Assistant. Это место, где будут храниться все конфигурации, логи и базы данных Home Assistant.

cd
sudo mkdir -p /udobnidom/homeassistant/config

Создай новый стек "homeassistant" в Dockge:

  1. Зайди в веб-интерфейс Dockge (http://<IP_OrangePi>:5001).
  2. В верхнем меню (или по навигационной цепочке) найди раздел "Stacks".
  3. Нажми кнопку "New Stack" (Новый стек).
  4. Stack Name: homeassistant
  5. Нажми "Create" (Создать).

Вставь содержимое compose.yaml для Home Assistant:

В большое текстовое поле в Dockge вставь следующий код. Обрати особое внимание на network_mode: host и удаление параметра TZ из environment.

version: '3.8'
services:
  homeassistant:
    container_name: homeassistant
    image: homeassistant/home-assistant:stable # Используем стабильную версию Home Assistant
    volumes:
      - /udobnidom/homeassistant/config:/config # Мапируем директорию для конфигураций
      - /etc/localtime:/etc/localt
      - /run/dbus:/run/dbus:ro
    network_mode: host #<---ВАЖНО: Home Assistant работает напрямую в сети хоста
    restart: unless-stopped
    privileged: true #<---ВАЖНО: Дает максимальные доступы, необходимые для обнаружения устройств

Важные изменения и пояснения:

network_mode: host: Это самое важное изменение. В этом режиме контейнер Home Assistant будет использовать сетевой стек самой Orange Pi. Это означает, что он будет "видеть" все устройства в твоей локальной сети так, как если бы он работал непосредственно на Orange Pi, что критически важно для обнаружения многих устройств (например, через mDNS/Bonjour, UPnP, SSDP).

privileged: true: Это дает контейнеру полные права на хост-системе. В контексте Home Assistant в режиме host сети, это обычно необходимо для корректного доступа ко всем сетевым интерфейсам и, возможно, к некоторым специфическим USB-устройствам, которые могут быть подключены напрямую. Это обеспечивает максимальные доступы к прослушиванию сети и портов, как ты и просил.

Сохрани и разверни стек:

Нажми кнопку "Save" (Сохранить) в Dockge.

Затем нажми кнопку "Up" (Вверх), чтобы развернуть и запустить контейнер.

Дождись, пока контейнер homeassistant запустится и станет зеленым.

Первоначальный доступ к Home Assistant (по IP-адресу):

После успешного запуска контейнера, открой веб-браузер и перейди по адресу:

http://<IP_OrangePi>:8123

(например, http://192.168.2.38:8123).

Ты увидишь страницу приветствия Home Assistant. Пройди первоначальную настройку:

  • Создай учетную запись администратора (имя пользователя, пароль).
  • Укажи свое местоположение (страна, часовой пояс, высота, единицы измерения) — это важно для корректной работы автоматизаций и отображения погоды.
  • Home Assistant предложит обнаружить некоторые интеграции (например, Mosquitto, Zigbee2MQTT). Ты можешь настроить их сейчас или позже.

Настройка Home Assistant для работы с Nginx Proxy Manager

Этот шаг включает редактирование файла configuration.yaml Home Assistant, чтобы он корректно работал через Nginx Proxy Manager. В самом Nginx настраиваем адрес аналогично Dockge и другим контейнерам. Потом нужно пробросить конфигурацию в сам Home Assistant, чтобы иметь возможность подключиться с сертификатом.

Добавь конфигурацию для обратного прокси в configuration.yaml Home Assistant:

Подключись по SSH к твоей Orange Pi.

Открой файл configuration.yaml Home Assistant для редактирования:

sudo nano /udobnidom/homeassistant/config/configuration.yaml

Если файла еще нет или он пуст, то начни с пустой строки.

Вставь следующее содержимое в конец файла configuration.yaml. Если у тебя уже есть другие настройки, убедись, что отступы соблюдены (используй пробелы, не табы).

# Настройки для работы с обратным прокси (Nginx Proxy Manager)
http:
  use_x_forwarded_for: true
  trusted_proxies:
    - 172.16.0.0/12 # Диапазон Docker-сетей (включает 172.17.0.0/16, 172.18.0.0/16, и т.д.)
    # Добавь сюда IP-адрес твоей Orange Pi, если ты к ней обращаешься по IP из локальной сети
    - 192.168.2.7

Пояснения к настройкам:

use_x_forwarded_for: true: Это указывает Home Assistant доверять заголовку X-Forwarded-For, который отправляет Nginx Proxy Manager, чтобы корректно определять реальный IP-адрес клиента.

trusted_proxies: Это список IP-адресов или диапазонов IP-адресов, которым Home Assistant должен доверять как источникам прокси запросов.

172.16.0.0/12: Этот диапазон покрывает большинство внутренних Docker-сетей по умолчанию, что необходимо для того, чтобы Nginx Proxy Manager (который находится в своей Docker-сети) мог обращаться к Home Assistant.

192.168.2.38 (раскомментируй и замени): Это опционально. Если ты иногда планируешь обращаться к Home Assistant напрямую по IP адресу Orange Pi из локальной сети (например, http://192.168.2.38:8123), то тебе нужно раскомментировать эту строку и добавить IP-адрес своей Orange Pi. Это предотвратит ошибки "Unauthorized" при прямом локальном обращении. Если ты будешь использовать только доменное имя через Nginx Proxy Manager, то эта строка не нужна.

Сохрани изменения (нажми Ctrl+O, затем Enter) и выйди из редактора (Ctrl+X).

Перезапусти контейнер Home Assistant:

Для того чтобы Home Assistant применил новые настройки, его нужно перезапустить.

Зайди в веб-интерфейс Dockge (http://<IP_OrangePi>:5001).

В верхнем меню (или по навигационной цепочке) найди раздел "Stacks".

Найди стек homeassistant.

Нажми на кнопку "Restart" (кнопка в виде круглой стрелки), чтобы перезапустить контейнер.

Дождись, пока контейнер homeassistant снова станет зеленым.

После основных настроек в Home Assistant мы можем добавть сервис Mqtt в

Вводим адрес нашего сервера и добавляем MQTT, тогда и все устройства из Zigbee2mqtt появятся в HA.

Установка и настройка ESPHome (компилятор) в контейнере:

ESPHome — это мощный инструмент для создания кастомных прошивок для ESP8266 и ESP32. Он позволяет писать конфигурации на YAML и автоматически компилировать и загружать прошивку на устройства. Мы установим компилятор ESPHome в отдельном контейнере.

Создай необходимые директории на Orange Pi:

Подключись по SSH к твоей Orange Pi и создай директории для данных ESPHome:

sudo mkdir -p /udobnidom/esphome/config

Создай новый стек "esphome" в Dockge:

Зайди в веб-интерфейс Dockge (http://<IP_OrangePi>:5001).

В верхнем меню (или по навигационной цепочке) найди раздел "Stacks".

Нажми кнопку "New Stack" (Новый стек).

Stack Name: esphome

Нажми "Create" (Создать).

Вставь содержимое compose.yaml для ESPHome:

В большое текстовое поле в Dockge вставь следующий код.

version: '3.8'
services:
  esphome:
    container_name: esphome
    image: esphome/esphome:latest # Используем последний образ ESPHome
    volumes:
      - /udobnidom/esphome/config:/config # Мапируем директорию для конфигураций ESPHome
      - /etc/localtime:/etc/localtime:ro #<---Используем системное время Orange Pi
      - /dev/ttyUSB0:/dev/ttyUSB0 # <-- Раскомментируй, если используешь USB-адаптер для прошивки
      # Добавь другие /dev/ttyUSBx, если у тебя несколько адаптеров
    network_mode: host #<---ВАЖНО: для OTA-обновлений и обнаружения устройств
    restart: unless-stopped
    privileged: true #<---ВАЖНО: для доступа к USB-портам и полноценной работы в host-сети

Важные изменения и пояснения:

Добавлено мапирование /etc/localtime:/etc/localtime:ro, чтобы ESPHome использовал настройки часового пояса твоей Orange Pi.

volumes: - /dev/ttyUSB0:/dev/ttyUSB0: ОЧЕНЬ ВАЖНО! Если ты планируешь прошивать ESP-устройства по USB, тебе обязательно нужно раскомментировать эту строку. Убедись, что путь /dev/ttyUSB0 соответствует твоему USB-адаптеру или USB-порту, к которому ты подключишь ESP-устройство. Возможно, у тебя будет другой путь (например, /dev/ttyUSB1, /dev/ttyACM0 и т.д.). Можно добавить несколько таких строк, если у тебя несколько адаптеров. Если ты используешь только OTA-обновления (по воздуху), то эта строка не нужна.

network_mode: host: Это позволяет ESPHome обнаруживать устройства в сети для OTA-обновлений и отправлять на них прошивки.

privileged: true: Предоставляет контейнеру необходимые права для доступа к USB-портам (если они мапируются) и работы в режиме host сети.

Сохрани и разверни стек:

Нажми кнопку "Save" (Сохранить) в Dockge.

Затем нажми кнопку "Up" (Вверх), чтобы развернуть и запустить контейнер.

Дождись, пока контейнер esphome запустится и станет зеленым.

Важно: Этот стек esphome будет содержать только компилятор. Для удобного управления и редактирования конфигураций нам понадобится ESPHome Editor, который мы настроим на следующем шаге.

Адрес локальный обычно http://0.0.0.0:6052, то есть, ваш IP и порт 6052. Не забываем добавлять в Nginx Proxy Manager новый прокси адрес.

Установка ESPHome-Editor:

ESPHome-Editor (или "Editor for ESPHome") — это инструмент с открытым исходным кодом, который помогает создавать и управлять YAML конфигурациями для ESPHome.

Для чего он нужен: https://github.com/Morcatko/EspHome-Editor

Он упрощает процесс написания и управления повторяющимися секциями в конфигурационных YAML-файлах ESPHome. Это особенно полезно, если ты работаешь с множеством похожих устройств или компонентов ESPHome, так как помогает экономить время и усилия при их настройке. Он может конвертировать шаблоны, объединять YAML-файлы и облегчать загрузку конфигураций на твои ESPHome устройства для компиляции и беспроводного обновления (OTA).

Если не сильно нужно копаться с платами ESP, тогда этот шаг можно пропустить.

Подготовка папок для esphome-editor:

Сначала убедитесь, что на вашей Orange Pi создана следующая директория. Она будет использоваться morcatko/esphome-editor для хранения его собственных данных (проектов, настроек):

cd
/udobnidom/esphome-editor/data

Если папка не существует, создайте ее:

sudo mkdir -p /udobnidom/esphome-editor/data

Установка morcatko/esphome-editor с помощью Docker Compose:

Создайте новый файл compose.yaml для стека esphome-editor в Dockge (например, в /opt/dockge/data/stacks/esphome-editor/compose.yaml).

version: '3.8'
services:
  esphome-editor:
    image: morcatko/esphome-editor:latest
    container_name: esphome-editor
    network_mode: host
    privileged: true
    cap_add: [ALL]
    volumes:
      - /udobnidom/esphome-editor/data:/data # Мапируем папку для данных esphome-editor
    restart: unless-stopped

Сохраните этот файл.

Перейдите в Dockge, найдите или создайте новый стек esphome-editor и нажмите кнопку "Up", чтобы запустить контейнер.

Определение порта, на котором работает esphome-editor:

В логах можно увидеть запись:

esphome-editor | - Local: <http://localhost:3000>
esphome-editor | - Network: <http://0.0.0.0:3000>

По адресу ваш IP + порт 3000 мы можем зайти в контейнер. Не забываем добавлять в Nginx Proxy Manager.

Резервное копирование через Duplicati:

Подготовка SD-карты:

Оставлю эту часть без изменений, так как она уже скорректирована с вашими данными.

Определение имени устройства SD-карты:

Нужно командой проверить, как называется наша SD карта sudo fdisk -l. Моя SD карта определена как /dev/mmcblk1, а её раздел — /dev/mmcblk1p1. Мы будем использовать именно эти имена в дальнейших командах.

Отключение смонтированных разделов (если есть):

sudo umount /dev/mmcblk1p1

Очистка SD-карты (удаление всех данных):

ВНИМАНИЕ: Эта команда полностью удалит ВСЕ данные с /dev/mmcblk1! Убедитесь, что это точно ваша SD-карта, а не системный диск.

sudo dd if=/dev/zero of=/dev/mmcblk1 bs=1M status=progress

Создание нового раздела и форматирование:

Запустите fdisk для вашей SD-карты:

sudo fdisk /dev/mmcblk1

Введите следующие команды в fdisk (нажимая Enter после каждой - вносим по одному значению):

o
n
p
1
[Enter]
[Enter]
w

Отформатируйте новый раздел в файловую систему ext4:

sudo mkfs.ext4 /dev/mmcblk1p1

Создание точки монтирования и монтирование SD-карты:

Создайте директорию для монтирования SD-карты:

sudo mkdir -p /mnt/backup

Смонтируйте SD-карту:

sudo mount /dev/mmcblk1p1 /mnt/backup

Настройка автоматического монтирования (Optional, но рекомендуется):

Получите UUID раздела SD-карты:

sudo blkid /dev/mmcblk1p1

Скопируйте значение UUID="ваш_uuid".

Откройте /etc/fstab для редактирования:

sudo nano /etc/fstab

Добавьте следующую строку в конец файла, заменив ваш_uuid на фактический UUID:

UUID=ваш_uuid /mnt/backup ext4 defaults,nofail 0 2

Нажмите Ctrl+X, затем Y и Enter для сохранения и выхода.

Перезагрузите систему или выполните sudo mount -a.

Установка Duplicati:

Теперь, создайте основную директорию для данных Duplicati, соответствующую вашей рабочей конфигурации:

Через SSH на вашей Orange Pi выполните:

cd
sudo mkdir -p /udobnidom/duplicati

Это создаст директорию /udobnidom/duplicati, если её нет.

Установка Duplicati с помощью Dockge:

В веб-интерфейсе Dockge создайте новый стек с именем duplicati.

Вставьте следующий код в поле compose.yaml. Это ваша рабочая конфигурация:

ОЧЕНЬ ВАЖНОЕ ЗАМЕЧАНИЕ:

Подтверждено: Для этого образа Duplicati (lscr.io/linuxserver/duplicati) переменная для установки пароля веб-интерфейса должна быть DUPLICATI__WEBSERVICE_PASSWORD (с двумя подчеркиваниями после DUPLICATI).

Для SETTINGS_ENCRYPTION_KEY: Замените ВАШ_СЕКРЕТНЫЙ_КЛЮЧ_ДЛЯ_ШИФРОВАНИЯ на сложный, уникальный ключ (не менее 8 символов).

Для DUPLICATI__WEBSERVICE_PASSWORD: Замените ВАШ_ПАРОЛЬ_ДЛЯ_ВХОДА_В_ВЕБ_ИНТЕРФЕЙС на тот пароль, который вы хотите использовать для входа в веб-интерфейс Duplicati. Например, MyStrongPassword123!.

version: "3.8"
services:
  duplicati:
    image: lscr.io/linuxserver/duplicati:latest
    container_name: duplicati
    restart: unless-stopped
    network_mode: host
    privileged: true
    cap_add:
      - ALL
    ports:
      - 8200:8200
    environment:
      - PUID=0
      - PGID=0
      - TZ=Europe/Moscow
      - SETTINGS_ENCRYPTION_KEY=YourSecureKey123
      - DUPLICATI__WEBSERVICE_PASSWORD=YourWebPassword
    volumes:
      - /udobnidom/duplicati/config:/config # Конфигурация Duplicati
      - /:/source:ro # Доступ к корневой файловой системе хоста для резервного копирования
      - /mnt/backup:/mnt/backup # Пример монтирования SD-карты для бэкапов
      - /udobnidom/duplicati/backup:/backup # Упрощенный путь для выбора в UI Duplicati
    networks: {}

Нажмите Save (Сохранить), затем Up (Запустить).

Устранение проблемы "Login failed: Failed to log in" и "SettingsEncryptionKeyMismatchException":

Этот шаг КРАЙНЕ ВАЖЕН после изменения compose.yaml или любых проблем с логином/запуском!

Если вы все еще не можете войти или видите ошибку SettingsEncryptionKeyMismatchException, это означает, что Duplicati использует старую или поврежденную конфигурацию. Чтобы это исправить:

Остановите стек Duplicati в Dockge:

Найдите стек duplicati и нажмите кнопку Stop.

Удалите старые конфигурационные данные Duplicati:

Подключитесь к вашей Orange Pi по SSH и выполните команду:

sudo rm -rf /udobnidom/duplicati/config

ВНИМАНИЕ: Эта команда удалит все настройки Duplicati.

Запустите стек Duplicati снова в Dockge:

Найдите стек duplicati и нажмите кнопку Up.

После этих шагов Duplicati должен запуститься с "чистого листа", применив правильный пароль и ключ шифрования из вашего обновленного compose.yaml.

Доступен по адресу ваш IP + 8200 порт. Не забываем добавлять в Nginx Proxy Manager.

Настройка резервного копирования в Duplicati для полного восстановления системы:

После того как Duplicati успешно запущен и вы вошли в веб-интерфейс, вам нужно создать задание резервного копирования. Для полного восстановления вашей системы Docker-сервисов в случае переустановки ОС, вам критически важно резервировать две основные директории:

/udobnidom/: Эта директория содержит все постоянные данные и конфигурации ваших Docker-контейнеров (Home Assistant, Mosquitto, Zigbee2MQTT, данные самого Duplicati и т.д.).

/opt/dockge/data/stacks/: Эта директория содержит все файлы compose.yaml для ваших Docker-стеков, которые определяют, как запускаются и настраиваются ваши сервисы.

Шаги для создания задания резервного копирования в Duplicati:

Откройте веб-интерфейс Duplicati (по доменному имени или IP адресу:порту).

Нажмите Add backup.

Выберите Configure a new backup и нажмите Next.

General settings:

Name: Придумайте имя для резервного копирования, например, "ПолныйБэкапСистемы".

Encryption password: Создайте новый, уникальный и сложный пароль для шифрования самого резервного копирования. ОБЯЗАТЕЛЬНО ЗАПОМНИТЕ ИЛИ ЗАПИШИТЕ ЭТОТ ПАРОЛЬ! Без него вы не сможете восстановить данные.

Нажмите Next.

Destination (Куда сохранять):

Storage type: Выберите Local folder (или другой тип, если используете облачное хранилище).

Path: Введите путь к папке на вашей SD-карте, которую вы смонтировали:

/mnt/backup/duplicati_backups

(Папка duplicati_backups будет создана внутри /mnt/backup).

Нажмите Test connection для проверки. Если все хорошо, нажмите Next.

Source data (Что копировать):

В левой панели навигации, в разделе "Компьютер", найдите и раскройте папку source.

Внутри source вы увидите корневую файловую систему вашей Orange Pi.

Найдите и отметьте галочками следующие директории:

/source/udobnidom

/source/opt/dockge/data/stacks

Нажмите Next.

  1. Schedule (Расписание): Настройте расписание, как часто вы хотите делать резервные копии (например, ежедневно или еженедельно). Нажмите Next.
  2. Options (Параметры): Здесь вы можете настроить различные параметры (например, количество хранимых версий, фильтры и т.д.). Важно: Убедитесь, что объем бэкапов помещается на вашу SD-карту. Нажмите Save.

После сохранения задания, вы можете запустить его вручную для первой резервной копии.

7. Matter Server (если нужно):

Если вам требуется поддержка Matter-устройств в вашей системе умного дома, вы можете развернуть Matter Server.

Предварительные требования:

Создаем папку, если выше не создали:

sudo mkdir -p /udobnidom/matter-server/data

Шаги для развертывания Matter Server:

Откройте веб-интерфейс Dockge.

Нажмите кнопку Add Stack (Добавить стек) и укажите имя стека: matter-server.

Вставьте следующий compose.yaml код в поле редактирования:

version: '3.8'
services:
  matter-server:
    container_name: matter-server
    image: ghcr.io/home-assistant-libs/python-matter-server:stable
    restart: unless-stopped
    privileged: true
    cap_add:
      - ALL
    security_opt:
      - apparmor=unconfined
    volumes:
      - /udobnidom/matter-server/data:/data
      - /run/dbus:/run/dbus:ro # Доступ к D-Bus для связи с адаптером Matter
    network_mode: host # Использует сетевой стек хоста для обнаружения устройств
    # Порт 5580 будет доступен на IP-адресе хоста

Нажмите Save (Сохранить), затем Up (Запустить).

Matter Server будет запущен, и его веб-интерфейс (если применимо, или сам сервис) будет доступен на вашей Orange Pi по порту 5580. В Home Assistant просто добавляем сервис и ставим адрес.

Dockcheck-web проверка обновления контейнеров:

Это легковесное веб-приложение, которое предоставляет простой интерфейс для просмотра доступных обновлений для ваших запущенных Docker-контейнеров. Оно не является полноценным менеджером Docker, как Portainer, а сфокусировано именно на статусе версий.

Docker Compose файл для Dockcheck-web:

В веб-интерфейсе Dockge создайте новый стек с именем, например, dockcheck-web. Вставьте следующий код в поле compose.yaml:

version: '3.8'  # Версия Docker Compose
services:
  dockcheck-web:
    container_name: dockcheck-web
    image: palleri/dockcheck-web:latest
    restart: unless-stopped
    ports:
      - "8081:80"  # Порт для веб-интерфейса Dockcheck-web. Вы можете изменить
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro # Доступ к Docker-демону для проверки
      - /etc/localtime:/etc/localtime:ro # Для корректного отображения времени
      - /etc/timezone:/etc/timezone:ro # Для корректного отображения временной зоны

Запуск Dockcheck-web в Dockge:

  1. Сохраните compose.yaml в Dockge.
  2. Нажмите кнопку Up (Запустить) для стека dockcheck-web.

Доступ к веб-интерфейсу Dockcheck-web:

После запуска контейнера Dockcheck-web:

Откройте веб-интерфейс в вашем браузере, перейдя по адресу: http://<IP_OrangePi>:8081 (замените 8081 на тот порт, который вы указали, если меняли). Не забываем добавлять в Nginx Proxy Manager!На этой странице вы увидите список ваших Docker-контейнеров и статус их образов: есть ли доступные обновления или они уже используют последние версии. Dockcheck-web проверяет наличие новых образов при запуске контейнера, а также раз в день автоматически и при нажатии кнопки "Check for updates" в интерфейсе.

Важно: Dockcheck-web предназначен для просмотра статуса обновлений. Он не предоставляет функций для автоматического или ручного обновления контейнеров прямо из своего веб-интерфейса. Для обновления вам по-прежнему потребуется использовать Dockge, Watchtower (для автоматического обновления) или вручную запускать команды Docker.

HACS:

HACS — очень важный магазин с разными интеграциями и улучшениями. К установке обязателен.

Настройка HACS в Home Assistant:

Подключитесь к контейнеру Home Assistant по SSH:

docker exec -it homeassistant bash

Перейдите в корневую директорию Home Assistant ВНУТРИ КОНТЕЙНЕРА:

cd /config

Установите HACS, выполнив следующую команду:

wget -O - <https://install.hacs.xyz> | bash

Скрипт автоматически создаст папку custom_components внутри /config.

Перезагрузите Home Assistant:

Сначала выйдите из контейнера:

exit

Затем перезапустите Home Assistant:

docker restart homeassistant

Добавьте интеграцию HACS в пользовательском интерфейсе Home Assistant:

Откройте веб-интерфейс Home Assistant.

Перейдите в Настройки -> Устройства и службы.

Нажмите кнопку + Добавить интеграцию.

В поиске введите HACS, выберите HACS и следуйте инструкциям для авторизации через GitHub.

Очистите кеш браузера:

После установки HACS выполните жесткую перезагрузку страницы в браузере (обычно Ctrl+F5 или Cmd+Shift+R), чтобы все изменения вступили в силу.

Настройка ссылок в Home Assistant:

После настройки адресов через Nginx мы можем добавить их на боковую панель. Берем именно ссылку с SSL сертификатом, чтобы потом при удаленном доступе у нас не было вот таких проблем:

Настройка через панель, заносим все адреса, которые создали в Nginx Proxy Manager.

Панели или dashboard, в них есть возможность установить ссылку на сайт.

Переносим в боковую панель сервисы которые нам нужны!

Все, можно уже и настраивать полноценно Home Assistant. Если ещё нужны “аддоны” то просто находим docker compose файл, выставляем папки и устанавливаем через Dockge.

Удаленный доступ:

Я использую сервис Homeway — очень удобная установка + есть встроенный ИИ. Сервис бесплатный, но если заплатить небольшие деньги, то сильно расширяется функционал.

Заходим с нашим аккаунтом на сайт https://homeway.io/.

В месяц входит 50 МБ… не густо. Камеры особо не посмотришь…

Ну ладно, настраиваем умный дом.

Нам нужна отдельная версия, а не аддон. Standalone Linux CLI.

Переходим в терминал и устанавливаем агента:

bash <(curl -s <https://homeway.io/install.sh>)

У нас спросят токен, его можно получить через Home Assistant. Нажимаем на пользователя -> безопасность, и в самом низу будет выдача токена. Токен лучше сохранить, так как его потом ещё раз не запросить.

Переходим по предложенному адресу https://homeway.io/code и вводим код. После подключение будет меню настроить приложение на телефоне, там дадут внешнюю ссылку.

Все установлено.

Новые устройства нормально находит в сети, а из HACS можно уже и привычные интеграции скачать.

Как говорится - нет страшен черт как его малюют - зато теперь полная свобода в использовании железа.

Способ 1 Поддержать автора

Способ 2 https://donate.stream/yoomoney410013774736621

или через криптокошелёк (Только USDT) TCHekdJZFndXpDrHZGuTmqFNcqhWBTTzPr


Связаться со мной. (Консультации, проектирование и обучение)

Новый подход к электрике и дизайну помещений. Некоторые провода уже не нужно тянуть, какие-то решения можно принять после ремонта. Перенести выключатель, запустить кондиционер с телефона - возможно автоматизировать любую рутину.

Мой телеграм канал, там все быстрее обновляется телеграм.

Сайт smart4home.ru и альтернативный Умный дом на любом этапе

Соц сети: RuTube канал Удобный дом / You Tube канал Удобный дом Яндекс Дзен: Удобный дом / InGram

Платформы специалистов: Авито / Профи.ру / Яндекс Услуги https://uslugi.yandex.ru/profile/EgorSmirnov-2294380?from=telek


Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158 Реклама. ООО «ЯНДЕКС», ИНН 7736207543