Данная конфигурация подходит, если проект написан на языке Python и либо не имеет зависимостей, либо они прописаны в файле `requirements.txt`.
#### Секция meta
Секция meta файла amvera.yml будет выглядеть следующим образом:
```
meta:
environment: python
toolchain:
name: pip
version: 3.10
```
Как для сборки, так и для запуска используется образ Docker `python:${meta.toolchain.version}`. Параметр `meta.toolchain.version` необязательный. Если его не указать, будет использоваться образ `python:3`.
Так как значение параметра `meta.toolchain.version` является тегом образа python, можно в качестве его значения использовать произвольный тег на [докер хабе](https://hub.docker.com/_/python/tags). Однако из-за того, что мы вызываем интерпретатор как `python3`, а также пользуемся модулем `venv` в команде `python3 -m venv`, образ Python должен поддерживать эти возможности.
#### Секция build
В секции `build` может быть указан один необязательный параметр: `requirementsPath`. Он определяет путь до файла `requirements.txt` относительно корня репозитория. Если этот параметр не задан, он по умолчанию равен `requirements.txt`.
Если, например, этот файл находится в папке build, то значение этого параметра необходимо указать следующим образом:
```
build:
requirementsPath: build/requirements.txt
```
Если в проекте вообще не используется файл `requirements.txt` или скрипт сборки не сможет его обнаружить по указанному пути, то фаза установки зависимостей будет пропущена.
#### Секция run
В секции `run` могут быть указаны следующие параметры:
- `scriptName`
- `command`
- `persistenceMount`
- `containerPort`
Параметры `scriptName` и `command` взаимоисключающие. Один из них должен быть указан для успешного запуска приложения.
Параметр `scriptName` указывает путь до файла с расширением `py`. Он используется в команде `python3 ${run.scriptName}`:
```
run:
scriptName: app.py
```
В случае, если запуск осуществляется другой командой, например, `gunicorn`, то можно использовать параметр `command`:
```
run:
command: gunicorn --bind 0.0.0.0:80 app:app
```
Параметр `persistenceMount` позволяет указать, в какую директорию будет примонтирована папка с постоянным хранилищем. По умолчанию имеет значение `/data`.
Параметр `containerPort` позволяет указать какой порт слушает приложение. По умолчанию имеет значение `80`.
### Рецепты
#### Минимальный файл amvera.yml
```
meta:
environment: python
toolchain:
name: pip
version: 3.10
run:
scriptName: app.py
```
#### WSGI-приложение (напр., приложение на Flask)
Данный файл предполагает, что `gunicorn` прописан в файле `requirements.txt`.
```
meta:
environment: python
toolchain:
name: pip
version: 3.10
run:
command: gunicorn --bind 0.0.0.0:5000 app:app
containerPort: 5000
```
#### ASGI-приложение (напр., приложение на FastAPI)
Данный файл предполагает, что `uvicorn[standard]` прописан в файле `requirements.txt`.
```
meta:
environment: python
toolchain:
name: pip
version: 3.10
run:
command: uvicorn --host 0.0.0.0 --port 5000 app:app
containerPort: 5000
```