Наш сервер MQTT

Брокер MQTT

Anydy

Наш сервер MQTT

#1

Сообщение Anydy » 26.05.2020{, 15:25}

Предлагаю потестировать созданный брокер на VDS сервере (Это сообщение было изменено т.к. устарело)

http://polmira.ru/mqtt/

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

Брокер сделан на движке https://www.emqx.io/ ....который в отличии от mosquitto позволяет пользователям самостоятельно регистрироваться и имеет dashboard - панель для администратора ....я имею доступ, могу управлять....

Повторю сообщение как подключиться:
После авторизации на яндекс вас перекинет на страницу с параметрами доступа к серверу. Авторизация проходит по протоколу OAuth2.0 через приложение на яндексе. Ваших паролей сервер не знает, ему передаются только токены от яндекса на разрешение аутентификации. Разрешения запрашиваемые у пользователя минимальны. Email, логин, день рождения, отображаемое имя. Из них парочка не обязательных разрешений с которых можно снять галку. После получения пароля должно пройти некоторое время (около 5 минут) прежде чем сервер вас признает.

Пользователи могут читать только свои топики. Если ваш аккаунт на яндексе например: user@yandex.ru, то публикация и подписка доступна только в топик user/# Это означает, что вам доступен любой топик после user/ т.е. топики user/device0, user/device1 и user/temp будут доступны и на чтение, и на запись пользователю user. А пользователь resu сможет читать и писать только в свои топики.

Сервер поддерживает ws, mqtt 3.1.1 и 5 версий с ssl и без. Сертификат Let's Encrypt x3 Google “Xenon2020”. Максимальный размер публикации 1Mbt. Частота публикаций 10/sec. Количество устройств зарегистрированных с одного аккаунта не более 5, нет это не жесткое ограничение. Если хотите больше устройств, думаю правильным решением будет регулярная поддержка форума. Вот тут есть возможность это сделать app.php/_donate Должен предупредить, mqtt сервер не брошен на произвол судьбы и на нем есть админ который присмотрит за вами.

Все вопросы можно писать или в эту ветку форума или если информация конфиденциальна в личное.

Lukum
Рядовой
Сообщения: 63
Зарегистрирован: 06.11.2018{, 18:46}
Репутация: 1
Имя: Алексей

Наш сервер MQTT

#2

Сообщение Lukum » 28.05.2020{, 19:53}

Полёт нормальный, как долго будет работать?

Аватара пользователя
Rovki
Полковник
Сообщения: 4872
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 269
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Наш сервер MQTT

#3

Сообщение Rovki » 28.05.2020{, 21:37}

Lukum писал(а):
28.05.2020{, 19:53}
Полёт нормальный, как долго будет работать?
Как только закончится оплата сервера :smile44:
Электронщик до мозга костей и не только

Anydy

Наш сервер MQTT

#4

Сообщение Anydy » 29.05.2020{, 03:19}

Lukum писал(а):
28.05.2020{, 19:53}
Полёт нормальный, как долго будет работать?
Rovki писал(а):
28.05.2020{, 21:37}
Как только закончится оплата сервера
Да, как закончатся деньги на сервере))) ..... а серьезно - этот сервер стоит в три раза дешевле нашего хостинга, тем более мы скоро переедем на новый хостинг и оплата хостинга для форума и сайта +VDS сервер будет даже дешевле чем сейчас только за хостинг...
Так что и брокер MQTT и сервер Blynk будут работать всегда!
Сейчас прикручу сервис GPS мониторинга - https://www.traccar.org/

Masteroff
Рядовой
Сообщения: 55
Зарегистрирован: 28.04.2018{, 16:58}
Репутация: 1
Имя: Егор

Наш сервер MQTT

#5

Сообщение Masteroff » 29.05.2020{, 10:18}

Anydy, а сервис https://www.traccar.org/ платный? Я так понял если пользоваться внутренним сервером то минималка 50уе, а если самому делать то нет?

