0% acharam este documento útil (0 voto)
22 visualizações11 páginas

Deploy de API Com FastAPI No Servidor Heroku

Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
22 visualizações11 páginas

Deploy de API Com FastAPI No Servidor Heroku

Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Deploy de API feita com FastAPI

em qualquer servidor de forma tão


fácil quanto um deploy no Heroku.

O poder desconhecido da dupla CapRover e Docker

Conteúdo
Abaixo você verá um textão com um monte de lero lero onde conto a minha
história com clouds. Depois conto como conheci o CapRover e faço uma
pequena introdução da ferramenta. Na última parte é que vem o tutorial de
como fazer deploy de uma API feita com FastAPI. Caso esse monte de
abobrinha não te interesse, pule direto para a última parte. :)

1-Começando do início

O desafio de criar uma startup baseada em uma aplicação digital é muito

maior do que um desenvolvedor sem experiência pode ver. Digo isso não por
que sou um sênior da programação, mas por que sou um humilde júnior que se
expôs a esses desafios para tentar empreender com uns amigos. Por mais que a
gente aprenda muito sobre como treinar modelos de machine learning, criar
páginas webs com frameworks reativos, criar aplicativos mobiles, construir
APIs e micro serviços, ao finalizar o desenvolvimento do seu produto vem o
desafio de por ele no ar. E quem já chegou nessa fase do processo sabe o quão
difícil é.
A princípio você vai precisar de um serviço de cloud, ou seja, uma máquina
rodando um sistema operacional (uma distro linux provavelmente) com espaço
de memória e processamento suficiente para sua aplicação. Ai você pensa: Tá,
vou procurar empresas que me ofereçam esse serviço. E aí você descobre
infinitas empresas como Google Cloud, AWS, Digital Ocean, Heroku, Azure e
etc. Não bastando isso, você se depara com conceitos como VPS, máquinas
dedicadas, serverless, servidor compartilhado, CDN… E pra piorar encontra
valores diferentes para servições que aparentemente são iguais, inúmeros tipos
de serviços, inúmero métodos de deploy, aplicação síncrona ou assíncrona,
distribuição de carga, configuração de servidor, encriptação e protocolo
HTTPS…AHHHHHHHH MEU DEUS! SOCORRO!

Eu realmente me desesperei e por uns dias achei que seria incapaz de por
minha aplicação no ar. Esse mundo de infraestrutura é realmente complexo e
por isso existe o profissional de devops. Porém, nem toda startup tem como
contratar um profissional dessa área. E muitas vezes o custo desse profissional
não compensa quando o objetivo é um MVP. Enfim. Cada empresa sabe onde o
calo aperta. E no meu caso, eu tinha que por minha aplicação no ar.

Pesquisando os servições de cloud disponíveis, me deparei com o Heroku. Um


serviço que facilita muito o deploy de aplicações. Você precisa só de alguns
comandos para subir uma aplicação. O serviço ainda oferece banco de dados
PostgresSQL já configurado pra uso, te dando a URI do banco e assim você só
precisa fazer as migrações. Além disso, uma série de addons está disponível
para incrementar sua aplicação. E pra completar, a empresa ainda oferece um
cloud simples e eternamente grátis para construir seu MVP. Lindo e perfeito!
Resolvido o problema dos desenvolvedores, certo? Errado!

O serviço do Heroku é realmente excelente. O deploy é tão simples que chega a


ser absurdo. Porém, isso tem um custo. E não é barato. No momento que este
artigo foi escrito, o plano mais básico custa $7. Em termos de hardware você
terá uma máquina de um núcleo com 0.5gb de ram e um 1gb de
armazenamento. Subindo um pouco mais nos serviços, o Perfomance M, que é
um plano intermediário avançado e que oferece 2.5gb de ram (não há
informação clara sobre o processamento, mas acredito que seja 4 núcleos de
processamento), está custando $ 250. O que quero ilustrar com isso é que
enquanto o hardware do serviço não aumentou tanto, o valor subiu
desproporcionalmente na minha opinião. Claro que os planos oferecem
features diversas e que aumentam na mesma proporção do valor. Porém,
muitas delas você nem irá usar ou simplesmente não se justificam pelo valor.
Isso faz com que os planos sejam pouco flexíveis e muitas vezes inviáveis em
relação as suas necessidades. Além do mais, no Brasil, com o dólar alto, o custo
pra gente aumenta em 500%.

