@Jagorm

Как правильно настроить nginx, dockerfile и запуск gunicorn для flask-приложения?

Пишу приложение на flask, дошёл до стадии развёртывания и сильно встрял на ней. Контейнеризирую с помощью docker, nginx нужен для обратного прокси, а gunicorn использую вместо обычного запуска через python, потому что он [gunicorn] вроде как обязателен при использовании nginx для питон-приложений. Само приложение хостится локально (на 127.0.0.1) на порту 8080, к которому я хочу настроить обратное прокси через 80 порт с помощью nginx, чтобы можно было заходить с внешнего ip адреса на сайт без порта. Прошу помочь с настройкой nginx и dockerfile (их файлы ниже), а также с командой запуска докер-контейнера, на данный момент использую такую: "docker run -p 8080:8080 -p 80:80 jshrt:latest", но при этом приложение и на 80, и на 8080 портах пишет, что "Сайт 127.0.0.1 не отправил данных.". Возможно, я ошибаюсь в чём-то глобально и делаю совсем не то.

Dockerfile (в ENTRYPOINT используется bash-скрипт, прилагается далее):
FROM python:3.10.5-alpine

RUN adduser -D jshrt

WORKDIR /home/jshrt

COPY requirements.txt requirements.txt
RUN python -m venv venv
RUN venv/bin/pip install -r requirements.txt
RUN venv/bin/pip install gunicorn

COPY app app
COPY migrations migrations
COPY jshrt.py config.py boot.sh ./
RUN chmod +x boot.sh

ENV FLASK_APP jshrt.py

RUN chown -R jshrt:jshrt ./


RUN apk add nginx
COPY nginx.conf /etc/nginx/nginx.conf

USER jshrt

EXPOSE 8080 80
ENTRYPOINT ["./boot.sh"]


bash-скрипт в ENTRYPOINT:
#!/bin/sh
source venv/bin/activate
flask db upgrade
nginx
exec gunicorn -b 127.0.0.1:8080 jshrt:app


nginx.conf:
http {
  server {
    listen 80;
    server_name jshrt.ru;

    location / {
      proxy_pass http://127.0.0.1:8080;
    }
  }
}
  • Вопрос задан
  • 197 просмотров
Решения вопроса 1
ky0
@ky0 Куратор тега Nginx
Миллиардер, филантроп, патологический лгун
Вы глобально делаете не то в виде пихания нескольких сервисов в один контейнер. Забудьте про 127.0.0.1 - все контейнеры должны ходить друг к другу по именам, а доступ снаружи обеспечивается экспозом 80/443 порта на контейнере с nginx.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы