Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье вы узнаете, когда и как настроить пользовательский файл запуска для веб-приложения Python, размещенного в службе приложений Azure. Хотя файл запуска не требуется для локальной разработки, служба приложений Azure запускает развернутое веб-приложение в контейнере Docker, которое может использовать команды запуска при наличии.
Вам нужен пользовательский файл запуска в следующих ситуациях:
Пользовательские аргументы Gunicorn: вы хотите запустить веб-сервер gunicorn по умолчанию с дополнительными аргументами за пределами его значений по умолчанию.
--bind=0.0.0.0 --timeout 600
Альтернативные платформы или серверы: приложение создается с помощью платформы, отличной от Flask или Django, или вы хотите использовать другой веб-сервер, кроме Gunicorn.
Структура приложений Flask, не стандартная. У вас есть приложение Flask, основной файл кода которого называется что-то другое, кроме app.py или application.py*, или объект приложения называется чем-то другим
app
.
Другими словами, требуется пользовательская команда запуска, если проект не имеет app.py или application.py-файл в корневой папке с именем app
объекта приложения Flask.
Дополнительные сведения см. в разделе "Настройка приложений Python — процесс запуска контейнера".
Создание файла запуска
Если вам нужен пользовательский файл запуска, выполните следующие действия.
Создайте файл в проекте с именем startup.txt, startup.sh или другое имя, содержащее команды запуска. Дополнительные сведения о Django, Flask и других платформах см. в следующих разделах этой статьи.
При необходимости файл запуска может включать несколько команд.
Закоммитьте файл в репозиторий кода, чтобы его можно было развернуть вместе с остальной частью приложения.
В Visual Studio Code выберите значок Azure на панели действий, разверните ресурсы, найдите и разверните подписку, разверните службу приложений и щелкните правой кнопкой мыши службу приложений и выберите "Открыть на портале".
На портале Azure на странице "Конфигурация" службы приложений выберите общие параметры, введите имя файла запуска (например, startup.txt или startup.sh) в разделе "Командазапуска> стека" и нажмите кнопку "Сохранить".
Замечание
Вместо использования файла команды запуска можно поместить команду запуска непосредственно в поле "Команда запуска " на портале Azure. Рекомендуется использовать файл команды запуска, так как он хранит конфигурацию в репозитории. Это позволяет управлять версиями для отслеживания изменений и упрощения повторного развертывания в других экземплярах Службы приложений Azure.
Нажмите кнопку "Продолжить", когда появится запрос на перезапуск службы приложений.
Если вы обращаетесь к сайту Службы приложений Azure перед развертыванием кода приложения, появится сообщение "Ошибка приложения", так как код недоступен для обработки запроса.
Команды запуска Django
По умолчанию Служба приложений Azure находит папку, содержащую файл wsgi.py, и запускает Gunicorn с помощью следующей команды:
# <module> is the folder that contains wsgi.py. If you need to use a subfolder,
# specify the parent of <module> using --chdir.
gunicorn --bind=0.0.0.0 --timeout 600 <module>.wsgi
Если вы хотите изменить любые аргументы Gunicorn, например увеличение значения времени ожидания до 1200 секунд(--timeout 1200
), создайте пользовательский файл команды запуска. Это позволяет переопределить параметры по умолчанию с конкретными требованиями. Дополнительные сведения см. в разделе "Процесс запуска контейнера" — приложение Django.
Команды запуска Flask
По умолчанию служба приложений в Linux предполагает, что приложение Flask соответствует следующим критериям.
- Вызываемый объект WSGI называется
app
. - Код приложения содержится в файле с именем application.py или app.py.
- Файл приложения находится в корневой папке приложения.
Если проект отличается от этой структуры, пользовательская команда запуска должна определить расположение объекта приложения в файле форматирования :app_object:
Другое имя файла и (или) имя объекта приложения: если основной файл кода приложения hello.py , а объект приложения называется
myapp
, команда запуска выглядит следующим образом:gunicorn --bind=0.0.0.0 --timeout 600 hello:myapp
Файл запуска находится в подкаталоге: если файл запуска — myapp/website.py и объект приложения —
app
, используйте аргумент Gunicorn--chdir
, чтобы указать папку, и затем назовите файл запуска и объект приложения как обычно.gunicorn --bind=0.0.0.0 --timeout 600 --chdir myapp website:app
Файл запуска находится в модуле: в коде python-sample-vscode-flask-tutorial файл запуска webapp.py содержится в папке hello_app, которая является модулем с файлом __init__.py. Объект приложения называется
app
и определяется в __init__.py и webapp.py использует относительный импорт.Из-за этого указание Gunicorn на
webapp:app
вызывает ошибку "Попытка относительного импорта в непакете", и приложение не запускается.В этой ситуации создайте файл схима, который импортирует объект приложения из модуля, а затем запустите приложение с помощью схима. Например, код python-sample-vscode-flask-tutorial содержит startup.py со следующим содержимым:
from hello_app.webapp import app
Затем выполняется следующая команда запуска:
gunicorn --bind=0.0.0.0 --workers=4 startup:app
Дополнительные сведения см. в разделе "Процесс запуска контейнера" — приложение Flask.
Другие платформы и веб-серверы
Контейнер службы приложений, на котором выполняются приложения Python, по умолчанию установлен Django и Flask вместе с веб-сервером Gunicorn.
Чтобы использовать платформу, отличную от Django или Flask (например , Falcon, FastAPI и т. д.), или использовать другой веб-сервер:
Включите платформу и (или) веб-сервер в файл requirements.txt .
В команде запуска определите вызываемый WSGI, как описано в предыдущем разделе для Flask.
Чтобы запустить веб-сервер, отличный от Gunicorn, используйте
python -m
команду вместо вызова сервера напрямую. Например, следующая команда запускает сервер uvicorn , предполагая, что вызываемый объект WSGI называетсяapp
и находится в application.py:python -m uvicorn application:app --host 0.0.0.0
Вы используете
python -m
, так как веб-серверы, установленные через requirements.txt , не добавляются в глобальную среду Python и поэтому не могут вызываться напрямую. Командаpython -m
вызывает сервер из текущей виртуальной среды.