Deploy lead‐up start‐up - wildberries-tech/universal-harvester GitHub Wiki
Развёртывание приложения
Развёртывание можно осуществить двумя способами: просто запустить в подготовленном окружении front.py или использовать docker-контейнер.
Обычный запуск
- Клонируйте репозиторий.
- Обеспечте окружение python (pip install -r requirements.txt).
- Сгенерируйте master_key (с помощью ноутбука base64_json_object_creator.ipynb).
- Определите используемую БД (с помощью ноутбука base64_json_object_creator.ipynb).
- Сгенерируйте ключ nicegui storage (с помощью ноутбука base64_json_object_creator.ipynb).
- Возьмите или сгенерируйте SSL-сертификат.
- Сформируйте строку запуска.
- Запустите front.py со всеми необходимыми параметрами.
- Интерактивно введите master_key.
Docker контейнер
- Клонируйте репозиторий.
- Соберите под нужную архитектуру и доставьте docker контейнер на хост.
- Сгенерируйте master_key (с помощью ноутбука base64_json_object_creator.ipynb).
- Определите используемую БД (с помощью ноутбука base64_json_object_creator.ipynb).
- Сгенерируйте ключ nicegui storage (с помощью ноутбука base64_json_object_creator.ipynb).
- Возьмите или сгенерируйте SSL-сертификат.
- Сформируйте строку запуска.
- Запустите контейнер -> front.py со всеми необходимыми параметрами.
- Интерактивно введите 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 не имея или не используя пароль.