Служба приложений Azure App Service (oryx) не использует команду set startup

Я хочу развернуть приложение Django DRF на azure App Service с помощью артефактов (zip deployment), артефакт успешно загружается из azure devops, но выполнение контейнера не удается, поскольку не все необходимые пакеты установлены.

Поскольку мои пакеты python управляются с помощью pipenv, я использую собственный скрипт startup.sh для запуска моей службы App Service, файл выглядит следующим образом:

python -m pip install --upgrade pip
pip install pipenv
pipenv install
pipenv run python manage.py migrate

pipenv run gunicorn --workers 2 --threads 4 --timeout 60 --access-logfile \
    '-' --error-logfile '-' --bind=0.0.0.0:8000 \
     --chdir=/home/site/wwwroot kez_backend.wsgi

и я установил его в своем CD-конвейере следующим образом: enter image description here

но когда я смотрю на журналы моей службы App, скрипт startup.sh не используется, а создается собственный скрипт oryx. Поскольку oryx также создает виртуальное окружение и не может обрабатывать Pip-файлы, зависимость отсутствует.

Журналы приложений:

Я попробовал использовать переменные env, как описано в документации Oryx, но это все равно дало тот же результат

.

Изначально проверьте, что пользовательский скрипт startup.sh включен в артефакт, который вы развертываете на App Service. Этот файл должен находиться в корневом каталоге проекта.

Чтобы указать службе App Service запускать сценарий startup.sh при старте. Перейдите на панель управления App Service, перейдите в раздел Configuration

enter image description here

  • На вкладке Общие настройки отметьте поле Команда запуска. Установите значение, как указано выше. Эта команда указывает Azure использовать пользовательский startup.sh скрипт, расположенный в корне каталога приложения, скорректируйте путь, если скрипт находится в другом месте.

startup.sh:

#!/bin/bash

# Exit immediately if a command exits with a non-zero status
set -e

# Change to the app's directory (optional, depending on your project structure)
cd /home/site/wwwroot

# Install required dependencies
pip install -r requirements.txt

# Alternatively, install from Pipfile using pipenv (if your project uses Pipfile)
# pip install pipenv
# pipenv install --ignore-pipfile

# Install any missing packages explicitly
pip install python-decouple

# Run the application using Gunicorn with binding to port 8000
gunicorn --bind=0.0.0.0:8000 --timeout 600 myapp.wsgi:application

2024-10-23T22:34:40.255652449Z ModuleNotFoundError: Нет модуля с именем 'decouple'

    <<<Пакет
  • decouple не был правильно установлен в среде. Добавьте decouple к Pipfile или requirements.txt и убедитесь, что он подхвачен в пакете развертывания.

Проверьте эти журналы на предмет установки зависимостей, запуска приложения и его обслуживания с помощью Gunicorn.

2024-10-26T12:00:00.000000Z INFO  - Starting container for site
2024-10-26T12:00:00.500000Z INFO  - Container initialized successfully
2024-10-26T12:00:00.600000Z INFO  - Executing command: ./startup.sh

2024-10-26T12:00:01.000000Z INFO  - Changing directory to /home/site/wwwroot
2024-10-26T12:00:01.100000Z INFO  - Installing required packages from requirements.txt
2024-10-26T12:00:01.200000Z INFO  - Collecting gunicorn==20.1.0
2024-10-26T12:00:01.300000Z INFO  - Collecting python-decouple
2024-10-26T12:00:02.000000Z INFO  - Successfully installed gunicorn-20.1.0 python-decouple-3.5

2024-10-26T12:00:02.100000Z INFO  - All dependencies installed successfully

2024-10-26T12:00:02.200000Z INFO  - Starting Gunicorn server with the command: 
                                    gunicorn --bind=0.0.0.0:8000 --timeout 600 myapp.wsgi:application
2024-10-26T12:00:02.300000Z INFO  - [2024-10-26 12:00:02 +0000] [69] [INFO] Starting gunicorn 20.1.0
2024-10-26T12:00:02.400000Z INFO  - [2024-10-26 12:00:02 +0000] [69] [INFO] Listening at: http://0.0.0.0:8000 (69)
2024-10-26T12:00:02.500000Z INFO  - [2024-10-26 12:00:02 +0000] [69] [INFO] Using worker: sync
2024-10-26T12:00:02.600000Z INFO  - [2024-10-26 12:00:02 +0000] [72] [INFO] Booting worker with pid: 72

2024-10-26T12:00:02.700000Z INFO  - Application started successfully and is now listening on port 8000
2024-10-26T12:00:02.800000Z INFO  - [2024-10-26 12:00:02 +0000] [72] [INFO] Worker is processing requests...

2024-10-26T12:00:03.000000Z INFO  - [2024-10-26 12:00:03 +0000] [72] [INFO] GET /healthcheck 200 3ms
2024-10-26T12:00:04.000000Z INFO  - [2024-10-26 12:00:04 +0000] [72] [INFO] POST /api/data 201 10ms
Вернуться на верх