E se você for, assim como eu, uma pessoa preocupada com as adversidades da
vida, pode ser perguntar o seguinte: “Se o Heroku por acaso fechar, eu tenho
como manter minha aplicação? “. É uma pergunta válida e importante. E ai o
problema se volta aos serviços de cloud tradicionais. Tens que aprender a se
virar com eles ou ficará refém do Heroku. Além do mais, os planos de alguns
clouds tradicionais são muito mais atrativos. O Digital Ocean por exemplo tem
um plano de míseros $5 por uma VM com um núcleo, 1gb de ram e 25gb de
armazenamento.

2-O CapRover
Até alguns dias atrás eu estava decidido (e conformado) que adotaria o Heroku
para o meu projeto. Era caro, mas a facilidade compensaria. Assim sendo, fui
pesquisando tudo que poderia sobre a plataforma pra ficar confiante e ter
controle total da minha aplicação dentro do cloud deles. Foi quando em um
sábado chuvoso e frio de Curitiba achei um artigo aqui mesmo no Medium
onde o autor contava como ele teria supostamente reduzido em 4x o custo de
infraestrutura dele construindo uma aplicação que substituía o Heroku. E
quando li esse artigo fiquei maravilhado com a ferramenta. Na verdade,
segundo o relato do autor, já existia inúmeros scripts avulsos por ai que
automatizavam alguma parte do processo de configuração de servidor e deploy.
Ele então uniu tudo que achou e melhorou algumas coisas. Assim nasceu o
Captain Duck Duck.

Captain Duck Duck é o primeiro nome da ferramenta que lhes apresento hoje: o
CapRover. (Sinceramente eu gostava mais do nome antigo). A descrição oficial
do CapRover que consta no site oficial dele é:

CapRover é um gerenciador de servidor web e implantação de aplicativo


/ banco de dados extremamente fácil de usar.

Quando ele fala fácil de usar, é fácil mesmo. Com alguns comandos você
configura seu servidor e com um único comando você faz deploy da sua
aplicação. A descrição deles ainda complementa:

É incrivelmente rápido e muito robusto, pois usa Docker, nginx,


LetsEncrypt e NetData por trás de sua interface simples de usar.

Sim, você não leu errado. Ele tem uma interface gráfica. E tem um CLI
também. A ferramenta é inspirada no jeito Heroku de criar aplicativos. É como
se agora você tivesse seu próprio Heroku.
Interface gráfica de gerenciamento de aplicações. A interface é gerada automaticamente como parte da sua
aplicação na nuvem e pode ser acessada de qualquer lugar.

O segredo do CapRover está em usar Docker Containers para ter um ambiente


controlado e assim por aplicações no ar. E se usa Docker, você pode imaginar
que com ele é possível por no ar aplicações de qualquer linguagem. E pela
descrição acima e menção das tecnologias usadas você já pode imaginar o que
mais ele faz: já possui balanceamento de carga, encripta sua aplicação e habilita
o protocolo HTTPS e te dá um dashboard para monitoramento do servidor
(Muito útil caso queira fazer a loucura de usar uma máquina na sua casa para
servir). E a cereja do bolo: é open-source.

Para rodar essa ferramenta no seu servidor você precisa ter somente o Docker e
o npm instalado. As instruções de instalação e configuração da ferramenta é
bem clara e fácil de entender. Eles ainda possuem uma parceira com a Digital
Ocean (DO) e te dão $100 de crédito para usar os servições de cloud por dois
meses. No DO você pode escolher no momento da criação da máquina uma
imagem com o Docker instalado e configurado para usar o CapRover. Isso lhe
permite pular parte das instruções de instalação. Meu objetivo aqui não é tratar
dessa parte de instalação no servidor. É realmente simples se você seguir as
instruções. Além disso há um vídeo do canal brasileiro Full Cycle que explica
passo-a-passo como instalar.

Ao abrir a interface do CapRover e clicar em Apps você terá acesso a página de


criação dos seus aplicativos ou banco de dados. Ao clicar você vai se deparar
com duas opções nesta parte: criar um novo aplicativo ou a opção One-click
Apps/Databases. O que difere uma da outra é que na primeira opção você terá
acesso a configurações mais específicas do seu app como porta HTTP de
container, variáveis de ambiente, métodos de deploy e logs da aplicação. Já a
segunda opção criará um app/banco de dados com apenas um clique (Avá!).
Nesta opção há inúmeras opções de tecnologias. Geralmente uso para criar
banco de dados. Vale a pena explorar.

Sessão de criação de apps/dbs.

IMPORTANTE: você precisa possuir um domínio para configurar a


