Приложение Dockerized Django - `gunicorn: команда не найдена в развертывании AWS
У меня есть приложение Django, которое развернуто на экземпляре AWS T3A.MICRO EC2 - после некоторых недавних обновлений для изображений Debian и Postgresql, которые я использую в DockerFile, приложение внезапно не начинает успешно работать, когда он попадает в AWS из -за проблемы с gunicorn
- <
pyenv: gunicorn: command not found
Эта проблема не возникла ранее, и, если я просто развертываю сборку на основе предыдущего коммита GIT (перед тем, как делать эти обновления), приложение развертывает и работает просто отлично. Кроме того, когда я запускаю приложение локально через docker-compose up
и вмешиваться в контейнер, я могу запустить gunicorn
Команды без проблем, поэтому я не совсем уверен, в чем проблема - gunicorn
включена в requirements.txt
.
Может быть, мне нужно будет предоставить больше информации, но для начала, вот текущая настройка Dockerfile
и requirements.txt
Файлы - я отмечу изменения, которые были сделаны под ними -
Dockerfile
FROM andrejreznik/python-gdal:py3.11.10-gdal3.6.2
ENV PYTHONUNBUFFERED 1
RUN pip install --upgrade pip
RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get install postgresql-15 postgresql-server-dev-15 -y
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
ARG ALLOWED_HOSTS
ARG AWS_ACCESS_KEY_ID
ARG AWS_S3_CUSTOM_DOMAIN
ARG AWS_SECRET_ACCESS_KEY
ARG AWS_STORAGE_BUCKET_NAME
ARG AWS_SES_ACCESS_KEY_ID
ARG AWS_SES_SECRET_ACCESS_KEY
ARG CORS_ALLOWED_ORIGINS
ARG DATABASE_HOST
ARG DATABASE_NAME
ARG DATABASE_PASSWORD
ARG DATABASE_PORT
ARG DATABASE_USER
ARG SECRET_KEY
ENV ALLOWED_HOSTS=${ALLOWED_HOSTS}
ENV AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
ENV AWS_S3_CUSTOM_DOMAIN=${AWS_S3_CUSTOM_DOMAIN}
ENV AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
ENV AWS_STORAGE_BUCKET_NAME=${AWS_STORAGE_BUCKET_NAME}
ENV AWS_SES_ACCESS_KEY_ID=${AWS_SES_ACCESS_KEY_ID}
ENV AWS_SES_SECRET_ACCESS_KEY=${AWS_SES_SECRET_ACCESS_KEY}
ENV CORS_ALLOWED_ORIGINS=${CORS_ALLOWED_ORIGINS}
ENV DATABASE_HOST=${DATABASE_HOST}
ENV DATABASE_NAME=${DATABASE_NAME}
ENV DATABASE_PASSWORD=${DATABASE_PASSWORD}
ENV DATABASE_PORT=${DATABASE_PORT}
ENV DATABASE_USER=${DATABASE_USER}
ENV SECRET_KEY=${SECRET_KEY}
EXPOSE 8000
RUN ["python", "manage.py", "collectstatic", "--noinput"]
RUN ["python", "manage.py", "migrate"]
CMD ["gunicorn", "--workers=4", "--bind=:8000", "my_app_backend.wsgi"]
requirements.txt
boto3==1.16.18
django==3.1
django-ckeditor==6.0.0
django-cors-headers==3.5.0
django-filter==2.4.0
django-import-export>=2.5.0
django-ses==1.0.3
django-simple-history==2.11.0
django-storages==1.10.1
djangorestframework==3.11.1
djangorestframework-gis==0.16
dj-database-url==0.5.0
gunicorn==20.0.4
Pillow==7.2.0
psycopg2-binary==2.9.10
mysql-connector-python>=8.0.21
timezonefinder>=4.2.0
pytz>=2020.1
Между последним рабочим выпуском и этим я сделал следующие изменения в Dockerfile
-
- Обновленная версия Debian от
FROM andrejreznik/python-gdal:stable
доFROM andrejreznik/python-gdal:py3.11.10-gdal3.6.2
- Добавлено явную версию PostgreSQL через
RUN apt-get install postgresql-15 postgresql-server-dev-15 -y
и в requirements.txt
-
- Обновлено
psycopg2
Зависимость отpsycopg2==2.8.5
доpsycopg2-binary==2.9.10
Помимо этих изменений, эти файлы точно такие же.
До сих пор я экспериментировал с различными комбинациями явного добавления gunicorn
к Dockerfile
через
RUN apt-get install gunicorn -y
и обновление gunicorn
В requirements.txt
к последней версии, но ничего не помогло. По какой -то причине команда gunicorn
не становится доступной в развернутой среде, но я не понимаю, почему.
Дайте мне знать, если есть какая -либо другая информация, которую я могу предоставить, которая поможет диагностировать/решить эту проблему.
Try to debug installation of gunicorn. In example add the following lines to your dockerfile and send the result log here
whereis gunicorn
which gunicorn
dpkg --get-selections | grep '^g'
pip list | grep '^g'