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
RUN apt-get update \
&& apt-get install -y curl \
&& curl -s -L https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64 --output /usr/bin/jq \
&& chmod +x /usr/bin/jq \
&& DM_STABLE=`curl -s https://kasa.vchasno.ua/api/v2/dm/versions | jq -r '.ver.linux.x64'` \
&& curl -s "https://dm-releases.c.prom.st/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 -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
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
не потрібно.
version: '3'
services:
dm:
build:
context: .
dockerfile: ./Dockerfile
working_dir: /usr/share/edm
volumes:
- ./host_logs_dir:/usr/share/edm/Logs
- ./host_database_dir:/var/lib/edm
ports:
- "8055:3939"
command: /usr/share/edm/EDMSrv
docker-compose up
http://localhost:8055/dm/vchasno-kasa/
) буде на 8055 порту (за умови якщо не змінювали порт при збірці або в docker-compose).