Lukum
Рядовой
Сообщения: 63
Зарегистрирован: 06.11.2018{, 18:46}
Репутация: 1
Имя: Алексей

Наш сервер MQTT

#6

Сообщение Lukum » 29.05.2020{, 11:53}

Так что и брокер MQTT и сервер Blynk будут работать всегда!
Сейчас прикручу сервис GPS мониторинга - https://www.traccar.org/
А какакие ограничея будут?

Anydy

Наш сервер MQTT

#7

Сообщение Anydy » 01.06.2020{, 09:44}

Masteroff писал(а):
29.05.2020{, 10:18}
Я так понял если пользоваться внутренним сервером то минималка 50уе, а если самому делать то нет?
Да верно, наверное создам новую тему по серверу traccar
Lukum писал(а):
29.05.2020{, 11:53}
А какакие ограничея будут?
Пока что никаких, потом посмотрим по загрузке сервера...

Lukum
Рядовой
Сообщения: 63
Зарегистрирован: 06.11.2018{, 18:46}
Репутация: 1
Имя: Алексей

Наш сервер MQTT

#8

Сообщение Lukum » 01.06.2020{, 19:52}

Логин и пороль можешь сделать хочу передти на этот mqtt.

Anydy

Наш сервер MQTT

#9

Сообщение Anydy » 01.06.2020{, 20:35}

Lukum писал(а):
01.06.2020{, 19:52}
Логин и пороль можешь сделать хочу передти на этот mqtt.
В ручную могу, но пытаюсь разобраться как сделать это в автомате...иначе смысла нет ....

Отправлено спустя 7 минут 55 секунд:
Хотя думаю не скоро разберусь, я жнепрограммист)))
Вот нашел ....возможно как вариант и пригодится - http://mqtt.cool
Может кто из программистов мне поможет?

Отправлено спустя 4 минуты 53 секунды:
Примеры с сайта.....только как это запустить пока не разобрался...

https://demos.mqtt.cool/hello-iot-world/
https://demos.mqtt.cool/mqtt-throttling/
https://demos.mqtt.cool/auth-hook/

Lukum
Рядовой
Сообщения: 63
Зарегистрирован: 06.11.2018{, 18:46}
Репутация: 1
Имя: Алексей

Наш сервер MQTT

#10

Сообщение Lukum » 01.06.2020{, 21:44}

Сделай в ручную

Anydy

Наш сервер MQTT

#11

Сообщение Anydy » 01.06.2020{, 23:33}

Lukum писал(а):
01.06.2020{, 21:44}
Сделай в ручную
А мы что знакомы что Вы меня называете на ты.....да еще и типа ну ладно сделай вручную.....
Ладно, я закрою на это глаза, сделал вам личный логин - отправил в ЛС

Отправлено спустя 19 минут 5 секунд:
Ребята, это тест!
Я не смогу бесконечно добавлять логины в и пароли (а они в зашифрованном виде) в файл конфигурации - это не правильно....
Нет, для тестировщиков - конечно добавлю, не проблема, но правильней было бы подключать базу Mqsql например! ....
Поэтому - кто хочет потестировать - пишите в ЛС - я создам вам аккаунт, но он будет работать ровно до изменения алгоритма добавления новых пользователей....

Аватара пользователя
ivanpost
Сержант
Сообщения: 140
Зарегистрирован: 24.09.2016{, 22:26}
Репутация: 4
Откуда: Тольятти
Имя: Иван
Контактная информация:

Наш сервер MQTT

#12

Сообщение ivanpost » 18.06.2020{, 19:55}

Подскажите пожалуйста! Как планируете разграничить юзеров, чтобы не видели сообщения друг-друга?

Аватара пользователя
Phazz
Полковник
Сообщения: 2552
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 367
Откуда: Сургут
Имя: Анатолий

Наш сервер MQTT

#13

Сообщение Phazz » 18.06.2020{, 20:54}

Думаю можно сгенерировать имя топика такое, что не подберешь. Или можно разом весь брокер прочитать?

