Konfigurowanie niestandardowego pliku uruchamiania dla aplikacji języka Python w usłudze Azure App Service

Z tego artykułu dowiesz się, kiedy i jak skonfigurować niestandardowy plik startowy dla aplikacji internetowej w języku Python hostowanej w usłudze Azure App Service. Chociaż plik startowy nie jest wymagany do programowania lokalnego, Azure App Service uruchamia wdrożona aplikację internetową w kontenerze platformy Docker, które mogą używać poleceń uruchamiania, jeśli je podasz.

W następujących sytuacjach potrzebujesz niestandardowego pliku uruchamiania:

  • Niestandardowe argumenty Gunicorn: Chcesz uruchomić domyślny serwer sieciowy Gunicorn z dodatkowymi argumentami, wykraczającymi poza jego wartości domyślne, które są --bind=0.0.0.0 --timeout 600.

  • Alternatywne struktury lub serwery: Aplikacja jest kompilowana przy użyciu platformy innej niż Flask lub Django albo chcesz użyć innego serwera internetowego zamiast gunicorn.

  • Niestandardowa struktura aplikacji Flask: masz aplikację Flask, której główny plik kodu nazywa się inaczej niż app.py lub application.py, albo obiekt aplikacji nazywa się inaczej niż app.

Innymi słowy, potrzebujesz niestandardowego polecenia uruchamiania, chyba że projekt ma plik app.py lub application.py w folderze głównym z obiektem aplikacji Flask o nazwie app.

Aby uzyskać więcej informacji, zobacz Konfigurowanie aplikacji języka Python — proces uruchamiania kontenera.

Wymagania wstępne

Przed skonfigurowaniem niestandardowego pliku startowego musisz mieć istniejącą usługę App Service w systemie Linux z uruchomionym środowiskiem Python. Aby utworzyć usługę App Service, postępuj zgodnie z przewodnikiem Szybki start dotyczącym języka Python dla usługi App Service. Usługę App Service można również utworzyć przy użyciu Azure CLI:

az webapp create --resource-group <group> --plan <plan> --name <app-name> --runtime "PYTHON:3.12"

Tworzenie pliku uruchamiania

Jeśli potrzebujesz niestandardowego pliku uruchamiania, wykonaj następujące kroki:

  1. Utwórz plik w projekcie o nazwie startup.txt, startup.sh lub inną wybraną nazwę, która zawiera polecenia uruchamiania. Zapoznaj się z kolejnymi sekcjami w tym artykule, aby uzyskać szczegółowe informacje na temat platform Django, Flask i innych.

    W razie potrzeby plik startowy może zawierać wiele poleceń.

  2. Zatwierdź plik w repozytorium kodu, aby można go było wdrożyć w pozostałej części aplikacji.

  3. W programie Visual Studio Code wybierz ikonę platformy Azure na pasku działań, rozwiń ZASOBY, znajdź i rozwiń swoją subskrypcję, a następnie rozwiń App Services, kliknij prawym przyciskiem myszy usługę App Service i wybierz Otwórz w portalu.

  4. W witrynie Azure Portal z menu usługi po lewej stronie wybierz pozycję Konfiguracja ustawień>. Na stronie Konfiguracja usługi App Service wybierz pozycję Ustawienia ogólne, wprowadź nazwę pliku uruchamiania (na przykład startup.txt lub startup.sh) w obszarzePolecenie uruchamiania> stosu, a następnie wybierz pozycję Zapisz.

    Alternatywnie możesz użyć Azure CLI, aby ustawić polecenie uruchamiania:

    az webapp config set --resource-group <group> --name <app-name> --startup-file "<startup-command>"
    

    Uwaga / Notatka

    Zamiast używać pliku polecenia uruchamiania, możesz umieścić polecenie uruchamiania bezpośrednio w polu Polecenie uruchamiania w witrynie Azure Portal. Użycie pliku polecenia uruchamiania jest zalecane, ponieważ przechowuje konfigurację w repozytorium. Dzięki temu kontrola wersji umożliwia śledzenie zmian i upraszcza ponowne wdrażanie w innych wystąpieniach usługi Azure App Service.

  5. Po wyświetleniu monitu o ponowne uruchomienie usługi App Service wybierz pozycję Kontynuuj .

    Jeśli uzyskujesz dostęp do witryny usługi Azure App Service przed wdrożeniem kodu aplikacji, zostanie wyświetlony komunikat "Błąd aplikacji", ponieważ żaden kod nie jest dostępny do przetworzenia żądania.

Polecenia uruchamiania Django

