name: flask service_id: 89 service_display_name: Web-сервер с фреймворком Flask service_short_name: flask service_man: '# Инструкция по развертыванию Web-сервер с фреймворком Flask через платформу

## 1. Общая информация

Сервис **Web-сервер с фреймворком Flask** предназначен для развертывания веб-приложений на базе Flask.

### Доступные операции

create — включить сервис, развернуть веб-приложение с указанными параметрами.
delete — удалить сервис, только после suspend.
modify — изменить настройки сервиса и переразвернуть.
suspend — выключить веб-приложение, остановить обслуживание.
resume — включить веб-приложение после suspend.

---

## 2. Параметры развертывания

Параметры входных данных операции **create**:

### Имя домена
Описание: доменное имя для доступа к веб-приложению. Если указан FQDN, происходит проверка DNS на валидность А-записи. А-запись должна указывать на балансировщик ресурсной платформы. Если указано имя в рамках одного октета, оно будет добавлено в публичную DNS-зону.
Пример значения: строка, допустимые FQDN или имя в одном октете. Пример: example.com или myapp.

### Платформа для развертывания
Описание: кластер Kubernetes, в котором будет развернуто приложение.
Пример значения: идентификатор кластера Kubernetes.

### Квота ядра пода
Описание: количество CPU, выделяемое на под, в Milicores.
Пример значения: целое число, например 500 для 0.5 ядра.

### Квота памяти пода
Описание: количество памяти, выделяемое на под, в Megabytes.
Пример значения: целое число, например 512 для 512 MB.

### Кол-во реплик пода
Описание: количество инстансов пода для масштабирования.
Пример значения: целое число, шт, например 2.

### URL Проекта (gitpath)
Описание: полный HTTPS путь до проекта в Git-репозитории.
Пример значения: URL в формате https://github.com/myuser/myproject.git. Доступ к репозиторию должен быть публичным.

### URL HealthCheck
Описание: путь для проверки здоровья приложения внутри пода.
Пример значения: строка, путь, например /api/v1/health.

### Переменные окружения пода
Описание: структура данных, которая будет передана как переменные окружения в под.
Пример значения: ключ-значение, например {"ENV": "production"}.

---

## 3. Рекомендованные характеристики

### Тестовое окружение
- Квота ядра пода: 300m (0.3 ядра)
- Квота памяти пода: 256 MB
- Кол-во реплик пода: 1

### Промышленное окружение
- Квота ядра пода: от 1000m (1 ядро) в зависимости от нагрузки
- Квота памяти пода: от 1024 MB (1 GB) с учетом потребностей приложения
- Кол-во реплик пода: от 2 для обеспечения отказоустойчивости

---

## 4. Выходные параметры
Операция create не возвращает явных выходных параметров. Успешное выполнение операции приводит к развертыванию сервиса, доступного по указанному домену.

---

## 5. Дополнительная информация
- В корне проекта должен находиться файл requirements.txt со списком зависимостей Python.
- Исходный код веб-приложения должен располагаться в директории site.
- Запуск веб-сервера осуществляется командой python app.py.
- Используется версия Python: python:3.12-slim.
- Git-репозиторий должен быть публично доступен для платформы.
- Операция delete возможна только после suspend.
- Операция modify приводит к переразвертыванию с новыми параметрами.' lifecycle: suspend_on_destroy_default: true adopt_existing_on_create_default: false outputs: params: - code: state_params type: map - code: state_out type: map - code: state_params_flat type: map - code: state_out_flat type: map - code: vault_secrets type: map sensitive: true - code: vault_url type: string - code: vault_user_path type: string - code: vault_fields type: list operations: - name: create id: 88 kind: instance action: create params: - id: 248 code: domain data_type: string required: true default: web01 regex: ^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$ man: Если будет указан `FQDN`, то происходят проверки DNS на валидность А-записи. А-запись **обязана смотреть на балансировщик** ресурсной платформы.
Если указано имя `в рамках одного октета`, будет добавлено **в публичную днс-зону** sort: 10 - id: 249 code: resourceRealm data_type: string required: true func: getAvailableResourceRealms descr: Кластер Kubernetes в котором будет развёрнуто приложение man: Выбрать платформу из списка

**Если список не отображается**
обратитесь к сервис менеджеру с вопросом предоставления ресурсной платформы sort: 20 - id: 250 code: resourceCPU data_type: integer > 0 required: true default: "300" maxvalue: 8000 minvalue: 100 descr: 'Пример: `1000`' man: Указывается в Milicores
`1000` Mili == `1` Ядро sort: 30 is_modifiable: true - id: 251 code: resourceMemory data_type: integer > 0 required: true default: "256" maxvalue: 8192 minvalue: 128 descr: 'Пример: `2048`' man: Указывается в Megabytes sort: 40 is_modifiable: true - id: 252 code: resourceInstances data_type: integer > 0 required: true default: "1" maxvalue: 7 minvalue: 1 descr: 'Пример: `3`' man: Балансировка производится между всеми репликами sort: 50 is_modifiable: true - id: 253 code: gitPath data_type: string required: true default: https://github.com/Foxyhhd/Baldurs-Gate-test.git descr: 'Пример: `https://github.com/myuser/myproject.git`' man: Проект должен быть публичным sort: 60 is_modifiable: true - id: 254 code: jsonEnv data_type: map required: false man: Структура, которая будет передана как переменные окружения sort: 80 is_modifiable: true - id: 255 code: healthPath data_type: string required: false descr: 'Пример: `/api/v1/health`' man: Может быть пустым. Если ничего не передано, проверяется `tcpsocket`
Путь до healtcheck для запуска пода в Kubernetes, который отдаст 200 код sort: 70 - name: delete id: 89 kind: instance action: delete man: Удаление возможно только после остановки сервиса через операцию `suspend`
После выполнения операции необходимо выждать определенное кол-во времени params: [] - name: modify id: 146 kind: instance action: modify params: - id: 451 code: resourceCPU data_type: integer > 0 required: true maxvalue: 8000 minvalue: 100 descr: 'Пример: `1000`' man: Указывается в Milicores
`1000` Mili == `1` Ядро sort: 10 - id: 452 code: resourceMemory data_type: integer > 0 required: true maxvalue: 8192 minvalue: 128 descr: 'Пример: `2048`' man: Указывается в Megabytes sort: 20 - id: 453 code: resourceInstances data_type: integer > 0 required: true maxvalue: 7 minvalue: 1 descr: 'Пример: `3`' man: Балансировка производится между всеми репликами sort: 30 - id: 454 code: gitPath required: true descr: 'Пример: `https://github.com/myuser/myproject.git`' man: Проект должен быть публичным sort: 40 - id: 455 code: jsonEnv data_type: map required: true man: Структура, которая будет передана как переменные окружения sort: 50 - name: resume id: 145 kind: instance action: resume params: [] - name: suspend id: 125 kind: instance action: suspend params: []