RootShell
Рядовой
Сообщения: 77
Зарегистрирован: 27.06.2020{, 04:22}
Репутация: 18
Откуда: World
Имя: Agat
Контактная информация:

Наш сервер MQTT

#14

Сообщение RootShell » 27.06.2020{, 04:53}

Всем доброго времени суток. Специально зарегистрировался, что бы написать.
mosquitto-auth-plug прикрутить очень легко.
https://github.com/RootShell-coder/mosquitto. Просто нужно выполнить построчно команды из dockerfile

Если вы разбираетесь в VDS то будет легче поставить контейнер уже собранный с плагином и отдельно контейнер для базы лучше если это будет mariadb
https://hub.docker.com/r/elizabethmorves/mosquitto

Разграничить пользователей с этим плагином легко. У mosquitto внутри расширенные права.
  • 0: no access (NULL)
    1: read access (r)
    4: subscribe access (s)
    5: read, subscribe access (rs)
    2: write access (w)
    3: read, write access (rw)
    6: write, subscribe access (ws)
    7: read, write and subscribe access (rws)
По факту на каждого пользователя можно выдать путь /flprog/username/# и права на запись и чтения этого топика и всего, что дальше после #
Нужно писать регу на php. Если вдруг кто то начнет на github могу помочь по мере сил. С backend проблем нет. Останавливает самое сложное для меня, это верстка и дизайн.

Отправлено спустя 31 минуту 39 секунд:
По дизайну понравился mqtt.explorer http://mqtt-explorer.com/ или https://github.com/thomasnordquist/MQTT-Explorer
Так же есть версия для linux

Anydy

Наш сервер MQTT

#15

Сообщение Anydy » 29.06.2020{, 19:59}

RootShell, Спасибо за информацию, mosquitto-auth-plug я видел, но что то не получается настроить...
Пожалуйста опишите по шагам? (я в линуксе новичок, делаю по инструкциям, много чего получалось установить и настроить а вот именно с этой авторизацией затык)
Mosquitto дожен быть установлен заранее из репозитория? По умолчанию у комарика все работает, вручную логины/ пароли добавляются....
Плагин устанавливать так- sudo apt install mosquitto-auth-plugin ?
С докерами не работал ни разу....при попытке установить командами с ГИТ - какие то непонятные для меня ошибки...
Смотрю htop - процессы докера есть .... а как проверить работу то авторизации?
В этом плагине есть бэкэнд/фронтенд по умолчанию или самому писать нужно будет?
Спасибо.

RootShell
Рядовой
Сообщения: 77
Зарегистрирован: 27.06.2020{, 04:22}
Репутация: 18
Откуда: World
Имя: Agat
Контактная информация:

Наш сервер MQTT

#16

Сообщение RootShell » 01.07.2020{, 03:25}

Самый простой вариант это почитать как установить контейнер https://docs.docker.com/engine/install выберите свою OS
Затем его нужно запустить и добавить в автозагрузку, а так же добавить пользователя от которого будете запускать контейнер в группу docker
Банальный способ проверить что docker поднялся это написать в консоли docker stats это как htop только для контейнеров ))).
затем нужно найти на hub.docker.com нужный контейнер и выполнить docker pull название контейнера. Но так можно не делать, а можно написать скрипт по запуску контейнера он сам все запулит.

Самые ходовые команды не все конечно.
docker ps - все запущенные контейнера
docker ps -a все запущенные и застопанные
docker logs -f имя запущенного контейнера.
docker images - какие есть скачанные образы
и конечно же dockr stop name, docker rm name остановить и удалить запущенный контейнер с именем.
netstat -atnup - посмотреть какие порты открыты
и iptables -nvL - посмотреть что там в firewall. Кстати закрывать порт для контейнера на доступ из определенной сети нужно специальным образом. Так же нужен немого модифицированный fail2-ban. А в centos8 работает firewalld который несовместим с докерами. Ну как не совместим =))) если нельзя, но очень хочется - то можно все равно.

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

