/
Полезности

Полезности

Тип статьи

Полезные знания

Компетенции

Администратор

Необходимые права

root

Версия платформы

2.24

Статус

Бета

Сложность 

легко

 

 

Дополнительные сведения

 

 

1. Логин в Яндекс Регистре с помощью iam токена


docker login \ --username iam \ --password <IAM_TOKEN> \ cr.yandex

Вместо <IAM_TOKEN> подставляем свой токен вида 

tgoih3j4tug390gj34ghj390o85ytug30pough5jio3eg5034u9ty053p4wujgh45ophjg0459oyuhgj45hg04589ugjeoipwjgk590gjw4959u999t99jw4ejg5904wguj

 

Команду вполне возможно придется вводить с sudo, особенно, если run.sh запускает тоже с sudo. Иначе run.sh покажет ошибку авторизации, как будто не видит факта успешного логина.

 

2. Healthchecks


У трех докер контейнеров есть хелсчеки, это admin, portal and export-service. В некоторых ситуациях, например, при чрезмерной загрузке ресурсов сервера, healthchecks могут вызывать перезапуски этих контейнеров. Ниже пример из platform.yml для увеличения интервалов и кол-ва попыток для принудительного предотвращения перезапуска контейнеров.

Пример из YML
admin: image: ${DOCKER_REPO_PREFIX}${ADMIN_TAG} healthcheck: test: ["CMD", "curl", "-f", "http://localhost:80/health"] interval: 30s timeout: 960s retries: 50 start_period: 40s depends_on: - proxy - mongodb volumes: - /etc/localtime:/etc/localtime:ro - database-backups:/visiology/database_backups - hardwareid:/visiology/admin/app/license/keys/hardwareid - /docker-volume/admin/portalImages:/visiology/admin/portalImages - /docker-volume/admin/useFiscalCalendar:/visiology/admin/useFiscalCalendar environment: - VPROXY_URL=${PLATFORM_URL:-proxy} - POLICY=${POLICY} labels: component: "admin" secrets: - MONGO_AUTH_USER - MONGO_AUTH_PASSWORD << : *deploy_platform << : *logging_options portal: image: ${DOCKER_REPO_PREFIX}${PORTAL_TAG} healthcheck: test: ["CMD", "curl", "-f", "http://localhost:80/health"] interval: 30s timeout: 960s retries: 50 start_period: 40s depends_on: - dashboard-viewer volumes: - /etc/localtime:/etc/localtime:ro labels: component: "portal" << : *deploy_platform << : *logging_options

 

3. Скрипты, упрощающие работу


install-docker-ubuntu.sh | Установка последней версии Docker и Docker-Compose на Ubuntu. После выполнения установки нужно перезайти в терминал.
remove_visiology.sh | Удаление Visiology (сервисы, подсети, тома, образы). Подходит только, если на Docker работает исключительно платформа, т. к. может удалить ваши дополнительные Docker ресурсы.
mongorestore.sh | Быстрое восстановление БД на основе имеющегося дампа. ВАЖНО: В переменной BKP_PATH задаём название директории с выбранным бэкапом из папки /var/lib/docker/volumes...

 

4. Долгий запуск докер сервисов в закрытом контуре


Если сервер платформы не имеет выхода в интернет, то есть вероятность, что докер сервисы будут стартовать очень долго. Связано это с недоступностью DNS серверов.

Глубокого исследования в работе этого механизма не проводилось. Есть только некоторые заметки ниже.

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

  2. В ином случае много зависит от инфраструктуры, через что запросы на DNS проходят (фаерволлы, маршрутизаторы). Здесь уже большая вероятность в необходимости ожидания таймаута. В разных средах запуск одного сервера может занимать от секунды до десятка секунд и выше. Если умножить на кол-во Docker сервисов, то такие такое время перезапуска платформы может быть не приемлемо.

  3. По всей видимости при создании сервисов Docker обращается по своим делам в реестр. В случае с платформой на момент написания этой заметки используется Яндекс регистр образов с адресом cr.yandex.


Выбор решения зависит от предпочтений администратора сервера. Универсальных быстрых решения два:

  1. Прописать в /etc/hosts сервера с платформой следующую строчку:

    127.0.0.1 cr.yandex

     

  2. Добавить параметр к разворачиванию стека --resolve-image never в run.sh. Кусочек скрипта с добавленным флагом ниже:

Если для сервера в будущем откроется выход в Интернет (хотя бы к cr.yandex) в том числе для выкачивания Docker образов напрямую из Яндекс регистра, эту запись в hosts естественно нужно убрать.

 

5. Проверка SMTP


https://adminkit.net/smtp_diag_tool.aspx | Для случаев, если не удается настроить SMTP клиент в платформе, и нужно понять, какие параметры поддерживает почтовый сервер.

 

6. Список всех опубликованных дашбордов


