Поделиться через


Настройка пользовательского файла запуска для приложений Python в Службе приложений Azure

В этой статье вы узнаете, когда и как настроить пользовательский файл запуска для веб-приложения 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 — процесс запуска контейнера".

Создание файла запуска

Если вам нужен пользовательский файл запуска, выполните следующие действия.

  1. Создайте файл в проекте с именем startup.txt, startup.sh или другое имя, содержащее команды запуска. Дополнительные сведения о Django, Flask и других платформах см. в следующих разделах этой статьи.

    При необходимости файл запуска может включать несколько команд.

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

  3. В Visual Studio Code выберите значок Azure на панели действий, разверните ресурсы, найдите и разверните подписку, разверните службу приложений и щелкните правой кнопкой мыши службу приложений и выберите "Открыть на портале".

  4. На портале Azure на странице "Конфигурация" службы приложений выберите общие параметры, введите имя файла запуска (например, startup.txt или startup.sh) в разделе "Командазапуска> стека" и нажмите кнопку "Сохранить".

    Замечание

    Вместо использования файла команды запуска можно поместить команду запуска непосредственно в поле "Команда запуска " на портале Azure. Рекомендуется использовать файл команды запуска, так как он хранит конфигурацию в репозитории. Это позволяет управлять версиями для отслеживания изменений и упрощения повторного развертывания в других экземплярах Службы приложений Azure.

  5. Нажмите кнопку "Продолжить", когда появится запрос на перезапуск службы приложений.

    Если вы обращаетесь к сайту Службы приложений 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 вызывает сервер из текущей виртуальной среды.