Мне понравилась идея с mqtt для flprog. В свободное время, пишу oauth2 (это войти через ...) на php7 но это не быстро продвигается, так как времени почти нет.

Отправлено спустя 1 час 37 минут 52 секунды:
Немного добавлю.
У mosquitto-auth-plugin фронтенда нет. Это просто плагин для комара. Все управление происходит через базу данных и отдельные фронтенды. Можно писать самому, или поискать, что то готовое, но я такого не нашел. Реализовать самому веб интерфейс не сложно, все технологии известны, весь затык в безопасной авторизации пользователей и красивости оформления. Кроме того автор mosquitto-auth-plugin перенес разработку в архив, видимо он отказывается это поддерживать. И если почитать issue то станет понятно почему. Тоесть как только mosquitto решит, что то обновить и поломает зависимости плагина плагин автоматически устареет. Я не знаю планы mosquitto примут ли они наработки или сделают свой плагин (а может уже сделали) и как дальше будет происходить развитие. Мне нужна поддержка ssl и вебсокетов в mosquitto и нашел этот контейнер. Возможно, есть что то другое. Если кто то подскажет буду рад.

структура базы это 2 таблицы. одна это пользователи, вторая это права доступа связаны между собой по username

Код: Выделить всё

DROP TABLE IF EXISTS `mqtt_users`;
CREATE TABLE `mqtt_users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(25) NOT NULL,
  `pw` varchar(128) NOT NULL,
  `super` int(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `mqtt_users_username` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

-- Table structure for table `mqtt_acls`

DROP TABLE IF EXISTS `mqtt_acls`;
CREATE TABLE `mqtt_acls` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(25) NOT NULL,
  `topic` varchar(256) NOT NULL,
  `rw` int(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`),
  UNIQUE KEY `mqtt_acls_user_topic` (`username`,`topic`(228))
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
если комар запущен в контейнере то сгенерировать пароль для пользователя можно так

Код: Выделить всё

docker exec -ti mqtt np -p secretpass
выхлоп добавить в поле pw пользователя.

Теперь с правами. У mosquitto они расширенные, а плагин не поддерживает столько (разработчик перенес в архив из-за бесконечных вопросов). Поэтому mqtt_acls.rw можно указать "2" согласно таблице это write access (w) в это же входит подписка.
Как известно, что бы посмотреть все что бегает по mqtt даже если суперпупер длииный и сложный путь можно в subscribe указать # и весь сервер будет доступен. Поэтому у каждого пользователя в базе в таблице mqtt_acls в поле topic нужно написать путь куда он может писать и от куда он может читать.
Eсли написать так /flprog/username/ то пользователь сможет писать и читать только тут. Но если написать /flprog/username/# то пользователю будет доступно все что после username например он сможет писать /flprog/username/mamkinhaker. Для админа сервера есть специальная установка super если она 1 то доступен еще и топик sys .
Конечно, если админ хочет смотреть, что там бегает по mqtt то ему можно прописать в базе в качестве пути # и любое сообщение будет ему доступно по любому пути.

Отправлено спустя 12 минут 21 секунду:
Работу авторизации проверить просто. Надо читать логи, если в контейнере то это будет docker logs -f имяконтейнера будет длинная портянка где можно увидеть сообщение об авторизации.
Если на сервере то скорее всего в директории logs надо искать и интерактивный вывод будет tail -f /путь/до/лога/комара. Куда писать лог указывается в mosquitto.conf проверьте, что пользователю от которого запущен комар есть права на запись лога.

Отправлено спустя 22 секунды:
Извините за много букв =)

Anydy

Наш сервер MQTT

#17

Сообщение Anydy » 01.07.2020{, 05:39}

RootShell, Спасибо за столь подробное изложение!
Хотелось бы установить брокер именно с фронтендом и бекэндом.....
Что то наподобии mqttcloud.....
Посмотрите...может это нам подойдет? - https://www.emqx.io/
Чтобы просмотреть панель мониторинга после запуска, откройте браузер: http: // localhost: 18083
насколько я понял то что нужно?

