Пишу приложение на 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;
}
}
}