@Jagorm

Как на хостинге запустить flask приложение на 80 порту?

Собираю приложение в докере, вот докерфайл и bash-скрипт, используемый в ENTRYPOINT:

Dockerfile:

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 ./
USER jshrt

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


boot.sh (используемый в ENTRYPOINT скрипт):

#!/bin/sh
source venv/bin/activate
flask db upgrade
exec python -u jshrt.py


Когда контейнер запускается локально, можно заходить на сайт без порта (так как приложение хостится на 80 порту), но вот на хостинге это не получается. Он (хостинг) выдаёт свой порт, несмотря на указание 80 порта в портах, которые надо открыть, и зайти на сайт можно только через выданные хостингом ip адрес и порт, а при попытке зайти без порта выдаётся это (после уведомления о небезопасности подключения):

64e746825366a139018547.png

Мне нужно открыть 80 порт для того, чтобы подключить домен, так как без него моё приложение по некоторым причинам работать корректно не будет. Я искренне не понимаю, почему так происходит. Неужели это из-за хостинга?
  • Вопрос задан
  • 439 просмотров
Решения вопроса 1
Mike_Ro
@Mike_Ro
Python, JS, WordPress, SEO, Bots, Adversting
Как вариант:
1. Создать А-запись с ip сервера.
2. На сервер поставить обратный прокси, например Nginx, в котором прописать правила, откуда брать инфу, если зайдут на указанный домен, например на контейнер докера с портом 3000.
3. Запустить контейнер докера с портами 8080>3000 (внешним и внутренним соответственно). Flask приложение в контейнере должно слушать 3000 порт (либо изменить во всех случаях на тот, который слушает).
4. Выпустить SSL для домена, затем дописать в Nginx правило обработки https.
5. Проверить файервол, чтобы разрешал локальный трафик на 127.0.0.1:3000.

Кстати, замечал множество раз у новичков, что они создавали правила в файерволе, а после перезагрузки сервера - правила разумеется возвращались на дефолтные, так вот - нужно сохранить эти правила в файл, затем заставить файервол при перезагрузке - брать эти правила из этого файла.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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