Deploy lead‐up start‐up - wildberries-tech/universal-harvester GitHub Wiki

Развёртывание приложения

Развёртывание можно осуществить двумя способами: просто запустить в подготовленном окружении front.py или использовать docker-контейнер.

Обычный запуск

  1. Клонируйте репозиторий.
  2. Обеспечте окружение python (pip install -r requirements.txt).
  3. Сгенерируйте master_key (с помощью ноутбука base64_json_object_creator.ipynb).
  4. Определите используемую БД (с помощью ноутбука base64_json_object_creator.ipynb).
  5. Сгенерируйте ключ nicegui storage (с помощью ноутбука base64_json_object_creator.ipynb).
  6. Возьмите или сгенерируйте SSL-сертификат.
  7. Сформируйте строку запуска.
  8. Запустите front.py со всеми необходимыми параметрами.
  9. Интерактивно введите master_key.

Docker контейнер

  1. Клонируйте репозиторий.
  2. Соберите под нужную архитектуру и доставьте docker контейнер на хост.
  3. Сгенерируйте master_key (с помощью ноутбука base64_json_object_creator.ipynb).
  4. Определите используемую БД (с помощью ноутбука base64_json_object_creator.ipynb).
  5. Сгенерируйте ключ nicegui storage (с помощью ноутбука base64_json_object_creator.ipynb).
  6. Возьмите или сгенерируйте SSL-сертификат.
  7. Сформируйте строку запуска.
  8. Запустите контейнер -> front.py со всеми необходимыми параметрами.
  9. Интерактивно введите master_key.

Подготовка

Для работы Universal Harvester необходимы параметры nicegui_storage_key_object и db_conf_object. Они представляют собой зашифрованные на master_key блоки данных, которые можно подготовить с помощью jupyter ноутбука base64_json_object_creator.ipynb. Это сделано для того, чтобы чувствительные данные не попадали в системы журналирования хоста.

Следуйте шагам base64_json_object_creator.ipynb для получения nicegui_storage_key_object и db_conf_object.

Для работы Universal Harvester также нужен SSL-сертификат. В случае использования docker-контейнера его возможно расположить в storage.

Запуск и параметры запуска

Для запуска необходимо подготовить строку запуска.

Параметры:

  • --host (--host='0.0.0.0') -- параметр NiceGUI ui.run host, определяет, откуда Universal Harvester будет принимать подключения пользователей;
  • --port (--port=443) -- параметр NiceGUI ui.run port, определяет, какой порт будет использоваться Universal Harvester;
  • --storage_path='/srv/storage' -- путь, который будет использовать приложение в качестве хранилища;
  • --ssl_keyfile='path' --ssl_certfile='path' -- параметры fastapi, используемый SSL сертификат для защиты соединения;
  • --itself_link='https://universalharvester.local:443/' -- параметр необходим для формирования ссылок на результат выполнения сценариев при включении уведомлений (mattermost или telegram);
  • --engine_module_path='engine.py' -- путь к модулю исполнения шагов;
  • --health_module_path='health.py' --scheduler_module_path='scheduler.py' (TBD);
  • --nicegui_storage_key_object -- параметр NiceGUI ui.run storage_secret, ключ шифрования для browser-based storage;
  • --db_conf_object -- параметр подключения к БД;
  • --keycloak_url='https://keycloak.example.ru' -- параметр интеграции с keycloak (url сервиса);
  • --keycloak_client_id='harvester.example.ru' -- параметр интеграции с keycloak (client_id вашего Universal Harvester);
  • --keycloak_realm_id='example_realm' -- параметр интеграции с keycloak (realm_id вашего Universal Harvester);
  • --keycloak_key='keycloak.example.ru:harvester.example.ru' -- параметр интеграции с keycloak (ключ keycloak в разделе keys).

Обычный запуск:

python front.py --host='0.0.0.0' --port=443 --ssl_keyfile='path' --ssl_certfile='path' --itself_link='https://universalharvester.local:443/' --storage_path='/srv/storage' --health_module_path='health.py' --scheduler_module_path='scheduler.py' --engine_module_path='engine.py' --nicegui_storage_key_object='[сформировано с помощью ноутбука base64_json_object_creator.ipynb]' --db_conf_object='[сформировано с помощью ноутбука base64_json_object_creator.ipynb]'

Запуск docker-контейнера:

docker run --log-driver syslog --network=host --log-opt syslog-address=udp://127.0.0.1:514 --mount type=bind,source=/mnt/storage/universal_harvester/storage,target=/srv/storage -it universal_harvester_docker_amd64 front.py --host='0.0.0.0' --port=443 --ssl_keyfile='path' --ssl_certfile='path' --itself_link='https://universalharvester.local:443/' --storage_path='/srv/storage' --health_module_path='health.py' --scheduler_module_path='scheduler.py' --engine_module_path='engine.py' --nicegui_storage_key_object='[сформировано с помощью ноутбука base64_json_object_creator.ipynb]' --db_conf_object='[сформировано с помощью ноутбука base64_json_object_creator.ipynb]'

Блок

... --log-driver syslog --network=host --log-opt syslog-address=udp://127.0.0.1:514

отвечает за механизмы логирования и доступа к Universal Harvester по сети.

Блок

... --mount type=bind,source=/mnt/storage/universal_harvester/storage,target=/srv/storage

отвечает за доступ к хранилищу из контейнера. Убедитесь, что существование хранилища не зависит от существования контейнера.

Интеграция с keycloak

Universal Harvester имеет функционал интеграции с Keycloak. Для интеграции необходимо добавить в ключи (раздел keys) секрет клиента Keycloak, после этого указать в строке запуска параметры keycloak. Параметр keycloak_key указывается в виде system_name:account_name таблицы keys.

... --keycloak_url='https://keycloak.example.ru' --keycloak_client_id='harvester.example.ru' --keycloak_realm_id='example_realm' --keycloak_key='keycloak.example.ru:harvester.example.ru'

Все необходимые параметры можно получить у администратора вашего keycloak сервера.

На данный момент реализован функционал входа в Universal Harvester с помощью keycloak, создание УЗ и управление ролями осуществляется через интерфейс Universal Harvester. Сначала создайте пользователя в Universal Harvester и назначьте ему роли. Далее пользователь сможет использовать для входа keycloak не имея или не используя пароль.