Device Manager може працювати всередині docker контейнеру під потрібну операційну систему.
Рекомендовано використати x64 LTS образ ubuntu 20.04.6.
Для роботи додатку на linux не потрібно наявність графіки(X11
та GTK 3
) в системі, тому можна обрати будь який інший образ із підтримуваних на власний розсуд.
👇 Важливо! Обов'язково до ознайомлення 👇
При роботі через Docker виникають наступні моменти які важливо врахувати:
Автооновлення та оновлення по кнопці "Оновити версію" через вебінтерфейс або через API метод /dm/api/v1/app-update
не буде оновлювати застосунок.
Зв'язана ця особливість з тим що за процес оновлення відповідає окрема служба(сервіс) в системі, відповідно не можливо їх запустити всередині одного контейнера та налаштувати потрібний процес оновлення далі.
Відповідно процес оновлення додатку наразі при роботі через Docker вам потрібно буде налаштувати самостійно.
При розгортанні застосунку за замовчуванням використовуєтсья база даних SQLite. Рекомендовано розгортати застосунок разом з Postgresql
або MS SQL
(на вибір) для забезпечення максимальної стабільності роботи та швидкодії.
Приклад автоматизації оновлення додатку при роботі через Docker та розгортання додатку для роботи з Postgresql
буде додано згодом на даній сторінці.
👆 Важливо! Обов'язково ознайомтесь з інформацією вище 👆
В даному прикладі встановлення на x64 LTS версії Ubuntu amd64/20.04.
Dockerfile виглядає наступним чином:
FROM amd64/ubuntu:20.04
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Europe/Kyiv
RUN apt-get update \
&& apt-get install -y curl tzdata locales \
&& locale-gen uk_UA.UTF-8 \
&& curl -s -L https://github.com/jqlang/jq/releases/download/jq-1.7.1/jq-linux-amd64 --output /usr/bin/jq \
&& chmod +x /usr/bin/jq \
&& curl -s https://kasa.vchasno.ua/api/v2/dm/versions -o ver.json \
&& HOSTNAME=`jq -r '.hostname' ver.json` \
&& DM_STABLE=`jq -r '.ver.linux.x64' ver.json` \
&& curl -s "${HOSTNAME}/DeviceManager_${DM_STABLE}.deb" --output /usr/src/dm.deb \
&& (dpkg -i --force-all /usr/src/dm.deb || true) \
&& apt-get clean \
&& rm -f /usr/bin/jq \
&& rm -f ver.json \
&& rm -rf /var/lib/{apt,dpkg,cache,log}/ \
&& echo "[Server]\nServerPort=3939\nRemoteAccess=1\nLogsPath=/usr/share/edm/Logs/\nUseHttps=0\nCertFile=\nKeyFile=\nKeyPass=" > /usr/share/edm/EDMSrv.ini \
&& echo "\n\n[Database]\nType=\nServer=\nPort=\nDBName=/var/lib/edm/main.s3db\nLogin=\nPass=" >> /usr/share/edm/EDMSrv.ini
ENV LC_ALL=uk_UA.UTF-8
ENV LANG=uk_UA.UTF-8
ENV LANGUAGE=uk_UA.UTF-8
CMD ["/usr/share/edm/EDMSrv"]
Залежності:
curl
- для отримання інформації по останній версії ДМ та завантаження даної версії.
jq
- для розбору json і, відповідно, отримання інформації про останню весрію ДМ автоматично.
Для коректної роботи потрібно створити теку для зберігання логів та директорію для файлу БД SQLite.
При розгортанні разом з Postgresql
або MS SQL
створювати теку для БД не потрібно.
Команди збірки та запуску:
docker build -t my_DM_build -f ./Dockerfile .
docker run -it -p 8055:3939 \
-w /usr/share/edm \
-v "$(pwd)/logs:/usr/share/edm/Logs" \
-v "$(pwd)/db_dir:/var/lib/edm" \
my_DM_build \
/usr/share/edm/EDMSrv
В прикладі - інтерактивний режим (-it), але можна використовувати і detached (-d)
Аналог для запуску через docker-compose
Так як і в минулому способі якщо розгортати разом з Postgresql
або MS SQL
створювати теку для БД в volumes
не потрібно.
services:
dm:
build:
context: .
dockerfile: ./Dockerfile
platform: linux/x86_64
working_dir: /usr/share/edm
volumes:
- ./host_logs_dir:/usr/share/edm/Logs
- ./host_database_dir:/var/lib/edm
ports:
- "8055:3939"
entrypoint:
- /bin/sh
- -c
- |
echo "http://localhost:8055/dm/vchasno-kasa/"
/usr/share/edm/EDMSrv
docker-compose up
http://localhost:8055/dm/vchasno-kasa/
) буде на 8055 порту (за умови якщо не змінювали порт при збірці або в docker-compose).