Установка Majordomo+mosquitto+zigbee2mqtt в Docker

3. Как установить MajorDoMo? Комментариев нет

Вступление

Всем привет.

Не нашел ни одной статьи в базе знаний про докер. Решил наваять одну, чтобы люди, так сказать, могли приобщиться к прекрасному. Сегодня мы будем поднимать сетевой стек для MajorDoMo в Docker.

Плюсы минусы докера, и что это в принципе такое описывать уж не буду...всё давным давно в инете расписано. Сразу к делу.

Установка

Поднимать всё это дело будем используя docker-compose, т.к. там конфиги контейнеров прописаны в одном файле, и не надо за собой таскать длинные строки запуска контейнеров.

Docker

Сперва установим docker и docker-compose. В серверных ОС его можно выбрать как опцию при установке системы, а для остальных:

Portainer

Так же можно (но не обязательно) установить Portainer дабы созерцать в веб интерфейсе, что за контейнеры у нас создаются, и каким образом. Так же там можно будет глянуть логи. Но и то и то можно сделать в консоли, так что пункт скорее чтобы продемонстрировать преимущества докера - в одну команду (создание тома portainer_data считать не будем, т.к. можно и без него) поднимается довольно мощный сервис. Так же новичкам, может, будет удобнее, создавать контейнеры для различных standalone приложений (типа качалки торрентов, всяких plex-серверов и т.п.) через веб интерфейс, тоже в пару кликов, вместо консольного интерфейса.

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

MajorDoMo

Далее переходим к majordomo.

Будем использовать уже готовый репозиторий

https://bitbucket.org/a-som/docker-majordomo/src/master/

Он уже идёт как связка 2х контейнеров sql и debian с php и nginx на борту. В принципе там есть инструкция, но я внесу пару корректив в неё))

  1. Клонируем репозиторий
  2.  Клонируется он в текущую папку. Чаще всего при входе через ssh (да и при логине из консоли) вы попадаете в папку пользователя. Так что в папке пользователя должна появится папка master. На этом этапе её можно куда-нибудь перенести, либо переименовать (это конечно можно сделать и при клонировании репозитория, но так проще было объяснить).
  3. Переходим в папку и подтягиваем связанные репозитории
  4. Далее необходимо немного подправить конфиги (если они уже там не поправлены). Добавляем iputils-ping в устанавливаемые пакеты к любой команде apt-get в Dockerfile образа (необходим для модуля Устройства онлайн)

    Я добавил к этой строке

    а так же в конфиг nginx-а (без неё у меня не захотело взлетать)

    cтроку client_max_body_size 32m; примерно вот так
  5. Компилить образ автором репозитория предлагается через команду make, но т.к. я планирую использовать данный стэк не только для МД но и для других приложений - придётся так же поправить docker-compose.yml и вместо указанных там переменных вида ${MYSQL_HOST} использовать конечные значение логинов/паролей. В итоге файлик стал выглядеть так:

  6. После чего можно попробовать скомилить через make install или же через docker (docker-compose up -d) данный образ (точнее 2 образа - для базы и для веб сервера), а так же инициализировать БД.

    При инициализации базы будет задан вопрос - удалить ли старую базу? Подтверждаем.
    Раньше у меня это работало, но в последний раз у меня make init-db не захотел работать ни в какую. Базу удалял, создавал, но пустую. Дамп не грузился. В итоге пришлось базу заливать вручную через консольный клиент или phpmyadmin (про конфиг которого расскажу чуть позже).
  7. Далее необходимо скопировать конфиг МД

    и вписать туда (nano ./app/config.php) актуальные данные для подключения к БД. Главное не забывать, что хост для подключения к mysql не localhost а mysql. Логин, пароль и имя базы мы прописывали выше.
  8. Собственно после этого уже должен запустится МД. После правки конфигов нужно перезапустить контейнеры или всю машину.
  9. Проверяем запустились ли контейнеры
  10. Заходим на http://айпиадрес, проверяем загрузился ли чистый интерфейс МД.

Mosquitto

Приступим к установке mqtt брокера mosquitto.

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

Далее открываем docker-compose.yml и добавляем mosquitto в ряды сервисов, которые там уже есть

И пробуем запустить контейнер

 

Если всё прошло успешно (это можно узнать зайдя в portainer, в списке контейнеров, и глянуть в логи сервиса, ну или посмотреть логи через консоль).

На всякий случай заглянем в логи

А то у меня было такое, что конейнер запустился, а в логах ошибка доступа. Если всё работает, то там должно быть что то типа

Теперь можно чуть чуть пошаманить с конфигами. Например создать пользователя:

