Hospedando uma aplicação Flask no Heroku
Sempre que preciso criar um projetinho para realizar algum teste ou uma prova de conceito minha stack costuma ser essa:
Essas três ferramentas facilitam muito o dia a dia e abstraem aquela complexidade de ter que subir uma máquina em provedores como AWS ou Azure, e chega a ser mais simples do que abrir um túnel para acesso externo (outra coisa que já fiz muito e quem sabe um dia mostro como fazer aqui ✌🏼)
Antes de tudo, segue o repositório de exemplo que criei: https://github.com/jjeanjacques10/example_heroku_flask
E agora vamos por a mão na massa!
Criando nosso App
Vamos iniciar criando uma aplicação bem simples para utilizarmos como base:
app = Flask(__name__)
@app.route("/", methods=["GET"])
def index():
return "<h1>Hello World!</h1>"
Configurando o Projeto
Requirements
É preciso especificar quais dependências serão necessárias para executar o projeto, pois serão baixadas dentro da plataforma do Heroku. Para isso adicionamos o arquivo requirements.txt
na raiz do repositório.
Flask
Flask-Cors
requests # Exemplo de lib externa que pode usar
Procfile
Um ponto mega importante é adicionar o arquivo Procfile
o qual é imprescindível para o Heroku saber qual comando executar quando for subir a aplicação. No nosso caso o comando é o seguinte:
web: python app.py
Que basicamente é o mesmo que costumamos rodar local para testar. As vezes pode ser necessário adicionar uma configuração ou outra, mas via de regra apenas chamar o python e o arquivo principal vai funcionar.
Porta
Um detalhe que pode passar despercebido é a necessidade de pegar o valor da porta que o Flask irá utilizar nas variáveis de ambiente. A plataforma irá gerar uma aleatório e mapear para a 80, por isso você consegue acessar o link sem passar o ":5000". Segue exemplo de como fazer isso de forma fácil e ainda sim definir um padrão para rodar local (port 5000):
def main():
port = int(os.environ.get("PORT", 5000))
app.run(host="0.0.0.0", port=port)
Realizando o Deploy
Agora que nossa aplicação está configurada criamos nosso projeto na cloud do Heroku e conectamos com o GitHub, você também pode utilizar a opção CLI, a única diferença é que ao conectar com a plataforma da Microsoft temos a opção de habilitar o deploy automático.
Após fazer a conexão será iniciado o processo da esteira de deploy, baixando as dependências e preparando o ambiente.
-----> 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
Pronto, agora temos uma aplicação, de forma simples, hospedada em uma cloud e de fácil acesso para qualquer pessoa que deseje consumir esse App.
Link para testar: https://example-heroku-flask.herokuapp.com/
Caso tenha alguma crítica, sugestão ou dúvida fique a vontade para me enviar uma mensagem:
Linkedin: https://www.linkedin.com/in/jjean-jacques10/
Até a próxima!
Ótimo post! :D
Porém, importante observar que os planos gratuitos do Heroku infelizmente deixarão de existir a partir de 28 de novembro de 2022.