Python Pip

Данная конфигурация подходит, если проект написан на языке Python и либо не имеет зависимостей, либо они прописаны в файле requirements.txt.

Создать yml-файл можно в интерфейсе, воспользоваться нашим генератором yaml, перейдя по ссылке, либо самостоятельно, используя инструкции ниже.

Инструкция по заполнению конфигурации через интерфейс находится во второй половине данной статьи.

Конфигурационный файл

Секция meta

В секции мета задается версия Python, которую вы используете.

Секция 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, можно в качестве его значения использовать произвольный тег на докер-хабе. Однако из-за того, что мы вызываем интерпретатор как python3, а также пользуемся модулем venv в команде python3 -m venv, образ Python должен поддерживать эти возможности.

Секция build

В секции build указывается имя файла с зависимостями (библиотеками, которые система должна установить через pip).

В секции 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.

Постоянное хранилище и папка 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

Форма графического интерфейса

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

python_config

Секция meta

В данной секции доступно только указание версии python, которую требуется использовать.

Секция build

В данной секции возможно указать имя файла с зависимостями. Чаще всего это requirements.txt. Если файл находится не в корне, то следует указать название, включающее относительный путь до него.

В файле зависимостей указываются библиотеки, которые использует приложение (устанавливалось на компьютер через pip, когда запускался проект локально). Указывать стандартные библиотеки не нужно. Частой ошибкой является использование в файле requirements.txt - имени telebot, а не pyTelegramBotAPI для телеграм-ботов на Python, правильно - pyTelegramBotAPI.

Если, например, файл с зависимостями находится не в корне, а в папке (в примере ниже в папке в build), то в значение этого поля необходимо указать:

build/requirements.txt

Если файл находится в корне:

requirements.txt

Секция run

Параметры scriptName и command взаимоисключающие. Один из них должен быть указан для успешного запуска приложения.

scriptName

В данном поле указывается имя файла, который содержит точку входа в программу (функцию main). Так, в случае если проект состоит из одного файла с названием myApp.py достаточно в это поле вписать:

myApp.py

command

Если проект запускается командой, укажите вместо scriptName требуемую команду запуска.

Примером может являться команда из статьи “Быстрый старт”

gunicorn --bind 0.0.0.0:5000 app:app

Либо в зависимости от порта

command: gunicorn --bind 0.0.0.0:80 app:app

Заполняется либо scriptName, либо command.

persistenceMount

Это папка постоянного хранилища. В нашем сервисе она по умолчанию /data

Важно

Файлы в /data не затираются при пересборке проекта, в отличие от репозитория, где они откатятся к версии коммита. Поэтому, мы рекомендуем использовать именно /data для баз данных и других получаемых в процессе работы приложения файлов.

Частая ошибка

Если вы создадите в репозитории папку data, это не то-же самое, что папка /data у нас. Папка data в репозитории, это просто папка в репозитории, которая может быть затерта при пересборке проекта.

В коде проекта следует указать /data как место для сохранения файлов.

Если вам неудобно использовать каталог /data, обычно, вы можете его изменить в файле amvera.yml. Например:

persistenceMount: /var/myapp/data

Задание значение persistenceMount равной /app или его подпапке может приводить к некорректному поведению.

conteinerPort

Указывается порт, который слушает приложение. По умолчанию это 80 порт.

Если ваше приложение работает по протоколу HTTP, но использует номер порта, отличный от 80, требуется указать номер этого порта в данное поле. Например, если приложение слушает порт 3000, то в поле вписывается значение:

3000

Применение конфигурации

Важно

После заполнения соответствующих полей нажмите кнопки «применить» (для раздела «Конфигурация») или «завершить», если вы задаете параметры при создании проекта.

Конфигурационный файл будет добавлен в корень репозитория и отобразится в папке «Code» раздела «Репозиторий». Не забудьте добавить его в свой локальный репозиторий, склонировав репозиторий из Amvera, либо скачав папку из личного кабинета.

После нажатия кнопки «Собрать» в конфигурации, либо пуше в репозиторий, либо при нажатии кнопки «Завершить» в рамках создания приложения начнется процесс сборки.