Подготовка окружения к установке

1. Отключение SELinux

Убедитесь, что SELinux отключён или переведен в режим Permissive.

2. Проверка и настройка DNS

Создайте DNS A-записи для доменов, которые будут использоваться Закрома.Диск и внешними зависимостями.

Для одноузловой конфигурации и базового кластера:

1disk.zakroma.internal -> хост(ы) с Закрома.Диск и Nginx 2webdav.zakroma.internal -> хост(ы) с Закрома.Диск и Nginx 3keycloak.zakroma.internal -> хост(ы) с Keycloak 4postgres.zakroma.internal -> хост(ы) с PostgreSQL

В инструкции используется пример домена zakroma.internal. Замените его на доменную зону вашей инфраструктуры.

3. Подготовка сертификатов

Подготовьте TLS-сертификаты и ключи для доменов:

1disk.zakroma.internal 2webdav.zakroma.internal 3keycloak.zakroma.internal

В поставке сертификаты копируются Ansible-ролью certificates, а примеры переменных находятся в inventories/<inventory>/group_vars/certificates.yml. Роль не выполняет генерацию самоподписных сертификатов, а только их распространение. Для промышленных сред используйте корпоративный центр сертификации.

4. Подготовка лицензии

Подготовьте файл лицензии Закрома.Диск и замените примерный файл files/zakroma-licence/licence в распакованном архиве поставки.

Путь, куда лицензия будет скопирована на целевые хосты, задаётся переменной:

1zakroma_disk_dsdrive: 2 path_to_licence: "/opt/zakroma/zakroma-disk/dsdrive/bin/licence"

Копирование выполняется отдельным playbook playbooks/sample-play-copy-licence-file.yml.

5. Подготовка PostgreSQL

Создайте базу данных и схему для Закрома.Диск, а также базу и схему для Keycloak согласно инструкции по настройке PostgreSQL.

6. Подготовка Keycloak

Установите и настройте Keycloak согласно инструкции по настройке Keycloak или используйте существующий Keycloak в вашей инфраструктуре.

После подготовки Keycloak получите значения для переменных Закрома.Диск:

  • zakroma_disk_dsdrive.auth.keycloak.url
  • zakroma_disk_dsdrive.auth.keycloak.realm
  • zakroma_disk_dsdrive.auth.keycloak.clientId
  • zakroma_disk_dsdrive.auth.keycloak.secret
  • zakroma_disk_dsdrive.auth.keycloak.openid_config
  • zakroma_disk_dsdrive.jwt.kid
  • zakroma_disk_dsdrive.jwt.rsa_public_key
  • zakroma_disk_auth.access_key_id
  • zakroma_disk_auth.access_key
  • zakroma_disk_dsdrive.auth.direct_grant.auth_key
  • zakroma_disk_webdav.dsdrive.auth_key

Для поставочного realm роль пользователя в примерах называется clouduser. Если синхронизация выполняется по роли, укажите user_role: "clouduser" и оставьте user_groups: "". Не указывайте имя пользователя администратора как группу: это приводит к ошибке InvalidKeycloakSettings / 404 Not Found: Group path does not exist.

7. Подготовка Закрома.Хранение

Для полноценной работы Закрома.Диск необходима установленная и настроенная конфигурация Закрома.Хранение.

Без Закрома.Хранения не будут работать некоторые функции автоматизации создания бакетов для проектов, а также будет отсутствовать возможность ограничения квот по проектам.

Подготовьте рабочую область, ключ доступа и политику в Закрома.Хранение по инструкции Подготовка хранилища.

Полученные значения укажите в секции zakroma_disk_dsdrive.storage файла inventories/<inventory>/group_vars/zakroma-disk.yml.

8. Подготовка Zakroma Message Broker (ZMB)

Начиная с поставки 2.1.2 для доставки событий безопасности используется Zakroma Message Broker (ZMB) вместо прежнего брокера сообщений Kafka. Роль message_broker версии 1.0.0 входит в архив поставки.

Журнал аудита безопасности фиксирует события системы: обращения к API, действия пользователей и служебные операции. Эти записи затем доступны администратору на странице Лог аудита безопасности. Сервис dsseclog принимает события от dsdrive; ZMB используется как транспорт для их доставки.

ZMB нужен, если вы планируете включать zakroma_disk_dsdrive.seclog_client.zmb и/или zakroma_disk_dsseclog.zmb. Для минимального стенда без журнала аудита ZMB можно не устанавливать и оставить zakroma_disk_dsseclog_enabled: false.

Inventory и переменные

  1. Добавьте хосты в группу message-broker в inventories/<inventory>/hosts.
  2. Отредактируйте inventories/<inventory>/group_vars/message-broker.yml.

