Я пытаюсь перенести приложение Django из Google Kubernetes Engine в Google Cloud Run, который полностью управляется. По сути, с помощью Cloud Run вы упаковываете свое приложение в один Dockerfile
, а Google делает все остальное.
У меня есть Dockerfile
, который в какой-то момент вызывает скрипт bash через ENTRYPOINT
Но мне нужно запустить Nginx и запустить Gunicorn. Документация Google Cloud Run предлагает запустить Gunicorn следующим образом:
CMD gunicorn -b :$PORT foo.wsgi
(давайте сядем, мое Django приложение называется "foo")
Но мне также нужно чтобы начать Nginx с помощью:
CMD ["nginx", "-g", "daemon off;"]
И поскольку в Dockerfile разрешен только один CMD
, я не уверен, как их объединить.
Чтобы попытаться обойти некоторые из этих трудностей, я искал использование Dockerfile для сборки, который уже работает, и я наткнулся на этот: https://github.com/tiangolo/meinheld-gunicorn-docker
Но пути не совсем соответствует моему. Цитирование из документации этого репо:
Вам не нужно клонировать репозиторий GitHub. Вы можете использовать это изображение в качестве базового изображения для других изображений, используя это в вашем Dockerfile
:
FROM tiangolo/meinheld-gunicorn:python3.7
COPY ./app /app
Ожидается файл в /app/app/main.py
.
И будет ожидать, что она будет содержать переменную app
с вашим приложением "WSGI".
Мой wsgi.py
файл заканчивается на /app/foo/foo/wsgi.py
и содержит приложение с именем application
Но если я правильно понимаю эту документацию, когда в ней говорится, что приложение WSGI будет называться app и будет находиться в /app/app/main.py
, это, в основном, говорит о том, что мне нужно пересмотреть путь и имя переменной так что когда он строит образ, он знает, что app
называется application
и что вместо того, чтобы найти его в /app/app/main.py
, он найдет его в /app/foo/foo/wsgi.py
Я предполагаю, что могу исправить app
vs application
имя переменной, добавив строку в мой wsgi.py
файл, например app = application
, но я не уверен, как исправить путь, который Docker ожидает.
Может кто-нибудь объяснить мне как адаптировать это к моим потребностям?
(или любой другой способ заставить его работать)