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¶
В данной секции доступно только указание версии 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, либо скачав папку из личного кабинета.
После нажатия кнопки «Собрать» в конфигурации, либо пуше в репозиторий, либо при нажатии кнопки «Завершить» в рамках создания приложения начнется процесс сборки.