Skip to main content

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

Рекомендации по заполнению конфигурации через раздел личного кабинета

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

Секции
meta (version)

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

build (requirementsPath)

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

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

build:
  requirementsPath: build/requirements.txt

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

build:
  requirementsPath: requirements.txt

run

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

scriptName

Укажите имя файла, который запускает проект. Если проект состоит из одного файла, укажите имя данного файла.

Обычно, это такие имена, как app.py, main.py и т.д..

command

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

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

run:
  command: gunicorn --bind 0.0.0.0:5000 app:app

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

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

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

persistenceMount

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

ВАЖНО №1: Файлы в /data не затираются при пересборке проекта, в отличии от репозитория, где они откатятся к версии коммита. Поэтому, мы рекомендуем использовать именно /data для баз данных.

ВАЖНО №2: Если вы создадите в репозитории папку data, это не то-же самое, что папка /data у нас. Папка data в репозитории, это просто папка в репозитории, которая может быть затерта при пересборке проекта.

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

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

persistenceMount: /var/myapp/data

При развертывании полностью с помощью amvera.yml, мы не рекомендуем задавать значение run.persistenceMount равной /app или его подпапке: это может приводить к некорректному поведению.

conteinerPort

Укажите порт, который слушает ваше приложение. В базовой версии у нас открыт 80 порт.

Если ваше приложение работает по протоколу HTTP, но использует номер порта, отличный от 80, это можно настроить следующим файлом amvera.yml:

run:
  containerPort: 3000

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

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

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