Для просмотра списка всех опубликованных дашбордов, можно воспользоваться следующим запросом:
GET http://адрес_платформы/admin/api/webAppDashboards

7. Favicon


Чтобы поменять иконку, можно в nginx в каждом location, где своя иконка, прописать

А сам favicon.ico положить в customjs папку

8. Проблема с часовыми поясами в ViQube


Бывает происходит такая ситуация, что при запросе данных в каком-то менеджере СУБД из SQL вы получаете одни данные, а при запросе тех же данных в загрузчике ViQube вы получаете другие данные (итоговое значение меньше).
Как выяснилось это происходит из-за того, что ваш СУБД менеджер как правило работает под вашим локальным часовым поясом, а загрузчик ViQube работает в GMT поясе (Гринвич). Если быть конкретнее, то функции, которые используются в SQL запросе, например now() покажут разное время и в следствии чего запрос вернёт различные данные. Сам же сервер СУБД обычно работает в вашем же поясе, либо данные которые ему поступают идут с датой и временем из вашего пояса.

Например вы хотите вернуть суммарные значения за предыдущий час, ваш часовой пояс МСК, вы выполняете в менеджере:

В ответ получаете ожидаемое значение.
Далее выполняете такой-же запрос в загрузчике и что происходит. JDBC драйвер в загрузчике выполняет функцию now() из под пояса GMT, т.е. он -3 с МСК. Запрос который отправится на сервер будет иной, т.к. now() будет -3 часа и собственно данные которые придут в ответ будут другие, значение будет меньше.

Чтобы этого избежать, можно прокинуть файл timezone в контейнер ViQube, т.к. Java машина ориентируется на него. После этого JDBC драйвер будет знать ваш часовой пояс и now() будет возвращать такую же дату как и в менеджере.
Чтобы это сделать, необходимо открыть файл viqube.yml и в блок volumes в конец добавить строчку:

Далее перезапускаем платформу и проверяем.

9. Оффлайн карта для Leaflet


По умолчанию leaflet работает с онлайн ресурсами, по умолчанию используется такой адрес: https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png
Но как быть если на сервере отсутствует выход в интернет? Для этого необходимо скачать карту, точнее её участок себе на внутренний ресурс либо в папку customjs.

Для этого нам понадобится следующее ПО - http://wiki.openstreetmap.org/index.php/JTileDownloader
Переходим по ссылке и скачиваем последнюю версию. Распаковываем и запускаем, тут надо учесть один нюанс, программа написана на Java и требует установленной явы машины.
После запуска нас интересует несколько полей:

Paste URL - тут вводим ссылку нужного участка, ссылку можно взять с OpenStreetMap единственное, её придётся подредактировать.
Нам нужна ссылка такого вида - https://www.openstreetmap.org/?lat=54.127&amp;lon=42.330&amp;zoom=7&amp
А опенстритмап отдаёт такой вариант - https://www.openstreetmap.org/#map=7/54.127/42.330
Поэтому просто копируем, приводим к нужному виду и вставляем в поле.

Radius (km) - радиус скачивания тайлов (участков карты).

Output zoom level - уровень зума.

Output zoom levels - дополнительные уровни зума.

Outputfolder - каталог в который будут загруженны тайлы.

После настройки нажимаем на Download Tiles и ждём, если участок карты достаточно большой, скачивание займёт приличное время.

После скачивания мы получим структуру папок: уровень_зума/x/y.png

Данную структуру следует залить на ваш внутренний ресурс или в папку customjs на сервере. Далее в коде меняем url карты, если это customjs то урл будет примерно такой:
https://example.visiology.su/viewer/custom/tiles/{z}/{x}/{y}.png

Готово! Теперь карта будет загружаться с вашего ресурса.

10. Запуск Dashboard Designer без прав администратора


  1. Скачиваем DD: address_of_platform/admin/api/downloadDesigner.

  2. Распаковываем, создаём ярлык exe файла.

  3. Добавляем в target ярлыка(через пробел) “http(s)://address_of_platform/admin”.

  4. Запускаем.

Таким образом можно запускать Дизайнер без установки лаунчера в Program Files и без доступа на запись в ProgramData. Но нужно не забывать соблюдать версионность: после обновления платформы нужно все шаги повторить, чтобы версии Дизайнера и платформы совпадали. В обычной установке за этим следит лаунчер, здесь нужно самостоятельно.

Related content

Рекомендации по JS для аналитика
Рекомендации по JS для аналитика
Read with this
Установка компонентов на один сервер
Установка компонентов на один сервер
More like this
Кросс - авторизация
Кросс - авторизация
Read with this
Запуск платформы на кастомной версии компонента
Запуск платформы на кастомной версии компонента
More like this
MongoDB | Работа в CLI
MongoDB | Работа в CLI
Read with this
Установка компонентов на один сервер
Установка компонентов на один сервер
More like this