Наконец-то добрался до сути всего, после глубокого изучения AWS документации и форумов ...
По сути, было много изменений, которые произошли вместе с переходом Beanstalk с Amazon Linux на Amazon Linux 2. Многие из этих изменений неопределенно упомянуты здесь .
Одно из основных отличий платформы Python, упомянутых в приведенной выше ссылке, заключается в том, что « путь к каталогу приложения на экземплярах Amazon EC2 вашей среды - / var / app / current. На платформах AMI Amazon Linux это был / opt / python / current / app ». Это очень важно, когда вы пытаетесь создать Django скрипты миграции, как я объясню более подробно ниже, или когда вы eb ssh
переходите к экземпляру Beanstalk и перемещаетесь по нему самостоятельно.
Другой важный Отличие заключается во введении хуков платформы, о котором упоминается в этой замечательной статье , здесь . Согласно этой статье, «хуки платформы - это набор каталогов внутри пакета приложений, которые можно заполнять скриптами». По сути, эти скрипты теперь будут обрабатывать то, что предыдущие container_commands обрабатывали в файлах конфигурации .ebextensions. Вот структура каталогов этих хуков платформы:
Knowing this, and walking through this forum здесь , где замечательные члены сообщества столкнулись с проблемой заполнения пробелов в документах Amazon, мне удалось успешно развернуть с настроенным следующим файлом :
(Обратите внимание, что «MDGOnline» - это имя моего Django приложения)
.ebextensions \ 01_packages.config :
packages:
yum:
git: []
postgresql-devel: []
libjpeg-turbo-devel: []
.ebextensions \ django .config :
container_commands:
01_sh_executable:
command: find .platform/hooks/ -type f -iname "*.sh" -exec chmod +x {} \;
option_settings:
aws:elasticbeanstalk:application:environment:
DJANGO_SETTINGS_MODULE: MDGOnline.settings
aws:elasticbeanstalk:environment:proxy:staticfiles:
/static: static
/static_files: static_files
aws:elasticbeanstalk:container:python:
WSGIPath: MDGOnline.wsgi:application
.platform \ hooks \ Preploy \ 01_migrations. sh:
#!/bin/bash
source /var/app/venv/*/bin/activate
cd /var/app/staging
python manage.py makemigrations
python manage.py migrate
python manage.py createfirstsuperuser
python manage.py collectstatic --noinput
Обратите внимание, что скрипты '. sh' должны быть основаны на linux. Некоторое время я сталкивался с ошибкой, из-за которой развертывание не удавалось, и в журналах появилось это сообщение: .platform\hooks\predeploy\01_migrations.sh failed with error fork/exec .platform\hooks\predeploy\01_migrations.sh: no such file or directory
. Оказывается, это произошло из-за того, что я создал этот скрипт в своей среде разработки windows. Мое решение состояло в том, чтобы создать его в среде linux и скопировать в каталог моей среды разработки в Windows. Я уверен, что существуют способы конвертировать DOS в Unix. Этот выглядит многообещающе dos2 unix!
Я действительно wi sh AWS мог бы лучше задокументировать эту миграцию, но я надеюсь, что этот ответ может сэкономить кому-то бесчисленные часы, которые я потратил на получение это развертывание должно быть успешным.
Пожалуйста, не стесняйтесь обращаться ко мне за разъяснениями по любому из вышеперечисленных!
РЕДАКТИРОВАТЬ: Я добавил "container_command" в свой файл конфигурации выше, поскольку он был добавлен к моему вниманию, что другой пользователь также обнаружил ошибку «доступ запрещен» для ловушки платформы при развертывании. Эта команда «01_sh_executable» предназначена для изменения всех сценариев. sh в каталоге перехватчиков приложения, чтобы у Elasti c Beanstalk было надлежащее разрешение на их выполнение в процессе развертывания. Я нашел это решение команды контейнера на этом форуме здесь :