ARMStrong Server -- это легковесный и быстрый сервер приложения ARMStrong, которые выполняет 2 функции:
- Опрос измерительных каналов;
- Сохранение результатов измерений в базу данных.
ARMStrong Server является частью ARMStrong и на время разработки выделен в отдельный репозиторий.
Для удобства приложение было обёрнуто в Docker, для его первого запуска контейнер требуется собрать:
docker build -t armstrongserver .
docker run -d --privileged --restart unless-stopped armstrongserver
Здесь есть пара нюансов:
-
По умолчанию пользователь не включен в группу
dialout
, что не позволит исполняться приложению, получите ошибку:Unhandled exception. System.UnauthorizedAccessException: Access to the port '/dev/ttyUSB0' is denied.
Обычны такая проблема решается добавлением пользователя в группу
dialog
, но у нас приложение должно выполняться в контейнере, и можно пойти разными путями: запустить контейнер с привилегиями (не безопасно), добавить udev rule, примонтировать внутрь контейнера директорию и тд, подробности здесь.Исходите из требуемого уровня безопасности, в моём случае стойка не имеет доступа в интернет и мне достаточно запуска с ключем
--privileged
. -
Мы запускаем контейнер с ключем
--restart unless-stopped
, при возникновении проблемы на портах контейнер восстановит работу приложения. В случае возникновения проблем на уровне железа возможна ситуация, когда контейнер уйдет в loop. В такой ситуации не забывайте просто прибить контейнер перед новым запуском:docker ps #=> получаем имя контейнера docker stop <id>
Если ваша база данных запущена в другом контейнере, например, у вас несколько контейнеров на локальной машине запущено отдельно, вы можете
подключить контейнер с сервером в docker network
, в которой крутится docker-compose web-приложения с базой данных, например, и подключаться
по docker DNS или же просто по имени контейнера базы данных:
Смотрим название сети:
docker network ls
У меня, например, это будет armstrongweb_default
, в docker-compose прокинем эту сеть:
services:
server:
...
networks:
- armstrongweb_default
...
networks:
armstrongweb_default:
external: true
По умолчанию из соображения безопасности docker, как уже говорилось ранее, не может достучаться до /dev/ttyUSB
, исправим эту проблему
без предоставления административного доступа. Для этого просто прокинем в docker-compose.yml наши устройства:
services:
server:
...
devices:
- /dev/ttyUSB0:/dev/ttyUSB0
- /dev/ttyUSB1:/dev/ttyUSB1
И так нужно будет делать с каждым добавляемым ОВЕН-АС4. Добавили кусок в конфигурацию - добавили имя порта в секцию devices.