Всякий раз, когда мне нужно создать небольшой проект для проведения теста или проверки концепции, мой стек обычно выглядит следующим образом:
- Язык: Python
- Framework: Flask
- Платформа хостинга: 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/
До следующего раза!