(при выполнении попросит ввести новый пароль пользователя).

И запретить подключаться гостям (без пользователя) к нашему брокеру

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

Zigbee2MQTT

Как и в случае установки mosquitto - создадим папку под конфиги.

И добавим наш сервис zigbee2mqtt в конец файла docker-compose.yml

Не забываем добавить пользователя в группу dialout (20), чтобы он смог работать с usb стиком

Пробуем опять создать и запустить контейнеры стака.

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

Вписываем/исправляем примерно до следующего вида

И перезапускаем контейнер

В очередной раз видим, что контейнер вполне себе запустился. Так же на скрине я отметил ссылку перехода к логам контейнера. Там можно в "режиме онлайн" наблюдать логи процесса. Если всё настроено правильно - лог будет выглядеть примерно так:

Для тех у кого несколько ком-портов на компе - можно подцепить устройство по серийному номеру. Для начала найдём его

Среди результатов найти стик, думаю не проблема

На всякий случай скажу, что искать что то содержащее Texas_Instruments)).

PhpMyAdmin

Многим нужен для комфортной работы phpmyadmin (интерфейс для доступа к базе данных). Решил показать на всякий случай, как его тоже добавить. Но я думаю суть вы уже уловили))) Добавляем очередной сервис в docker-compose.yml

И поднимаем всю связку

Phpmyadmin доступен на порту http://<айпиадрес_сервера>:8085.

Для входа можно использовать юзера root или же пользователя под которым входит majordomo. Оба пароля мы прописывали при поднятии контейнера mysql/mariadb.

Ещё пару слов о докере

На последок ещё пару твиков которые могут понадобиться при использовании докера

Сеть в докере

Как вы, наверное, успели заметить в том же портэйнере отображаются адреса контейнеров. По скольку контейнеры это изолированные среды, а изолированные среды должны как то общаться между собой и с пользователем - связывает их виртуальная сеть, поднятая прямо на сервере. У сети есть своё пространство имён, каждый контейнер имеет свой адрес. Нет, есть, конечно, и другие типы интерфейсов сети, но о них я не упоминаю, т.к. в текущей статье использовался только тип интерфейса bridge. Если мы обращаемся к приложению в контейнере прямо с серверной машины - надо обращаться не к localhost (127.0.0.1), как мы привыкли это делать, а к ip адресу, присвоенному контейнеру. Так же некоторые контейнеры позволяют для подключения использовать DNS имя, чем мы собственно и воспользовались при настройке mosquitto и mariadb. Например чтобы подключиться модулем zigbee2mqtt к брокеру mosquitto надо указать примерно следующие настройки

Указание параметров сети

Если хотите указать какие-либо параметры сети, отличающиеся от выдаваемых по дефолту - для этого нужно обозначить сеть в конфиге. Делается это уже за пределами секции services. Создаём отдельную секцию networks, и там прописываем конфигурацию сети.

Указание статичных адресов контейнеров

После того как указали параметры сети - можно присвоить статичные адреса контейнерам. Рекомендую не занимать первые адреса в сети, либо же указывать адреса всем контейнерам без исключения. Т.к., допустим, если вы указали адрес 172.1.0.2 контейнеру, контейнер, которому адрес не присвоен может занять его, если запустится раньше, и контейнер с указанным адресом не сможет запуститься вовсе. Для контейнера статичный ip присваивается следующим образом (на примере phpmyadmin)

После этого из локальной машинки можно будет обращаться к контейнеру по указанному ip адресу...напоминаю - эта сеть существует только "внутри сервера". Снаружи - все сервисы доступны только по ip-адресу сервера и прокинутым наружу портам (по крайней мере в режиме сети bridge)

Логи Zigbee2MQTT

Ну и ещё один лайфхак на последок. Я уже показывал что логи того же zigbee2mqtt доступны в портэйнере. Так же, на примере москита показывал как их можно просмотреть в консоли. В модуле же zigbee2mqtt так же реализован онлайн мониторинг логов. Но чтобы он завёлся - нам нужно прокинуть соответствующую папку в контейнер МД. Т.е. дописать в секцию volumes примерно слежующее

И логи появились на нужной страничке

Заключение

Итак все установки закончены, стак функционирует.

Мой финальный конфиг docker-compose.yml выглядит так:

Можно приступать к использованию majordomo, а так же прикладных модулей в виде mosquitto и zigbee2mqtt. Как вы можете заметить - дописал ещё пару сервисов для личного использования. Стак поднимался на архетектуре x86_64. Для АРМ-подобных процессоров инструкции могут отличаться от приведённых.

Спасибо за внимание).

Поделитесь в соц сетях

Теги: