Обновление и установка Системы с использованием Ansible#
Подготовка к установке#
Развертывание или обновление Системы с помощью Ansible возможно при наличии прямого доступа по SSH к необходимому стенду с рабочего ПК.
Развертывание или обновление Системы с помощью Ansible возможно при использовании Ansible непосредственно на сервере приложения или ином сервере, который находится в той же локальной сети, что и сервер приложения.
При использовании ОС Windows, необходимо предварительно установить Docker. Скачать Docker можно по ссылке: https://docs.docker.com/desktop/install/windows-install/.
При использовании ОС Unix, необходимо предварительно установить средства поддержки контейнеризации Docker.
Актуальная версия утилиты расположена в установочном пакете. Выберите версию, которая будет соответствовать версии сборки артефактов.
Создание и редактирование inventory.yml файла#
Этап создания можно пропустить, если уже имеется сконфигурированный inventory.yml файл.
Для того чтобы отредакатировать inventory.yml файл:
Перейдите в директорию ansible.
Скопируйте содержимое папки inventory/prod/etalon в новую директорию с именем inventory/prod/dir_name, где dir_name — имя директории (например, tumen). Как правило имя директории основывается на названии проекта для которого настраивается конфигурация. Директория inventory/prod/etalon представляет собой эталон конфигурации, где описан пример inventory.yml файла, а также файлов, которые содержат данные для подключения к стендам — имя пользователя с правами sudo и пароль для подключения.
Важно
Не рекомендуется без необходимости изменять структуру каталогов и файлов данной директории. В противном случае возможны ошибки в работе с Ansible.
Откройте файл inventory/prod/dir_name/inventory.yml.
Структура inventory.yml файла по умолчанию представлена ниже.
[geometa-app]
app-1 ansible_host=192.168.10.1
[geometa-db]
db-1 ansible_host=192.168.20.1
[geometa-gs]
gs-1 ansible_host=192.168.30.1
[geometa-fs]
fs-1 ansible_host=192.168.40.1
[all:children]
geometa-app
geometa-db
geometa-gs
geometa-fs
Где:
geometa-app
,geometa-db
,geometa-gs
,geometa-fs
— имена групп хостов, представляющие собой группу серверов приложений, баз данных, геосерверов и файловых хранилищ, соответственно;
app-1
,db-1
,gs-1
,fs-1
— имена сервера приложения, базы данных, геосервера, файлового хранилища, соответственно;
ansible_host
— переменная Ansible, которая содержит IP-адерс для подключения к хосту (стенд/виртуальная машина/сервер);
[all:children]
— обязательный блок, который содержит в себе все группы хостов одновременно.
Если какие-либо компоненты Cистемы дублируются, например, на проекте расположено два геосервера на разных хостах (стенд/виртуальная машина/сервер), то необходимо в группу geometa-gs добавить еще одну строку:
gs-2 ansible_host=192.168.30.2
Где:
gs-2
— имя геосервера. Имя должно быть идентичным для всех пунктов, необходимо менять лишь индекс (в данном примере - это цифра 2);192.168.30.2
— IP-адрес хоста (стенд/виртуальная машина/сервер), на котором расположен второй экземпляр геосервера.
Необходимо изменить значения IP-адресов стендов сервера приложения, базы данных, геосервера и файлового хранилища на значения, которые соответствуют устанавливаемому проекту.
Если подключение до целевого сервера осуществляется через порт, отличный от стандартного — 22, то будет выглядеть следующим образом:
app-1 ansible_host=192.168.30.1 ansible_port=3333
Где:
app-1
— имя сервера приложения. Имя должно быть идентичным для всех пунктов;192.168.30.1
— IP-адрес хоста (стенд/виртуальная машина/сервер) через который осуществляется проброс до целевого сервера;3333
— порт ssh через который осуществляется проброс до целевого сервера.
Если какие-либо компоненты Cистемы располагаются на одном и том же хосте (стенд/виртуальная машина/сервер), то необходимо продублировать IP-адрес в соответствующих блоках.
Пример
Например, если сервер приложений имеет IP-адрес 10.0.43.126, база данных 10.0.43.135, геосервер и файловое хранилище расположены по IP-адресу 10.0.43.128, то результирующий inventory.yml файл будет выглядеть слеудющим образом:
[geometa-app]
app-1 ansible_host=10.0.43.126
[geometa-db]
db-1 ansible_host=10.0.43.135
[geometa-gs]
gs-1 ansible_host=10.0.43.128
[geometa-fs]
fs-1 ansible_host=10.0.43.128
[all:children]
geometa-app
geometa-db
geometa-gs
geometa-fs
Редактирование host vars#
Для того чтобы отредакатировать host vars файл:
Перейдите в директорию inventory/prod/dir_name/host_vars, где dir_name — имя директории (например, tumen). Как правило имя директории основывается на названии проекта для которого настраивается конфигурация.
Заполните во всех файлах данного каталога следующую информацию:
ansible_user:`имя пользователя для подключения к стенду`
ansible_password:`пароль пользователя для подключения к стенду`
ansible_become_password:`пароль пользователя для подключения к стенду`
Где:
имя пользователя для подключения к стенду
— имя пользователя для подключения к серверу приложений (виртуальной машине/стенду);пароль пользователя для подключения к стенду
— пароль пользователя для подключения к серверу приложений (виртуальной машине/стенду);
Дополните перечень файлов, если используется несколько машин, а именно несколько геосерверов или серверов приложений (открытый и закрытый контур). Например, при наличии трёх геосерверов и еще одного сервера приложений, необходимо создать файлы gs-2, gs-3, app-2 и внести в них следующие данные:
ansible_user:`имя пользователя для подключения к стенду`
ansible_password:`пароль пользователя для подключения к стенду`
ansible_become_password:`пароль пользователя для подключения к стенду`
Где:
имя пользователя для подключения к стенду
- имя пользователя для подключения к серверу приложений (виртуальной машине/стенду);пароль пользователя для подключения к стенду
- пароль пользователя для подключения к серверу приложений (виртуальной машине/стенду);
Пример заполнения файла
Пример заполнения файла, где user
- имя пользователя для подключения к серверу приложений (виртуальной машине/стенду), Qwerty123
- пароль пользователя для подключения к серверу приложений (виртуальной машине/стенду):
ansible_user: 'user'
ansible_password: 'Qwerty123'
ansible_become_password: 'Qwerty123'
Примечание
Если приватный ключ в формате .ppk, то конвертируйте ключ в формат openssh, следуя инструкции.
Поместите приватный ключ в директорию ansible/vault/.
Перейдите в директорию inventory/prod/dir_name/host_vars, где
dir_name
- имя директории (например, tumen). Как правило имя директории основывается на названии проекта для которого настраивается конфигурация.Откройте файл inventory/prod/dir_name/host_vars/app-1 и внесите следующие данные:
ansible_user:`имя пользователя для подключения к стенду` ansible_ssh_private_key_file:`путь до приватного ключа`
Где:
имя пользователя для подключения к стенду
- имя пользователя для подключения к серверу приложений (виртуальной машине/стенду);путь до приватного ключа
- абсолютный путь до приватного ключа для подключения к серверу приложений (виртуальной машине/стенду).
Откройте файл inventory/prod/dir_name/inventory.yml/db-1 и внесите следующие данные:
ansible_user:`имя пользователя для подключения к стенду` ansible_ssh_private_key_file:`путь до приватного ключа`
Где:
имя пользователя для подключения к стенду
- имя пользователя для подключения к серверу приложений (виртуальной машине/стенду);путь до приватного ключа
- абсолютный путь до приватного ключа для подключения к серверу приложений (виртуальной машине/стенду).
Откройте файл inventory/prod/dir_name/inventory.yml/fs-1 и внесите следующие данные:
ansible_user:`имя пользователя для подключения к стенду` ansible_ssh_private_key_file:`путь до приватного ключа`
Где:
имя пользователя для подключения к стенду
- имя пользователя для подключения к серверу приложений (виртуальной машине/стенду);путь до приватного ключа
- абсолютный путь до приватного ключа для подключения к серверу приложений (виртуальной машине/стенду).
Откройте файл inventory/prod/dir_name/inventory.yml/gs-1 и внесите следующие данные:
ansible_user:`имя пользователя для подключения к стенду` ansible_ssh_private_key_file:`путь до приватного ключа`
Где:
имя пользователя для подключения к стенду
- имя пользователя для подключения к серверу приложений (виртуальной машине/стенду);путь до приватного ключа
- абсолютный путь до приватного ключа для подключения к серверу приложений (виртуальной машине/стенду).
Если используется несколько геосерверов, необходимо создать файл gs-2..n.:
Внесите в файл следующие данные:
ansible_user:`имя пользователя для подключения к стенду` ansible_ssh_private_key_file:`путь до приватного ключа сертификата`
Где:
имя пользователя для подключения к стенду
- имя пользователя для подключения к серверу приложений (виртуальной машине/стенду);путь до приватного ключа
- абсолютный путь до приватного ключа для подключения к серверу приложений (виртуальной машине/стенду).
Пример заполнения файла
Пример заполнения файла, где user
- имя пользователя для подключения к серверу приложений (виртуальной машине/стенду), /ansible/vault/id_rsa_tumen
- абсолютный путь до приватного ключа пользователя для подключения к серверу приложений (виртуальной машине/стенду):
ansible_user: 'user' ansible_ssh_private_key_file: '/ansible/vault/id_rsa_tumen'
Импорт Docker-контейнера, сконфигурированного для работы Ansible#
Если работаете под управлением ОС Windows и не имеете доступа к репозиторию registry.gemsdev.ru (можно проверить, выполнив в командной строке команду ping на адрес registry.gemsdev.ru):
Откройте командную строку от имени администратора.
Перейдите в директорию ansible.
Загрузите докер-образ из .tar архива (по умолчанию данный архив находится в директории ansible и имеет название docker_ansible.tar) с помощью команды:
docker load -i docker_ansible.tar
Примечание
Данный этап подходит в случае, когда планируется использовать Ansible с промежуточной машины, к которой подключаетесь по RDP, либо вы не находитесь в локальной сети компании ООО «Джемс Девелопмент».
Если работаете под управлением ОС Unix или, например, находитесь на сервере приложения или ином сервере, который находится в локальной сети сервера приложения:
Убедитесь, что на сервере установлены средства поддержки контейнеризации Docker и Docker-compose.
Скопируйте директорию ansible на сервер, например, в директорию /opt/ansible/.
Перейдите в директорию ansible и выполните команду:
sudo /bin/bash ansible_load.sh
Примечание
Данный этап подходит в случае, когда планируется использовать Ansible непосредственно с сервера приложения, либо вы находитесь в локальной сети сервера приложения (т.е. на каком-либо из стендов конкретного проекта).
Редактирование vars.yml файла#
Файл глобальных переменных для запуска ролей, выполняющих установку Системы находится в корневой директории ansible и имеет название vars.yml. Текущий vars.yml-файл содержит эталонную (дефолтную) конфигурацию для развёртывания.
Для шифрования данных внутри файла vars.yml запустите докер-образ и перейдите в Docker-контейнеры:
docker run -it --rm -v 'абсолютный путь до директории ansible':/ansible registry.gemsdev.ru/ansible-ubuntu:latest /bin/bash
Где:
абсолютный путь до директории ansible
является абсолютным путем до директории ansible, которая присутствует в данном репозитории. Например, /opt/ansible для ОС Unix или \OutputDir\ansible-build\ansible для ОС Windows.
Примечание
Во время выполнения следующих команд Cистема будет запрашивать пароль. В качестве пароля может выступать любая комбинация символов. Важно, запомнить и использовать одинаковый пароль при генерации всех шифрованных данных в рамках одного проекта. Он понадобится на этапе запуска установки и обновления компонентов с помощью Ansible.
При утрате пароля необходимо повторить все этапы данного пункта вновь, опираясь на текущую инструкцию.
Для шифрования данных внутри файла vars.yml выполните команду:
ansible-vault encrypt vars.yml
Выйдите с Docker-контейнера с помощью команды:
exit
Генерация шифрованных данных#
Необходимо заполнить соответствующие файлы зашифрованными данными для доступа к узлам (учетными данными ssh).
Примечание
Во время выполнения следующих команд Cистема будет запрашивать пароль. В качестве пароля может выступать любая комбинация символов. Необходимо использовать одинаковый пароль при генерации всех шифрованных данных в рамках одного проекта. Пароль понадобится на этапе запуска установки и обновления компонентов с помощью Ansible. При утрате пароля необходимо повторить все этапы данного пункта вновь, опираясь на текущую инструкцию.
Чтобы заполнить файлы зашифрованными данными, выполните следующие команды:
Если Вы работаете под ОС Windows:
Откройте командную строку от имени администратора. Данный шаг можно пропустить, если вы работаете под управлением ОС Unix.
Запустите докер-образ и перейдите в Docker-контейнер:
docker run -it --rm -v 'абсолютный путь до директории ansible':/ansible registry.gemsdev.ru/ansible-ubuntu:latest /bin/bash
Где:
абсолютный путь до директории ansible
- является абсолютным путем до директории ansible , которая присутствует в данном репозитории. Например, /opt/ansible для ОС Unix или \OutputDir\ansible-build\ansible для ОС Windows.
Перейдите в директорию с файлами Ansible:
cd /ansible/inventory/prod/'директория проекта'/host_vars/
Где:
директория проекта
- имя созданной ранее директории (например, tumen), в папке inventory/prod/.
Зашифруйте отредактированные ранее файлы с помощью команды:
ansible-vault encrypt наименование_файла
Пример:
ansible-vault encrypt app-1
Выполните команду:
chmod -R 600 /ansible/vault/*
Примечание
Данный пункт необходимо выполнить, если для подключения к стенду вы используете сочетание логина и приватного ключа пользователя.
Чтобы зашифровать данные внутри файла vars.yml, запустите докер-образ и перейдите в Docker-контейнеры:
docker run -it --rm -v 'абсолютный путь до директории ansible':/ansible registry.gemsdev.ru/ansible-ubuntu:latest /bin/bash
Где:
абсолютный путь до директории ansible
- является абсолютным путем до директории ansible , которая присутствует в данном репозитории. Например, /opt/ansible для ОС Unix или \OutputDir\ansible-build\ansible для ОС Windows.
Выполните команду:
ansible-vault encrypt vars.yml
Выйдите из Docker-контейнера с помощью следующей команды:
exit
После этого inventory.yml-файл и прочие файлы конфигурации готовы к использованию.
Примечание
Чтобы расшифровать файл, выполните команду:
ansible-vault decrypt наименование_файла
Формирование Docker-команды с помощью утилиты GDC#
Утилита GDC предназначена для формирования Docker-команды и запуска Docker-контейнера, необходимого для установки Системы и перечня дополнительного ПО с помощью средства автоматического развёртывания и конфигурирования серверов Ansible.
Утилита поставляется на семейства ОС Windows и Unix. Запускается в интерфейсе командной строки (ОС Windows) или терминальном режиме (ОС Unix). Актуальная версия утилиты расположена в установочном пакете. Утилита принимает в себя ряд обязательных и вспомогательных аргументов.
Стуктура команды:
goBuild.exe -mod-file 'абсолютный путь до файла'ansible_modules.json -i 'абсолютный путь до файла интвентаризации'inventory.yml -l app-1 --ask-pass --install -astra -unix
Где:
Флаг
-mod-file
является обязательным и указывает на абсолютный путь до файла modules.json, который хранит в себе список тегов инсталлируемых сервисов.
Пример
goBuild.exe -mod-file C:\Users\gems\Downloads\tumen\ansible_modules.json # ОС Windows
goBuild -mod-file /home/user/gems/artifacts/ansible_modules.json # ОС Unix
Флаг
-i
является обязательным и указывает на абсолютный путь до inventory.yml файла, относительно директории ansible (данный файл лежит внутри директории ansible и создается индивидуально под каждый проект, к примеру, для тюменского проекта путь может быть таким inventory/prod/tumen/inventory.yml).
Пример
goBuild.exe -i D:\Release\ansible\inventory\prod\tumen\inventory.yml # ОС Windows
goBuild -i /home/user/gems/ansible/inventory/prod/tumen/inventory.yml # ОС Unix
Флаг
-l
является обязательным и указывает на имя хоста или группы хостов, на которые необходимо провести инсталляцию сервисов.
Пример
goBuild.exe -l app-1 # ОС Windows
goBuild -l app-1 # ОС Unix
Флаг
--install
является вспомогательным и указывает на то, необходимо ли установить дополнительное ПО. Данный флаг используется при необходимости произвести полную установку Cистемы (развёртывание с нуля).
Пример
goBuild.exe --install # ОС Windows
goBuild --install # ОС Unix
Флаг
--ask-pass
является вспомогательным и указывает на то, использовалось ли шифрование inventory.yml файла (если inventory.yml файл содержит в себе зашифрованные данные, то нужно использовать этот флаг, в противном случае флаг должен отсутствовать).
Пример
goBuild.exe --ask-pass # ОС Windows
goBuild --ask-pass # ОС Unix
Флаг
--unix
является вспомогательным и указывает на то, запускается ли утилита под ОС Unix. Если запускаете утилиту на ОС Unix (CentOS, AstraLinux и т.д.), то нужно использовать этот флаг, если запускаете утилиту под ОС Windows, то флаг должен отсутствовать.
Пример
goBuild --unix # ОС Unix
Флаг
--astra
является вспомогательным и указывает на то, на какой ОС планируется производить обновление или развертывание Системы и стороннего ПО. Если планируется разворачивать или обновлять Систему на ОС AstraLinux, то нужно использовать этот флаг, в противном случае флаг должен отсутствовать).
Пример
goBuild.exe --astra # ОС Windows
goBuild --astra # ОС Unix
Флаг
--only-tag
является системным и используется разработчиками. Данный флаг позволяет сгенерировать только список тегов (дополнительно нужно использовать флаг –mod-file, прочие флаги не требуются).
Пример
goBuild.exe --only-tag # ОС Windows
goBuild --only-tag # ОС Unix
Запуск утилиты
Откройте командную строку от имени администратора и перейдите в директорию с бинарным файлом goBuild.exe.
Допустим, что:
C:\Users\gems\projects\tumen\ansible_modules.json - абсолютный путь до ansible_modules.json файла. Данный файл формируется с помощью утилиты ProjectPackageBuilder на этапе сборки артефактов под проект.
C:\Users\gems\ansible\inventory\prod\tumen\inventory.yml - абсолютный путь до inventory.yml файла проекта.
app-1 - имя хоста в ansible, на которые необходимо установить Систему. Имя можно посмотреть в inventory.yml файле, который гененировался ранее.
Необходимо произвести полную установку Системы (развёртывание с нуля).
Команда запускается под ОС Windows.
Пример запуска утилиты для формирования команды полной установки системы без зашифрованных файлов
goBuild.exe -mod-file C:\Users\gems\projects\tumen\ansible_modules.json -i C:\Users\gems\ansible\inventory\prod\tumen\inventory.yml -l app-1 --install
Пример запуска утилиты для формирования команды полной установки системы с учетом зашифрованных файлов
goBuild.exe -mod-file C:\Users\gems\projects\tumen\ansible_modules.json -i C:\Users\gems\ansible\inventory\prod\tumen\inventory.yml -l app-1 --install --ask-pass
Пример запуска утилиты для формирования команды обновления системы без зашифрованных файлов
goBuild.exe -mod-file C:\Users\gems\projects\tumen\ansible_modules.json -i C:\Users\gems\ansible\inventory\prod\tumen\inventory.yml -l app-1
Пример запуска утилиты для формирования команды обновления системы с учетом зашифрованных файлов
goBuild.exe -mod-file C:\Users\gems\projects\tumen\ansible_modules.json -i C:\Users\gems\ansible\inventory\prod\tumen\inventory.yml -l app-1 --ask-pass
Пример запуска утилиты для формирования команды обновления системы без зашифрованных файлов для ВМ под управлением ОС AstraLinux
goBuild.exe -mod-file C:\Users\gems\projects\tumen\ansible_modules.json -i C:\Users\gems\ansible\inventory\prod\tumen\inventory.yml -l app-1 --astra
Пример запуска утилиты для формирования команды полной установки системы без зашифрованных файлов
./goBuild -mod-file /home/gems/projects/tumen/ansible_modules.json -i /home/gems/ansible/inventory/prod/tumen/inventory.yml -l app-1 --unix --install
Пример запуска утилиты для формирования команды полной установки системы с учетом зашифрованных файлов
./goBuild -mod-file /home/gems/projects/tumen/ansible_modules.json -i /home/gems/ansible/inventory/prod/tumen/inventory.yml -l app-1 --unix --install --ask-pass
Пример запуска утилиты для формирования команды обновления системы без зашифрованных файлов
./goBuild -mod-file /home/gems/projects/tumen/ansible_modules.json -i /home/gems/ansible/inventory/prod/tumen/inventory.yml -l app-1 --unix
Пример запуска утилиты для формирования команды обновления системы с учетом зашифрованных файлов
./goBuild -mod-file /home/gems/projects/tumen/ansible_modules.json -i /home/gems/ansible/inventory/prod/tumen/inventory.yml -l app-1 --unix --ask-pass
Пример запуска утилиты для формирования команды обновления системы без зашифрованных файлов для ВМ под управлением ОС AstraLinux
./goBuild.exe -mod-file /home/gems/projects/tumen/ansible_modules.json -i /home/gems/ansible/inventory/prod/tumen/inventory.yml -l app-1 --astra
Установка Системы#
Полная установка Системы (включая дополнительное ПО)#
Важно
При полном развёртывании Системы необходимо, чтобы в папке с артефактами проекта (которая была создана на этапе работы утилиты ProjectPackageBuilder) лежали архивы с файлами установки дополнительного ПО (например, архив с БД: centos_install_postgresql.tar.gz).
После того, как артефакты проекта были сформированы, необходимо в директорию IAS разместить архив с шаблонами templates.zip. Актуальные версии данных архивов для работы с Ansible находятся в установочном пакете.
Пример структуры и содержимого директории для полной установки Geometa и Sapphire:
tumen/
- директория, хранит в себе список артефактов под сборку для проектаIAS/
- директория, хранит в себе артефакты для установки Геометы на проектrelease.zip
- артефакты геометы.full_search.zip
- артефакты сервиса полнотекствого поиска Solr.templates.zip
- архив с шаблонами.Sapphire/
- хранит в себе список артефактов Sapphire.releaseSapphire.zip
- архив с артефактами Sapphire.centos_install_postgresql.tar.gz
- архив для установки БД.centos_install_geoserver.tar.gz
- архив для установки геосервера.centos_install_dotnet.tar.gz
- архив для установки дотнета и прочих, связанных, с ним компонентов.centos_install_nginx.tar.gz
- архив для установки Nginx’а.java-csp-5.0.39267.zip
- архив для установки JavaCSP.jre-8u231-linux-x64.tar.gz
- архив для установки Java 8u231.linux-amd64.tgz
- архив для установки CryptoPRO CSP.redhat-lsb-core-4.1-27.el7.centos.1.x86_64.rpm
- вспомогательный пакет для установки CryptoPRO CSP.
Если ранее не проводилcя импорт Docker-контейнера, сконфигурированного для работы с Ansible, то необходимо выполнить пункт Импорт докер контейнера, сконфигурированного для работы с Ansible
Генерация Docker-команды#
Проведите генерацию Docker-команды с помощью утилиты GDC. После формирования Docker-команды можно отредактировать список тегов. Теги перечисляются через зяпятую в двойных кавычках после ключевого слова –tags. Список доступных тэгов описан в пункте Установка отдельных компонентов
Процесс установки ПО производится последовательно на каждый из серверов. Т.е. команда установки запускается под каждый сервер.
Пример команд:
Команда для обновления Системы:
docker run -it --rm -v D:\OutputDir\ansible-build\ansible:/ansible -v D:\Release\5.17\my\:/ansible/files registry.gemsdev.ru/ansible-ubuntu:latest bash -c "chmod -R 644 /ansible" && docker run -it --rm -v D:\OutputDir\ansible-build\\ansible:/ansible -v D:\Release\5.17\my\:/ansible/files registry.gemsdev.ru/ansible-ubuntu:latest ansible-playbook -i inventory/devops-test/omsk/inventory.yml ias-deploy-unix.yml -l devops-centos2 --tags "include_vars, install_ias"
Команда для установки или обновления геосервера (последовательное выполнение команд, для установки на 2 стенда с геосерверами):
docker run -it --rm -v D:\OutputDir\ansible-build\ansible:/ansible -v D:\Release\5.17\my\:/ansible/files registry.gemsdev.ru/ansible-ubuntu:latest bash -c "chmod -R 644 /ansible" && docker run -it --rm -v D:\OutputDir\ansible-build\ansible:/ansible -v D:\Release\5.17\my\:/ansible/files registry.gemsdev.ru/ansible-ubuntu:latest ansible-playbook -i inventory/devops-test/omsk/inventory.yml ias-deploy-unix.yml -l gs-1 --tags "include_vars, install_geoserver"
docker run -it --rm -v D:\OutputDir\ansible-build\ansible:/ansible -v D:\Release\5.17\my\:/ansible/files registry.gemsdev.ru/ansible-ubuntu:latest bash -c "chmod -R 644 /ansible" && docker run -it --rm -v D:\OutputDir\ansible-build\ansible:/ansible -v D:\Release\5.17\my\:/ansible/files registry.gemsdev.ru/ansible-ubuntu:latest ansible-playbook -i inventory/devops-test/omsk/inventory.yml ias-deploy-unix.yml -l gs-2 --tags "include_vars, install_geoserver"
Команда для установки БД:
docker run -it --rm -v D:\OutputDir\ansible-build\ansible:/ansible -v D:\Release\5.17\my\:/ansible/files registry.gemsdev.ru/ansible-ubuntu:latest bash -c "chmod -R 644 /ansible" && docker run -it --rm -v D:\OutputDir\ansible-build\ansible:/ansible -v D:\Release\5.17\my\:/ansible/files registry.gemsdev.ru/ansible-ubuntu:latest ansible-playbook -i inventory/devops-test/omsk/inventory.yml ias-deploy-unix.yml -l db-vm --tags "include_vars, install_psql"
Команда для полной установки Системы (включая дополнительное ПО):
docker run -it --rm -v D:\OutputDir\ansible-build\ansible:/ansible -v D:\Release\5.17\my\:/ansible/files registry.gemsdev.ru/ansible-ubuntu:latest bash -c "chmod -R 644 /ansible" && docker run -it --rm -v D:\OutputDir\ansible-build\ansible:/ansible -v D:\Release\5.17\my\:/ansible/files registry.gemsdev.ru/ansible-ubuntu:latest ansible-playbook -i inventory/devops-test/omsk/inventory.yml ias-deploy-unix.yml -l devops-centos2 --tags "include_vars, install_psql, install_geoserver, install_nginx, install_netcore, install_cryptopro, install_ias, install_solr"
Скопируйте docker-команду, полученную с помощью утилиты GDC в командную строку и нажмите клавишу Enter на клавиатуре.
Важно
Если проводится установка на ОС Astra Linux, то после формирования Docker-команды необходимо убрать все теги и установить тег up_privilege.
Пример
После работы утилиты goBuild должна получиться следующая команда:
docker run -it --rm -v D:\OutputDir\ansible-build\ansible:/ansible -v D:\Release\5.17\my\:/ansible/files registry.gemsdev.ru/ansible-ubuntu:latest bash -c "chmod -R 644 /ansible" && docker run -it --rm -v D:\OutputDir\ansible-build\ansible:/ansible -v D:\Release\5.17\my\:/ansible/files registry.gemsdev.ru/ansible-ubuntu:latest ansible-playbook -i inventory/devops-test/omsk/inventory.yml ias-deploy-unix.yml -l devops-centos2 --tags "include_vars, install_psql, install_geoserver, install_nginx, install_netcore, install_cryptopro, install_ias, install_solr"
Необходимо удалить все теги после ключевого слова –tags и добавить два тега include_vars, up_privilege. В результате команда будет выглядеть следующим образом:
docker run -it --rm -v D:\OutputDir\ansible-build\ansible:/ansible -v D:\Release\5.17\my\:/ansible/files registry.gemsdev.ru/ansible-ubuntu:latest bash -c "chmod -R 644 /ansible" && docker run -it --rm -v D:\OutputDir\\ansible-build\ansible:/ansible -v D:\Release\5.17\my\:/ansible/files registry.gemsdev.ru/ansible-ubuntu:latest ansible-playbook -i inventory/devops-test/omsk/inventory.yml ias-deploy-unix.yml -l devops-centos2 --tags "include_vars, up_privilege"
После этого верните список тегов, который был сгенерирован утилитой goBuild и продолжите установку (выполните команду представленную на шаге 1).
После запуска данной команды Система может запросить пароль (если ранее создавали зашифрованный inventory.yml-файл). Необходимо ввести пароль, который был сгенерирован на этапе создания шифрованных данных.
Установка отдельных компонентов#
Используя специальные теги, передаваемые в качестве параметра, возможно установить отдельный модуль или компонент.
Данные теги можно перечислять через запятую, после ключевого слова –tags в необходимом порядке.
Название |
Описание |
---|---|
install_jet |
Установка Картографического API (Jet) |
include_vars |
Подключения файла глобальных переменных |
up_privilege |
Поднять уровень привилегий пользователя для Astra Linux (Smolensk) |
install_psql |
Установка экземпляра postgresql |
install_geoserver |
Установка экземпляра geoserver (необходимо использовать совместно с тегом install_netcore) |
install_netcore |
Установка Java && .NetCore && LibreOffice |
install_cryptopro |
Установка CryptoPRO CSP (необходимо использовать совместно с тегом install_netcore) |
install_nginx |
Установка Nginx |
install_ias |
Установка Geometa (без дополнителньых компонентов и ПО) |
install_exporttab |
Установка сервиса ExportTab |
install_rabbitmq |
Установка сервиса RabbitMq |
install_solr |
Установка Solr |
install_govgmp |
Установка модуля GovGmp |
install_iasentitymonitor |
Установка модуля IasEntityMonitoring |
install_smev |
Установка модуля SmevInteragencyCooperation |
install_notification |
Установка модуля NotificationService |
install_geocoder |
Установка модуля GeocodingService |
install_httpfilestorage |
Установка модуля файловое хранилище |
install_topaz |
Установка модуля Topaz |
install_1cintegration |
Установка модуля интеграции с 1С |
install_alfrescointegration |
Установка модуля интеграции с Alfresco |
install_docker |
Установка службы docker |
install_gisogdrf |
Установка сервиса интеграции с API ГИСОГД |
install_docker_modules |
Установка доп. модулей для docker’а, для корректной работы ansible |
install_diamond |
Установка модуля Diamond |
install_agate |
Установка модуля Agate |
install_portal |
Установка модуля Portal(InteractiveMap) |
install_amber |
Установка модуля Amber |
install_fias |
Установка модуля Fias |
install_isumu |
Установка модуля Isumu |
install_omskrpgu |
Установка модуля OmskRPGU |
install_rldz |
Установка модуля Rldz |
install_garnet |
Установка модуля Garnet |
install_sapphire |
Установка модуля Sapphire |
install_nephrite |
Установка модуля Nephrite |
install_jasper |
Установка модуля Jasper |
install_stkgd |
Установка модуля STKGD |
install_patcher |
Установка модуля Patcher |
install_smevproducer |
Установка модуля SmevProducerEmulator |
install_smevtestcontour |
Установка модуля SmevMezhvedTestContour |
update-geoserver |
Повышение версии геосервера |
install_gemstore |
Установка модуля Стартовая страница |
install_otelcollector |
Установка агента OpenTelemetry для сборка метрик |
install_gismultitool |
Установка сервиса GisMultiTool |
Обновление Системы#
Резервное копирование конфигурационных файлов Системы#
Резервное копирование позволяет сохранять некоторые конфигурации основного приложения. После обновления конфигурации останутся в прежнем состоянии согласно настройкам.
Список сервисов, для которых можно настроить резервное копирование:
AppServer
SchemaSync
STS
UI.Web.IAS
WebImporterRef
WebIsogdMonitor
SmevMezhved
CacheMonitor
EgrnImporter
Как настроить резервное копирование
Перейдите в директорию ansible/
Из директории ansible/ перейдите в папку roles/install-ias/vars/
В текстовом редакторе (например, Notepad++) откройте файл backups.yml
Структура конфигурационного файла backups.yml
---
BackupsInfo:
- service_env_name: "ias_app_server"
name: "Gems.Ias.ApplicationServer"
description: "WebIsogd Application Server Service"
workDir: "{{ vGM_INSTALL_DIR }}/AppServer"
tempDir: "/tmp/AppServer/"
backup_file_name:
- "appdata/templates/accessmatrix.xltx"
- "ReportTemplates/gpzu.dotx"
- "ReportTemplates/rs.dotx"
- "modules/Gems.Modile.Diamond.Integration/bin/release/modulesettings.json"
backup_dir_name:
- "appdata/plugins/GPZU"
- "appdata/plugins/Agreement"
- "appdata/plugins/OpenOffice"
- service_env_name: "schema_sync"
name: "SchemaSync"
description: "ShemaSync Service"
workDir: "{{ vGM_INSTALL_DIR }}/SchemaSync"
tempDir: "/tmp/SchemaSync/"
backup_file_name:
- "sync.cfg"
- "sync.cfg.gen"
- "appsettings.json"
- "hosting.json"
- "schemasync.nlog.config"
backup_dir_name:
- "data"
# - service_env_name: "sts"
# name: "STS"
# description: "WebIsogd Identity Service"
# workDir: "{{ vGM_INSTALL_DIR }}/IdentityServer"
# tempDir: "/tmp/IdentityServer/"
# backup_file_name: []
# backup_dir_name: []
# - service_env_name: "ui_web_ias"
# name: "UI.Web.IAS"
# description: "WebIsogd Client Service"
# workDir: "{{ vGM_INSTALL_DIR }}/UI"
# tempDir: "/tmp/UI/"
# backup_file_name: []
# backup_dir_name: []
# - service_env_name: "web_importer_ref"
# name: "WebImporterRef"
# description: "WebIsogd Importer Service"
# workDir: "{{ vGM_INSTALL_DIR}}/Importer"
# tempDir: "/tmp/Importer/"
# backup_file_name: []
# backup_dir_name: []
# - service_env_name: "web_isogd_monitor"
# name: "WebIsogdMonitor"
# description: "WebIsogd Monitor Service"
# workDir: "{{ vGM_INSTALL_DIR }}/Monitor"
# tempDir: "/tmp/Monitor/"
# backup_file_name: []
# backup_dir_name: []
# - service_env_name: "smev_mezhved"
# name: "SmevMezhved"
# description: "SmevMezhved Service"
# workDir: "{{ vGM_INSTALL_DIR }}/SmevMezhved"
# tempDir: "/tmp/SmevMezhved/"
# backup_file_name: []
# backup_dir_name: []
# - service_env_name: "grad_signature_service"
# description: "Signature Service"
# workDir: "{{ vGM_INSTALL_DIR }}/Signature"
# tempDir: "/tmp/Signature/"
# backup_file_name: []
# backup_dir_name: []
# - service_env_name: "gems_openoffice"
# name: "gems.openoffice"
# description: "Gems OpenOffice Service"
# workDir: "{{ vGM_INSTALL_DIR }}/OpenOffice"
# tempDir: "/tmp/OpenOffice/"
# backup_file_name: []
# backup_dir_name: []
# - service_env_name: "cache_monitor"
# name: "CacheMonitor"
# description: "Cache Monitor Service"
# workDir: "{{ vGM_INSTALL_DIR }}/CacheMonitor"
# tempDir: "/tmp/CacheMonitor/"
# backup_dir_name: []
# backup_file_name: []
# - service_env_name: "egrn_importer"
# name: "EgrnImporter"
# description: "Egrn Importer Service"
# workDir: "{{ vGM_INSTALL_DIR }}/EgrnImporter"
# tempDir: "/tmp/EgrnImporter/"
# backup_file_name:
# - "appsettings.json"
# backup_dir_name: []
4. Отредактируйте значения переменных backup_file_name
и backup_dir_name
для каждого сервиса, которому требуется резервное копирование конфигурационных файлов или директорий.
По умолчанию значение данных переменных равно [] , так как данные переменные принимают в себя список значений. Удалите [], а затем в виде списка укажите относительные пути до файлов или директорий, которые необходимо бэкапить.
Пример
Чтобы настроить резервное копирование директории data и файла appsettings.json расскоментируйте блок, отвечающий за данный сервис.
Было:
----ЧАСТЬ ФАЙЛА ---
- service_env_name: "schema_sync"
name: "SchemaSync"
description: "ShemaSync Service"
workDir: "{{ vGM_INSTALL_DIR }}/SchemaSync"
tempDir: "/tmp/SchemaSync/"
backup_file_name: []
backup_dir_name: []
----ЧАСТЬ ФАЙЛА ---
Стало:
----ЧАСТЬ ФАЙЛА ---
- service_env_name: "schema_sync"
name: "SchemaSync"
description: "ShemaSync Service"
workDir: "{{ vGM_INSTALL_DIR }}/SchemaSync"
tempDir: "/tmp/SchemaSync/"
backup_file_name:
- "appsettings.json"
backup_dir_name:
- "data"
----ЧАСТЬ ФАЙЛА ---
Некоторые сервисы заэкранированы символом #. Если необходимо настроить резервное копирование для данного сервиса, то раскоментируйте блок, отвечающий за данный сервис. Например, чтобы настроить резервное копирование некоторых файлов IdentityServer, расскоментируйте соответствующий блок.
Было:
----ЧАСТЬ ФАЙЛА ---
- service_env_name: "schema_sync"
name: "SchemaSync"
description: "ShemaSync Service"
workDir: "{{ vGM_INSTALL_DIR }}/SchemaSync"
tempDir: "/tmp/SchemaSync/"
backup_file_name:
- "sync.cfg"
- "sync.cfg.gen"
- "appsettings.json"
- "hosting.json"
- "schemasync.nlog.config"
backup_dir_name:
- "data"
# - service_env_name: "sts"
# name: "STS"
# description: "WebIsogd Identity Service"
# workDir: "{{ vGM_INSTALL_DIR }}/IdentityServer"
# tempDir: "/tmp/TEEEEEEEEEEMP/"
# backup_file_name: []
# backup_dir_name: []
# - service_env_name: "ui_web_ias"
# name: "UI.Web.IAS"
# description: "WebIsogd Client Service"
# workDir: "{{ vGM_INSTALL_DIR }}/UI"
# tempDir: "/tmp/TEEEEEEEEEEMP/"
# backup_file_name: []
# backup_dir_name: []
----ЧАСТЬ ФАЙЛА ---
Стало:
----ЧАСТЬ ФАЙЛА ---
- service_env_name: "schema_sync"
name: "SchemaSync"
description: "ShemaSync Service"
workDir: "{{ vGM_INSTALL_DIR }}/SchemaSync"
tempDir: "/tmp/SchemaSync/"
backup_file_name:
- "sync.cfg"
- "sync.cfg.gen"
- "appsettings.json"
- "hosting.json"
- "schemasync.nlog.config"
backup_dir_name:
- "data"
- service_env_name: "sts"
name: "STS"
description: "WebIsogd Identity Service"
workDir: "{{ vGM_INSTALL_DIR }}/IdentityServer"
backup_file_name: []
backup_dir_name: []
# - service_env_name: "ui_web_ias"
# name: "UI.Web.IAS"
# description: "WebIsogd Client Service"
# workDir: "{{ vGM_INSTALL_DIR }}/UI"
# tempDir: "/tmp/TEEEEEEEEEEMP/"
# backup_file_name: []
# backup_dir_name: []
----ЧАСТЬ ФАЙЛА ---
Важно
Если нет необходимости проводить резервное копирование и восстановление конфигурационных файлов и проектов, то значения переменных
backup_file_name
иbackup_dir_name
необходимо установить равным []. Т.е. после символа : укажите [] и удалите или закомментируйте список файлов и директорий, который был установлен ранее или имеется по умолчанию.Если после того, как было настроено резервное копирование возникли проблемы с обновлением (обновление не прошло успешно), то чтобы не потерять конфигурационные файлы зайдите на сервер приложения, перейти в папку /tmp/Название модуля геометы и в ручную скопируйте куда-либо данные конфигурационные файлы. В противном случае, при повторном запуске обновления конфигурационные файлы будут утеряны.
Пример использования
Например, для проекта необходимо сделать резервные копии следующих файлов:
Для сервера приложения (AppServer) резервные копии:
Файл, который лежит по следующему относительному пути ReportTemplates/gpzu.dotx
Файл, который лежит по следующему относительному пути ReportTemplates/rs.dotx
Директорию, которая лежит по следующему относительному пути appdata/plugins/Agreement
Для репликации (SchemaSync) резервные копии:
Файл, который лежит по следующему относительному пути sync.cfg
Файл, который лежит по следующему относительному пути sync.cfg.gen
Файл, который лежит по следующему относительному пути appsettings.json
Директорию, которая лежит по следующему относительному пути data
Для импортера (EgrnImporter) резервные копии:
Файл, который лежит по следующему относительному пути appsettings.json
Артефакты Ansible находятся в установочном пакете.
Чтобы сделать резервные копии необходимо:
Получите установочный пакет
Открыть в текстовом редакторе файл backups.yml
Привести файл к следующему виду:
---
BackupsInfo:
- service_env_name: "ias_app_server"
name: "Gems.Ias.ApplicationServer"
description: "WebIsogd Application Server Service"
workDir: "{{ vGM_INSTALL_DIR }}/AppServer"
tempDir: "/tmp/AppServer/"
backup_file_name:
- "ReportTemplates/gpzu.dotx"
- "ReportTemplates/rs.dotx"
backup_dir_name:
- "appdata/plugins/Agreement"
- service_env_name: "schema_sync"
name: "SchemaSync"
description: "ShemaSync Service"
workDir: "{{ vGM_INSTALL_DIR }}/SchemaSync"
tempDir: "/tmp/SchemaSync/"
backup_file_name:
- "sync.cfg"
- "sync.cfg.gen"
- "appsettings.json"
backup_dir_name:
- "data"
# - service_env_name: "sts"
# name: "STS"
# description: "WebIsogd Identity Service"
# workDir: "{{ vGM_INSTALL_DIR }}/IdentityServer"
# tempDir: "/tmp/IdentityServer/"
# backup_file_name: []
# backup_dir_name: []
# - service_env_name: "ui_web_ias"
# name: "UI.Web.IAS"
# description: "WebIsogd Client Service"
# workDir: "{{ vGM_INSTALL_DIR }}/UI"
# tempDir: "/tmp/UI/"
# backup_file_name: []
# backup_dir_name: []
# - service_env_name: "web_importer_ref"
# name: "WebImporterRef"
# description: "WebIsogd Importer Service"
# workDir: "{{ vGM_INSTALL_DIR}}/Importer"
# tempDir: "/tmp/Importer/"
# backup_file_name: []
# backup_dir_name: []
# - service_env_name: "web_isogd_monitor"
# name: "WebIsogdMonitor"
# description: "WebIsogd Monitor Service"
# workDir: "{{ vGM_INSTALL_DIR }}/Monitor"
# tempDir: "/tmp/Monitor/"
# backup_file_name: []
# backup_dir_name: []
# - service_env_name: "smev_mezhved"
# name: "SmevMezhved"
# description: "SmevMezhved Service"
# workDir: "{{ vGM_INSTALL_DIR }}/SmevMezhved"
# tempDir: "/tmp/SmevMezhved/"
# backup_file_name: []
# backup_dir_name: []
# - service_env_name: "grad_signature_service"
# description: "Signature Service"
# workDir: "{{ vGM_INSTALL_DIR }}/Signature"
# tempDir: "/tmp/Signature/"
# backup_file_name: []
# backup_dir_name: []
# - service_env_name: "gems_openoffice"
# name: "gems.openoffice"
# description: "Gems OpenOffice Service"
# workDir: "{{ vGM_INSTALL_DIR }}/OpenOffice"
# tempDir: "/tmp/OpenOffice/"
# backup_file_name: []
# backup_dir_name: []
# - service_env_name: "cache_monitor"
# name: "CacheMonitor"
# description: "Cache Monitor Service"
# workDir: "{{ vGM_INSTALL_DIR }}/CacheMonitor"
# tempDir: "/tmp/CacheMonitor/"
# backup_dir_name: []
# backup_file_name: []
- service_env_name: "egrn_importer"
name: "EgrnImporter"
description: "Egrn Importer Service"
workDir: "{{ vGM_INSTALL_DIR }}/EgrnImporter"
tempDir: "/tmp/EgrnImporter/"
backup_file_name:
- "appsettings.json"
backup_dir_name: []
Сохранить файл и приступить к обновлению Системы.
Подготовка к обновлению Cистемы#
Перед тем как приступить к обновлению Системы, выполните следующие действия:
Получите установочный пакет, в котором содержатся обновления
Актуальная версия утилиты Ansible находится в установочном пакете. Версия Ansible должна соответствовать версии артефактов.
Замените следующие файлы и каталоги в новой версии Ansible на файлы и каталоги, настроенные под конкретный проект:
/ansible/vars.yml;
/ansible/inventory/prod/dir_name/, где dir_name - имя директории;
ansible/roles/install-ias/vars/backups.yml.
Сформируйте команду обновления системы или отдельных сервисов.
Обновление Системы#
Чтобы обновить Систему:
Запустите команду установки.
Дождитесь обновления.