Размещение приложения Flask на Heroku

Всякий раз, когда мне нужно создать небольшой проект для проведения теста или проверки концепции, мой стек обычно выглядит следующим образом:

  1. Язык: Python
  2. Framework: Flask
  3. Платформа хостинга: Heroku

Эти три инструмента облегчают мою повседневную работу и абстрагируют от сложности загрузки машины к таким провайдерам, как AWS или Azure, и это даже проще, чем открыть туннель для внешнего доступа (еще одна вещь, которую я часто делаю, и кто знает, однажды я покажу вам, как это делается здесь ✌🏼).

Прежде всего, вот пример репозитория, который я создал: https://github.com/jjeanjacques10/example_heroku_flask.

А теперь приступим к работе!

Создание нашего приложения

Давайте начнем с создания очень простого приложения для использования в качестве основы:

app = Flask(__name__)

@app.route("/", methods=["GET"])
def index():
    return "<h1>Hello World!</h1>"
Войдите в полноэкранный режим Выход из полноэкранного режима

Настройка проекта

Требования

Нам нужно указать, какие зависимости потребуются для запуска проекта, поскольку они будут загружены в платформу Heroku. Для этого мы добавляем файл requirements.txt в корень репозитория.

Flask
Flask-Cors
requests # Exemplo de lib externa que pode usar
Войдите в полноэкранный режим Выход из полноэкранного режима

Procfile

Один мега важный момент — добавление файла Procfile, который необходим для того, чтобы Heroku знал, какую команду выполнять при загрузке приложения. В нашем случае команда выглядит следующим образом:

web: python app.py
Войдите в полноэкранный режим Выход из полноэкранного режима

Это практически то же самое, что мы используем для запуска локальных тестов. Иногда вам может понадобиться добавить какую-то конфигурацию или что-то еще, но обычно достаточно вызвать python и основной файл будет работать.

Порт

Деталь, которая может остаться незамеченной, — это необходимость получить значение порта, которое Flask будет использовать в переменных окружения. Платформа сгенерирует случайный и сопоставит его с 80, так что вы сможете получить доступ к ссылке без прохождения «:5000». Вот пример того, как это легко сделать и при этом установить по умолчанию локальный запуск (порт 5000):

def main():
    port = int(os.environ.get("PORT", 5000))
    app.run(host="0.0.0.0", port=port)
Войдите в полноэкранный режим Выход из полноэкранного режима

Развертывание

Теперь, когда наше приложение настроено, мы создаем наш проект в облаке Heroku и подключаемся к GitHub, вы также можете использовать опцию CLI, единственная разница в том, что при подключении к платформе Microsoft у нас есть возможность включить автоматическое развертывание.

После подключения начнется процесс развертывания, загрузки зависимостей и подготовки среды.

-----> Building on the Heroku-20 stack
-----> Determining which buildpack to use for this app
-----> Python app detected
-----> No Python version was specified. Using the buildpack default: python-3.10.5
       To use a different version, see: https://devcenter.heroku.com/articles/python-runtimes
-----> Installing python-3.10.5
-----> Installing pip 22.1.2, setuptools 60.10.0 and wheel 0.37.1
-----> Installing SQLite3
-----> Installing requirements with pip
       Collecting chardet
         Downloading chardet-5.0.0-py3-none-any.whl (193 kB)
       Collecting click
         Downloading click-8.1.3-py3-none-any.whl (96 kB)
       Collecting cryptography
         Downloading cryptography-37.0.4-cp36-abi3-manylinux_2_24_x86_64.whl (4.1 MB)
       Collecting distlib
         Downloading distlib-0.3.5-py2.py3-none-any.whl (466 kB)
       Collecting et-xmlfile
         Downloading et_xmlfile-1.1.0-py3-none-any.whl (4.7 kB)
       Collecting filelock
-----> Discovering process types
       Procfile declares types -> web
-----> Compressing...
       Done: 28.7M
-----> Launching...
       Released v3
       https://example-heroku-flask.herokuapp.com/ deployed to Heroku
Войдите в полноэкранный режим Выход из полноэкранного режима

Готово, теперь у нас есть приложение, простым способом, размещенное в облаке и легко доступное для всех, кто хочет использовать это приложение.

Ссылка на тест: https://example-heroku-flask.herokuapp.com/


Если у вас есть критика, предложения или сомнения, не стесняйтесь отправить мне сообщение:

Linkedin: https://www.linkedin.com/in/jjean-jacques10/

До следующего раза!

Оцените статью
devanswers.ru
Добавить комментарий