RootShell
Рядовой
Сообщения: 77
Зарегистрирован: 27.06.2020{, 04:22}
Репутация: 18
Откуда: World
Имя: Agat
Контактная информация:

Наш сервер MQTT

#18

Сообщение RootShell » 01.07.2020{, 05:55}

Добавлю еще:
Что бы установить комара с плагином на сервер его нужно собрать.
сперва ставим зависимости
apt install openssl build-base libressl-dev c-ares-dev git util-linux-dev cmake libxslt python2 mariadb-connector-c-dev
я не уверен, что все зависимости будут в debian/ubuntu называться именно так. Названия взяты из базового образа alpine 3.8

Клонипуем репозитории
git clone -b v1.5.5 https://github.com/eclipse/mosquitto.git
git clone -b 0.1.3 https://github.com/jpmens/mosquitto-auth-plug.git
-b какой branch использовать.
переходим в /build/mosquitto и делаем make -j (число ядер) нужные флаги.
при успешной сборке make install
Это если коротко сказать. Зачастую при сборке как всегда, чего то не хватает или что то обновилось. И приходится искать и удовлетворять зависимости. Так как это опенсорс надо читать issue, а иногда писать вопрос туда. Есть баги которые исправляют или самому исправлять и писать коммит. В общем docker решает эту проблему на корню и попутно еще много каких. Фактически docker это тот же чрут только немного прокаченный :smile469: Он так же исполняется в userspace как и чрут. У него идеология один демон = один контейнер. Если демон умер - перезапустить контейнер целиком. Ну и на основе этого наворачивают кюбернетсы которые распределенно держат несколько контейнеров, пока один перезагружается другой работает. Похоже на воркеров в том же апаче, но родитель kubernetes, а дети контейнеры с демонами. Хотя в линуксе говорить демоны неправильно там services. Плавают они в ластах быстрее, чем демоны freebsd в кедах. Но и склеивают их так же быстро.

Отправлено спустя 7 минут 28 секунд:
У него есть контейнер, и вебсокеты =) какая красота mqtt v5 . Еще и исходник доступен. Попробую поднять в контейнере

Отправлено спустя 14 минут 57 секунд:
что то я не могу дефольтный пароль пароль к нему найти

Отправлено спустя 1 минуту 26 секунд:
нашел, admin public

Отправлено спустя 1 минуту 36 секунд:
Серьезная машина =) я скинул в личку ip. Я не верю что это бесплатно ))) :smile225:

RootShell
Рядовой
Сообщения: 77
Зарегистрирован: 27.06.2020{, 04:22}
Репутация: 18
Откуда: World
Имя: Agat
Контактная информация:

Наш сервер MQTT

#19

Сообщение RootShell » 03.07.2020{, 00:09}

Я надеюсь Андрей вы разрешите использовать сторонний домен под mqtt сервер? домен нигде не публикуется, в рекламе не нуждаюсь, использую для себя, оплачиваю сам, скорость до сервера до 1gbt/s, брокер нужен самому поэтому буду поддерживать, до сервера 3 аплинка каналы стабильные, база под бэкапами, сервер под мониторингом.

Если честно, не представляю как перенести этот EMQx куда то. У него особые требования к базе mysql и настройкам хост машины. Пока неясно как сделать так, что бы пользователи регистрировались сами. Еще нужно сделать много мелких правок и первое время будет работать нестабильно. Но уже можно тестировать. Работает mqtt, вебсокеты с ssl и без. Пользовательские топики разграничены.

Anydy

Наш сервер MQTT

#20

Сообщение Anydy » 03.07.2020{, 00:23}

RootShell,
RootShell писал(а):
03.07.2020{, 00:09}
разрешите использовать сторонний домен под mqtt сервер?
Конечно! почему бы и нет)))
RootShell писал(а):
03.07.2020{, 00:09}
Пока неясно как сделать так, что бы пользователи регистрировались сами
Вот это и я пытаюсь найти решение ...как это сделать!

Ответить

Вернуться в «Облачные сервисы»