Служба приложений 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-конвейере следующим образом:
но когда я смотрю на журналы моей службы App, скрипт startup.sh не используется, а создается собственный скрипт oryx. Поскольку oryx также создает виртуальное окружение и не может обрабатывать Pip-файлы, зависимость отсутствует.
Журналы приложений:
Я попробовал использовать переменные env, как описано в документации Oryx, но это все равно дало тот же результат
.
Изначально проверьте, что пользовательский скрипт startup.sh
включен в артефакт, который вы развертываете на App Service. Этот файл должен находиться в корневом каталоге проекта.
Чтобы указать службе App Service запускать сценарий startup.sh
при старте. Перейдите на панель управления App Service, перейдите в раздел Configuration
- На вкладке Общие настройки отметьте поле Команда запуска. Установите значение, как указано выше. Эта команда указывает 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