Как настроить Nginx на Heroku для обслуживания трафика с порта 80 на порт 5000? - PullRequest
0 голосов
/ 23 декабря 2018

ОБНОВЛЕНИЕ: Видимо, не было проблемы с портами.Я смог перепривязать порты и подать свое приложение на порт 80, но я не решил проблему.Проблема в том, что мое приложение на Heroku не правильно развернуто.Вот что показано в журналах сборки Heroku:

enter image description here

ОРИГИНАЛЬНЫЙ ВОПРОС: У меня возникла проблема при попытке установить приложение Flask на Heroku.Я хочу, чтобы сервер Flask работал на порту 5000, и настроил прокси-сервер Nginx для обслуживания трафика с порта 80 на порт 5000, чтобы я мог по-прежнему получать доступ к веб-странице из Heroku (который по умолчанию обслуживает трафик через порт 80).

В настоящее время я добавил heroku-buildpack-runit и heroku-buildpack-nginx в свою конфигурацию Heroku, но я не уверен, как правильно запустить Nginx, чтобы сделать то, что я хочу.Мой Procfile выглядит так:

    web: bin/start-nginx gunicorn app:app

Это не то, что я хотел бы.На самом деле, я не уверен, что он вообще что-то делает.

Заметьте, я использую gunicorn для запуска своего приложения Flask.

Есть идеи?

1 Ответ

0 голосов
/ 23 декабря 2018

На Heroku вы не можете выбрать порт, который используете.Вы должны использовать порт, который Heroku назначает вам через переменную окружения PORT.Вам также не нужен Nginx для запуска Flask.Просто используйте gunicorn или другой веб-сервер WSGI.

С документация (выделение добавлено):

Веб-серверы

За пределамиHeroku, веб-приложения иногда выполняются внутри контейнера веб-сервера.Например, приложения PHP могут работать как модуль внутри Apache HTTPD, или приложения Java могут запускаться внутри Tomcat.

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

Это обычно реализуется с помощью объявления зависимостей для добавления библиотеки веб-сервера вприложение, такое как Tornado для Python , Unicorn для Ruby или Jetty для Java и другие языки на основе JVM.Это происходит полностью в пользовательском пространстве, то есть в коде приложения.Контракт с Heroku предназначен для процесса привязки к порту для обслуживания запросов. Маршрутизаторы Heroku затем отвечают за направление HTTP-запросов процессу на правильный порт.

Один простой способ использовать переменную среды, если она существует, - сделать что-то вроде этого:

import os

# Set up your Flask app here

port = os.getenv('PORT', default='5000')
app.run('0.0.0.0', port=port)

Похоже, вы уже используете gunicorn, и это здорово.Ваш Procfile должен содержать что-то вроде этого:

web: gunicorn my_project.wsgi

, где my_project.wsgi - имя вашего файла WSGI.

...