Тип статьи | Полезные знания |
---|---|
Компетенции | Администратор |
Необходимые права | 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 серверов.
Глубокого исследования в работе этого механизма не проводилось. Есть только некоторые заметки ниже.
Если мы явно заблокируем DNS сервера, например на прокси, то запуск будет быстрый. Связано это с тем, что пакеты моментально отклоняются правилами и никакого ожидания не происходит.
В ином случае много зависит от инфраструктуры, через что запросы на DNS проходят (фаерволлы, маршрутизаторы). Здесь уже большая вероятность в необходимости ожидания таймаута. В разных средах запуск одного сервера может занимать от секунды до десятка секунд и выше. Если умножить на кол-во Docker сервисов, то такие такое время перезапуска платформы может быть не приемлемо.
По всей видимости при создании сервисов Docker обращается по своим делам в реестр. В случае с платформой на момент написания этой заметки используется Яндекс регистр образов с адресом cr.yandex.
Выбор решения зависит от предпочтений администратора сервера. Универсальных быстрых решения два:
Прописать в /etc/hosts сервера с платформой следующую строчку:
127.0.0.1 cr.yandex
Добавить параметр к разворачиванию стека --resolve-image never в run.sh. Кусочек скрипта с добавленным флагом ниже:
eval ${ENVIRONMENT_VARIABLES} docker stack deploy --resolve-image never ${composeFilesString} ${STACK_NAME}
Если для сервера в будущем откроется выход в Интернет (хотя бы к cr.yandex) в том числе для выкачивания Docker образов напрямую из Яндекс регистра, эту запись в hosts естественно нужно убрать.
5. Проверка SMTP
https://adminkit.net/smtp_diag_tool.aspx | Для случаев, если не удается настроить SMTP клиент в платформе, и нужно понять, какие параметры поддерживает почтовый сервер.
6. Список всех опубликованных дашбордов
Для просмотра списка всех опубликованных дашбордов, можно воспользоваться следующим запросом:GET http://адрес_платформы/admin/api/webAppDashboards
7. Favicon
Чтобы поменять иконку, можно в nginx в каждом location, где своя иконка, прописать
sub_filter '/папка_модуля/favicon.ico' '/viewer/custom/favicon.ico'
А сам favicon.ico положить в customjs папку
8. Проблема с часовыми поясами в ViQube
Бывает происходит такая ситуация, что при запросе данных в каком-то менеджере СУБД из SQL вы получаете одни данные, а при запросе тех же данных в загрузчике ViQube вы получаете другие данные (итоговое значение меньше).
Как выяснилось это происходит из-за того, что ваш СУБД менеджер как правило работает под вашим локальным часовым поясом, а загрузчик ViQube работает в GMT поясе (Гринвич). Если быть конкретнее, то функции, которые используются в SQL запросе, например now() покажут разное время и в следствии чего запрос вернёт различные данные. Сам же сервер СУБД обычно работает в вашем же поясе, либо данные которые ему поступают идут с датой и временем из вашего пояса.
Например вы хотите вернуть суммарные значения за предыдущий час, ваш часовой пояс МСК, вы выполняете в менеджере:
select sum(value) from "testTimeZones" ttz where date > now() - interval '1 hours'
В ответ получаете ожидаемое значение.
Далее выполняете такой-же запрос в загрузчике и что происходит. JDBC драйвер в загрузчике выполняет функцию now() из под пояса GMT, т.е. он -3 с МСК. Запрос который отправится на сервер будет иной, т.к. now() будет -3 часа и собственно данные которые придут в ответ будут другие, значение будет меньше.
Чтобы этого избежать, можно прокинуть файл timezone в контейнер ViQube, т.к. Java машина ориентируется на него. После этого JDBC драйвер будет знать ваш часовой пояс и now() будет возвращать такую же дату как и в менеджере.
Чтобы это сделать, необходимо открыть файл viqube.yml и в блок volumes в конец добавить строчку:
- /etc/timezone:/etc/timezone:ro
Далее перезапускаем платформу и проверяем.
9. Оффлайн карта для Leaflet
По умолчанию leaflet работает с онлайн ресурсами, по умолчанию используется такой адрес: https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png
Но как быть если на сервере отсутствует выход в интернет? Для этого необходимо скачать карту, точнее её участок себе на внутренний ресурс либо в папку customjs.
Для этого нам понадобится следующее ПО - http://wiki.openstreetmap.org/index.php/JTileDownloader
Переходим по ссылке и скачиваем последнюю версию. Распаковываем и запускаем, тут надо учесть один нюанс, программа написана на Java и требует установленной явы машины.
После запуска нас интересует несколько полей:
Paste URL - тут вводим ссылку нужного участка, ссылку можно взять с https://www.openstreetmap.org/ единственное, её придётся подредактировать.
Нам нужна ссылка такого вида - https://www.openstreetmap.org/?lat=54.127&lon=42.330&zoom=7&
А опенстритмап отдаёт такой вариант - 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
Готово! Теперь карта будет загружаться с вашего ресурса.