DEV Community

Jean Jacques Barros
Jean Jacques Barros

Posted on

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:

  1. Linguagem: Python
  2. Framework: Flask
  3. Plataforma de Hospedagem: Heroku

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>"
Enter fullscreen mode Exit fullscreen mode

Configurando o Projeto

Requirements

Localização do 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
Enter fullscreen mode Exit fullscreen mode

Procfile

Localização do 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
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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.

Conexão GitHub e Heroku

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
Enter fullscreen mode Exit fullscreen mode

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!

Top comments (0)