Базовые переменные из поставки:

1# Версия бинарника ZMB в Nexus (semver-тег или ветка+sha, например develop-abc1234) 2zmb_version: "v2.12.8" 3 4# Имя inventory-группы кластера ZMB (должно совпадать с группой в hosts) 5zmb_host_group: "message-broker" 6 7# Базовый URL Nexus для загрузки бинарника 8zmb_repository_base_url: >- 9 https://nexus.digital-spirit.ru/repository/raw-snapshots/zakroma/microservices/zmb/zmb-server 10 11# Логин для доступа к репозиторию Nexus 12zmb_nexus_username: "" 13 14# Пароль для доступа к репозиторию Nexus 15zmb_nexus_password: "" 16 17# Пропускать загрузку, если бинарник уже есть на хосте или в role_path/files 18zmb_check_binary_files: true 19 20# Публичные ключи NKey (U...) для авторизации клиентов. 21# Пример: 22# zmb_authorization_users: 23# - "UDNXCE5M6XJVT2IKPX3TKAEI4Q2IHTHL7BZFBULMR3VGPGT6RRWHGSOK" 24zmb_authorization_users: [] 25 26# Список имён inventory-групп удалённых кластеров; [] — секция gateway не создаётся. 27# Пример (шлюз к удалённому кластеру dc2): 28# zmb_gateway_host_groups: 29# - "message-broker-dc2" 30# zmb_gateway_addresses: 31# message-broker-dc2: zakroma-message-bus-dc2 32zmb_gateway_host_groups: [] 33 34# Адреса gateway удалённых кластеров: { "dc2": "zakroma-message-bus-dc2" } 35zmb_gateway_addresses: {} 36 37# Включить TLS 38zmb_tls_enabled: false 39 40# Путь к TLS-сертификату 41zmb_tls_cert_file: /etc/zakroma-message-bus/tls/node.pem 42 43# Путь к TLS-ключу 44zmb_tls_key_file: /etc/zakroma-message-bus/tls/node.key 45 46# Системный пользователь сервиса 47zmb_service_user: zmb 48 49# Системная группа сервиса 50zmb_service_group: zmb

Заполните zmb_nexus_username и zmb_nexus_password (рекомендуется Ansible Vault). Имя zmb_host_group должно совпадать с именем inventory-группы кластера ZMB.

NKey-авторизация

Если клиенты (dsdrive / dsseclog) подключаются по NKey:

  1. Сгенерируйте пару ключей: nk gen user -p.
  2. Публичный ключ (U...) добавьте в zmb_authorization_users на стороне брокера.
  3. Seed (SU...) укажите только на клиентах в zakroma_disk_dsdrive.seclog_client.zmb.auth.seed / zakroma_disk_dsseclog.zmb.auth.seed — на брокер seed не кладётся.

Установка

1cd zakroma-roles-2.1.2 2ANSIBLE_CONFIG=ansible.cfg ansible-playbook -i inventories/<inventory>/hosts playbooks/sample-play-message-broker.yml

Playbook импортирует роль message_broker на хосты группы message-broker. После установки на целевых хостах появляются:

ПутьНазначение
/opt/zakroma/zmb-server/bin/zmb-<version>Бинарный файл
/opt/zakroma/zmb-server/cfg/zmb-server.confКонфигурация
/usr/lib/systemd/system/zmb-server.serviceSystemd unit
/var/lib/zakroma-message-bus/dataДанные message_bus

Клиентский порт по умолчанию — 4222. Адрес брокера укажите в zakroma_disk_dsdrive.seclog_client.zmb.hosts и zakroma_disk_dsseclog.zmb.hosts в формате host:port.

9. Подготовка для работы с Ansible

  1. Проверьте SSH-доступ к каждому хосту.
  2. Убедитесь, что пользователь имеет привилегированный доступ через sudo.
  3. Установите или обновите Ansible. Рекомендуется использовать версию, совместимую с коллекциями из поставки.
  4. Если подключение выполняется по логину и паролю, установите пакет sshpass.
  5. Запускайте ansible-playbook из корневой директории распакованного архива, где находятся ansible.cfg, inventories/, playbooks/, roles/ и collections/.

Пример:

1cd zakroma-roles-2.1.2 2ANSIBLE_CONFIG=ansible.cfg ansible-playbook -i inventories/base-cluster/hosts playbooks/sample-play-zakroma-disk.yml

10. Пакет Nginx

На узлах группы zakroma-disk-nginx должен быть доступен пакет nginx из репозиториев операционной системы или корпоративного зеркала.