ferramenta e por suas aplicações no ar. Isso por que o CapRover vai por a sua
interface de administração de aplicação oo ar. Sim, a interface de administração
dos app será exposta na web para você configurar de qualquer lugar. Além
disso, para ele encriptar e habilitar o protocolo HTTPS é necessário um
domínio.

3-Deploy
Se você conseguiu acessar essa interface gráfica do CapRover, significa que você
configurou tudo corretamente e está pronto para fazer deploy da sua aplicação.

Vamos começar! Na interface gráfica do CapRover, clique em apps e depois em


Create New App (Não esqueça de nomear seu app):

Criado o seu app, ele irá aparecer abaixo na sessão de lista de aplicativos. No
meu exemplo há três aplicativos, no seu caso aparecerá somente um. Clique
sobre o nome do seu app que está em azul. Neste caso, em my-app.
Como mencionai antes, nesta opção de criar app temos a liberdade de
configurar algumas coisas. Neste momento precisamos fazer duas alterações.
Clicar em Enable HTTPS e em Container HTTP Port colocar o valor 5000, que
é a porta exposta no container da nossa aplicação. Agora pode clicar em Save &
Update.

Terminamos a configuração do nosso servidor e da instância do nosso app.


Vamos agora fazer o deploy de fato. Utilizarei o FastAPI por que é uma
biblioteca que tem chamado muito a atenção dos desenvolvedores por incluir
nativamente funções modernas do Python e ter um padrão de projeto simples
que reduz as chances de erro e o tempo de desenvolvimento. O FastAPI tem
várias vantagens e que não é meu objetivo discutir sobre isso. Mas vale dizer
que a biblioteca permite usar funções assíncronas do Python e isso interessa
muito para os meus projetos. Antes de escrever esse artigo procurei como fazer
deploy de aplicações com FastAPI usando o CapRover e não encontrei.
Descobri como fazer quase que por acaso, usando o método de tentativa e erro,
e vou passar para vocês. Abaixo está o código ilustrado da API. É um código
simples que criará apenas uma rota com uma mensagem legal.

O CapRover possui várias formas de fazer deploy. O método que mostrarei


consiste em criar um Docker container com a nossa aplicação e executar o
comando para fazer o deploy. Crie um repositório com a sua aplicação seguindo
o modelo em meu repositório. No diretório do seu projeto deve conter o
seguinte Dockerfile:

É importante que você siga o padrão de projeto que consta no meu repositório.
Você pode achar que dá pra alterar o Dockerfile para rodar a aplicação com o
uvicorn direto por linha de comando, semelhante ao que é descrito na
documentação do FastAPI. Porém, nos meus testes notei que desta forma o
container até roda, mas gera erros do NGINX no servidor e não expõe sua
aplicação. Então, a forma que funcionou pra mim é rodar o uvicorn no arquivo
[Link].

Assim que criar seu repositório, colocar sua aplicação lá e garantir que o seu
container funciona (Dê um build local no container para testar), você precisará
dar ao menos um commit. Se você construiu o repositório em máquina local,
clone o repositório para o seu servidor e entre no diretório do projeto no
servidor.

Está pronto? Agora vem a mágica. No terminal, execute o comando:


caprover deploy
Lindo né? Mas não acabou. Tem só mais alguns passos bem simples. Ao
executar o comando no terminal irá aparecer para você a seguinte opção:

Aqui você deve escolher o domínio da sua aplicação. No meu caso, só tenho
uma adicionada. Mas você pode por mais. Ao selecionar o domínio, agora você
vai escolher o app. No meu caso, eu tenho três apps criados. Mas para você
aparecerá só um. Escolha-o.

Escolhendo o my-app que acabei de criar.

Após isso ele irá perguntar qual a branch é pra fazer deploy e dará um aviso de
que o gitignore e arquivos não “commitados” não serão considerados no
deploy. É só apertar enter para as duas opções. Você receberá o seguinte
resultado:

Parabéns! Sua aplicação subiu e está na URL que ele exibiu.


Para configurar o domínio que as pessoas irão acessar sua aplicação você
precisa voltar para a sessão Apps do CapRover (Lá onde você habilitou o
HTTPS), colocar seu domínio de acesso e clicar em Connect New Domain.
Claro que você precisa também configurar o domínio no site da empresa que
você o comprou.

Perceba que como o deploy foi realizado direto do repositório, você pode
continuar o desenvolvimento do seu código e sempre que for fazer deploy só
precisará executar os últimos comandos deste tutorial, subindo sempre o
último commit do seu projeto. A chance de você ter um problema nesta fase é
mínima.

Você também pode gostar