Skip to content

Сервер хардверной части платформы ARMStrong опрашивающий блоки детектирования при помощи канала связи.

License

Notifications You must be signed in to change notification settings

digital-armstrong/Armstrong.Server

Repository files navigation

ARMStrong server

ARMStrong Server -- это легковесный и быстрый сервер приложения ARMStrong, которые выполняет 2 функции:

  • Опрос измерительных каналов;
  • Сохранение результатов измерений в базу данных.

ARMStrong Server является частью ARMStrong и на время разработки выделен в отдельный репозиторий.

Первый запуск

Для удобства приложение было обёрнуто в Docker, для его первого запуска контейнер требуется собрать:

docker build -t armstrongserver .

docker run -d --privileged --restart unless-stopped armstrongserver

Здесь есть пара нюансов:

  1. По умолчанию пользователь не включен в группу dialout, что не позволит исполняться приложению, получите ошибку:

    Unhandled exception. System.UnauthorizedAccessException: Access to the port '/dev/ttyUSB0' is denied.

    Обычны такая проблема решается добавлением пользователя в группу dialog, но у нас приложение должно выполняться в контейнере, и можно пойти разными путями: запустить контейнер с привилегиями (не безопасно), добавить udev rule, примонтировать внутрь контейнера директорию и тд, подробности здесь.

    Исходите из требуемого уровня безопасности, в моём случае стойка не имеет доступа в интернет и мне достаточно запуска с ключем --privileged.

  2. Мы запускаем контейнер с ключем --restart unless-stopped, при возникновении проблемы на портах контейнер восстановит работу приложения. В случае возникновения проблем на уровне железа возможна ситуация, когда контейнер уйдет в loop. В такой ситуации не забывайте просто прибить контейнер перед новым запуском:

    docker ps #=> получаем имя контейнера
    docker stop <id>

Запуск контейнера в docker-compose

Если ваша база данных запущена в другом контейнере, например, у вас несколько контейнеров на локальной машине запущено отдельно, вы можете подключить контейнер с сервером в 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.

About

Сервер хардверной части платформы ARMStrong опрашивающий блоки детектирования при помощи канала связи.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published