Implantando um aplicativo Flask no Heroku

Eu estava brincando com o Flask e escrevi uma paródia simples: a rede anti-social . A plataforma Heroku é muito flexível e suporta várias linguagens de programação. Para
implantar um aplicativo no Heroku, você usa o Git para enviar o aplicativo ao servidor do Heroku.

Executando em um servidor de produção

O Heroku não fornece um servidor web, mas espera que ele inicie seus próprios servidores e escute o número da porta definido na variável de ambiente PORT . O Flask terá um desempenho muito ruim porque não foi projetado para ser executado em um ambiente de produção. Para melhorar isso, você pode usar um servidor da web pronto para produção, como o Gunicorn .

$ pip install gunicorn

Agora, execute seu aplicativo com:

$ gunicorn manage:app

Gunicorn usa a porta 8000 em vez de 5000.

Heroku Configurando

Crie uma conta em Heroku.com

Se você ainda não fez. Lembre-se: você poderá manter até cinco aplicativos em execução (você sempre pode excluí-los se precisar).

Instale Git e Heroku Toolbelt

Você pode encontrar instruções em Heroku.com .

Por exemplo, se você estiver em uma instância AWS EC2 Ubuntu, poderá usar:

$ sudo apt-get install -y git-core
$ wget
-qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh

Você pode verificar se funcionou com:

$ which git
$ which heroku

Agora, faça login no Heroku:

$ heroku login

Autorize sua máquina no Heroku

Crie e adicione uma chave SSH no Heroku:

$ ssh-keygen -t rsa
$ heroku keys
:add

As chaves pública e privada estarão em ~ / .ssh. Eu recomendo sempre fazer backup de suas chaves. Além disso, nunca compartilhe sua chave privada.

Criando um Repositório Git

Os push / commits do Heroku funcionam da mesma forma que o Git. Mas em vez de usar a “origem”, você usa “heroku” (você pode verificar isso mais tarde em .git / refs / remotes /). Em outras palavras, a versão de controle (desenvolvimento) do seu projeto é feita usando:

$ git push origin master (or any branch you like)

e a implantação no Heroku (produção) é feita usando:

$ git push heroku master (or any branch you like)

Na raiz do seu projeto, vá em frente e crie um repositório Git, confirme, adicione, envie:

$ git init
$ git
add -A
$ git commit
-m "First commit"
$ git push origin master

O Repositório Heroku

Criação de um aplicativo

Agora, vamos criar nosso aplicativo no Heroku:

$ heroku create <app-name>

Você pode verificar todos os seus aplicativos atuais com:

$ heroku apps

Complementos e variáveis ​​de ambiente

Agora é hora de adicionar os addons e as variáveis ​​de ambiente ao seu aplicativo no servidor Heroku. Para o aplicativo que mencionei no início, eu digito:

$ heroku addons:add heroku-postgresql:dev
$ heroku pg
:promote HEROKU_POSTGRESQL_ONYX_URL

$ heroku config
:set MAIL_USERNAME="<login>"
$ heroku config
:set MAIL_PASSWORD="<password>"

Você sempre pode verificar sua configuração com:

$ heroku config

Adicionando Requisitos

O Heroku precisa saber quais bibliotecas e pacotes ele precisa instalar para executar seu aplicativo. Para isso, crie um arquivo requirements.txt na raiz do seu aplicativo, com todas as bibliotecas do seu ambiente. Uma maneira de fazer isso é:

$ cat pip freeze >> requirements.txt

Adicionando Procfile

Em seguida, o Heroku precisa saber o comando a ser usado para iniciar seu aplicativo. Isso é fornecido por um arquivo chamado Procfile . O conteúdo deve ser:

web gunicorn manage:app

(se é assim que você executa seu aplicativo).

No Procfile, cada linha possui um nome de tarefa, dois pontos e o comando que executa a tarefa. Usamos web aqui porque o Heroku a reconhece como a tarefa que inicia o servidor web. O Heroku fornece a essa tarefa uma variável de ambiente PORT e a define como a porta em que o aplicativo precisa escutar as solicitações.

Usando Foreman para emular Heroku

O Heroku Toolbet inclui o Foreman , usado para executar o aplicativo localmente por meio do Procfile para fins de teste. As variáveis ​​de ambiente definidas no Heroku devem ser definidas localmente. Basta criar um arquivo var.env com esta informação:

FLASK_CONFIG=heroku
MAIL_USERNAME
=<your-username>
MAIL_PASSWORD
=<your-password>

A execução do Foreman é usada para executar comandos no ambiente do aplicativo. O Foreman start lê o Procfile e executa as tarefas nele:

$ foreman run python manage.py deploy
$ foreman start

Configurando Logging

No Heroku, os logs são gravados em stdout ou stderr . Em meu aplicativo, adicionei a configuração de registro a uma classe no arquivo config.py do meu aplicativo :

class HerokuConfig(ProductionConfig):
@classmethod
def init_app(cls, app):
ProductionConfig.init_app(app)

import logging
from logging import StreamHandler
file_handler
= StreamHandler()
file_handler
.setLevel(logging.WARNING)
app
.logger.addHandler(file_handler)

Para que o Heroku saiba qual configuração ele deve usar, adiciono esta variável de ambiente:

$ heroku config:set FLASK_CONFIG=heroku

Agora, se algo der errado durante a implantação, você sempre pode verificar o log:

$ heroku logs

Implantando!

Se tudo estiver bem, é hora de implantar seu aplicativo. Como você já comprometeu seu aplicativo antes, só precisa enviá-lo para o Heroku:

$ git push heroku master

No meu aplicativo, tenho um script para a implantação (como cuidar do banco de dados e outras configurações para produção). Então, além disso, eu corro:

$ heroku run python manage.py deploy
$ heroku restart

É isso aí! O aplicativo deve ser executado em <app-name> .hero‐
kuapp.com
.

Respostas relacionadas:

Forçar um “git stash pop”