Domyślnie usługa Azure App Service lokalizuje folder zawierający plik wsgi.py i uruchamia aplikację Gunicorn za pomocą następującego polecenia:

# <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

Jeśli chcesz zmodyfikować dowolne argumenty gunicorn, takie jak zwiększenie wartości limitu czasu do 1200 sekund (--timeout 1200), utwórz niestandardowy plik polecenia uruchamiania. Ta metoda zastępuje ustawienia domyślne określonymi wymaganiami. Aby uzyskać więcej informacji, zobacz Proces uruchamiania kontenera — aplikacja Django.

Polecenia uruchamiania platformy Flask

Domyślnie App Service dla systemu Linux zakłada, że aplikacja platformy Flask spełnia następujące kryteria:

  • Wywoływanie programu WSGI nosi nazwę app.
  • Kod aplikacji znajduje się w pliku o nazwie application.py lub app.py.
  • Plik aplikacji znajduje się w folderze głównym aplikacji.

Jeśli projekt różni się od tej struktury, niestandardowe polecenie uruchamiania musi określać lokalizację obiektu aplikacji w formacie plik:obiekt_aplikacji:

  • Inna nazwa pliku i/lub nazwa obiektu aplikacji: Jeśli główny plik kodu aplikacji jest hello.py , a obiekt aplikacji nosi nazwę myapp, polecenie uruchamiania wygląda następująco:

    gunicorn --bind=0.0.0.0 --timeout 600 hello:myapp
    
  • Plik startowy znajduje się w podfolderze: jeśli plik startowy to myapp/website.py , a obiekt aplikacji to app, użyj argumentu Gunicorn --chdir , aby określić folder, a następnie nazwij plik startowy i obiekt aplikacji w zwykły sposób:

    gunicorn --bind=0.0.0.0 --timeout 600 --chdir myapp website:app
    
  • Plik startowy znajduje się w module: w kodzie python-sample-vscode-flask-tutorial plik webapp.py znajduje się w folderze hello_app, który sam w sobie jest modułem z plikiem __init__.py. Obiekt aplikacji ma nazwę app i jest zdefiniowany w __init__.py. webapp.py używa importu względnego.

    Ze względu na ten układ, kierując Gunicorn na webapp:app, wygenerowany zostaje błąd "Podjęto próbę względnego importu w nie-pakiecie," a uruchomienie aplikacji kończy się niepowodzeniem.

    W takiej sytuacji utwórz plik tymczasowy, który importuje obiekt aplikacji z modułu, a następnie uruchom aplikację za pomocą Gunicorn przy użyciu tego pliku tymczasowego. Na przykład kod python-sample-vscode-flask-tutorial zawiera startup.py z następującą zawartością:

    from hello_app.webapp import app
    

    Polecenie uruchamiania jest następujące:

    gunicorn --bind=0.0.0.0 --workers=4 startup:app
    

Aby uzyskać więcej informacji, zobacz Proces uruchamiania kontenera — aplikacja Flask.

Inne struktury i serwery internetowe

Kontener usługi App Service, który uruchamia aplikacje języka Python, ma domyślnie zainstalowane oprogramowanie Django i Flask wraz z serwerem internetowym Gunicorn.

Aby użyć platformy innej niż Django lub Flask (np. Falcon, FastAPI i inne) lub użyć innego serwera internetowego:

  • Uwzględnij platformę i serwer internetowy w pliku requirements.txt .

  • W poleceniu uruchamiania zidentyfikuj wywołanie usługi WSGI zgodnie z opisem w poprzedniej sekcji dla platformy Flask.

  • Aby uruchomić serwer internetowy inny niż Gunicorn, użyj python -m polecenia zamiast bezpośredniego wywoływania serwera. Na przykład następujące polecenie uruchamia serwer uvicorn, przy założeniu, że obiekt wywoływalny WSGI nosi nazwę app i znajduje się w application.py:

    python -m uvicorn application:app --host 0.0.0.0
    

    Używasz python -m, ponieważ serwery internetowe zainstalowane za pośrednictwem requirements.txt nie są dodawane do środowiska globalnego Python i dlatego nie można wywołać ich bezpośrednio. Polecenie python -m wywołuje serwer z poziomu bieżącego środowiska wirtualnego.

Wdrażanie aplikacji

Po skonfigurowaniu pliku uruchamiania należy wdrożyć kod aplikacji w usłudze App Service. Użyj wybranej metody Azure CLI lub wdrożenia:

az webapp up --name <app-name>

Aby uzyskać więcej opcji wdrażania, zobacz Najlepsze rozwiązania dotyczące wdrażania.