Skip to content

Estudo de uma API simulando uma loja usando ASPnet core 🤖, Containerizado 🐳 e subindo aplicação no Heroku 👾

Notifications You must be signed in to change notification settings

RosembergAraujo/VStoreApi

Repository files navigation

VStore_API

Resumo

  • Comecei porque queria estudar ASP.NET, principalmente APIs e convergiu que um amigo que estava estudando front-end queria uma API pra consumir, unindo ambos os projetos, iniciei uma API para uma loja virtual genérica e a coisa foi escalando demais para um quem estava iniciando na tecnologia, sistema de autenticação, encriptação de senha, banco em cloud, containerização, orquestragem com compose e chegando a finalmente hospedagem da API, foi mais difícil do que eu achei que seria, mas me sinto orgulhoso de ter conseguido sozinho sem seguir tutorial, quebrando muito a cara, vendo muita coisa dando errado mas aprendendo bastante no caminho.

Funcionalidades e desafios

  • CRUD de usuário, produtos e pedidos.
  • Todas as 3 tabelas com suas relações, tanto para consultas quanto para alterações.
  • Autenticação e autorização utilizando JWT bearer e sistemas de “roles” com camadas de autorização.
  • Ferramenta de encriptação AES com chave gerada com SHA256 para senhas e informações sensíveis.
  • Banco PostgreSQL já hospedado em cloud (Heroku).
  • Gerenciamento de versões de development e em produção.
  • Informações sensíveis configuradas a partir da VPS, como connection strings e chaves de hash.
  • Conteinerização com docker pois queria usar o heroku como hospedagem para API tambem porém ele não aceita C# nativamente.
  • Docker composer para gerenciar o conteiner e algumas variáveis de ambiente como as portas que os heroku exporta dinamicamente via load balancer, acredito ser NGINX.

Dependências

  • Execução local

    • ASP.NET-Core 5
    • PostgreSQL
    • Todas as libs já estão inclusas no projeto.
  • Publicação

    • Heroku CLI.
    • Docker e Docker Compose.
    • Uma distro linux é recomendada, pode ser WSL2.

Instruções de execução

  • Após o clone do projeto você precisa criar um arquivo chamado .env na raiz com as seguintes variáveis:
ENV=DEV
DATABASE_URL_DEV=
DATABASE_URL=
JWT_HASH=
AES_KEY=
AES_IV=

Poderá seguir o exemplo do arquivo .env-example

  • DATABASE_URL Sendo sua connection string com o banco.
  • JWT_HASH Sua chave privada para gerar os JWTs, recomendo utilizar SHA256 para gerar sua chave.
  • AES_KEY Sua chave privada para geração e recuperação de informações usadas com algoritmo AES, recomendo utilizar SHA256 novamente.
  • AES_IV Algoritmos utilizando AES precisando de um vetor de bytes iniciais, você o coloca aqui.

Após as variáveis configuradas, navegue até a raiz do projeto e atualize as tabelas do seu banco.

dotnet ef database update

Agora podemos executar o projeto localmente

dotnet run

Publicando

IMPORTANTE. Para utilizar PostgreeSQL com a aplicação publicada, você irá precisar um banco hospedado, o heroku tem uma ferramenta muito fácil para isso, é um addon, procure sobre. Em seguida configure as variáveis de ambiente no seu .env com a connection string do seu banco hospedado antes de criar sua imagem docker

ASP.NET core 🚀

Vamos compilar o projeto com o comando.

dotnet publish -o ./dist

IMPORTANTE. Mova o .env da pasta raiz para a past /dist, agora pode gerar sua imagem docker.

Docker 🐳

Opcionalmente baixe a imagem base na versão correta com o comando:

O heroku por padrão não aceita projetos C#, porém ele aceita containers

docker pull bitnami/aspnet-core:5

IMPORTANTE antes de criar sua imagem você deve mover o arquivo .env preenchido com suas variáveis dentro da pasta /dist ou você deve configura-las dentro do heroku posteriormente, as variáveis configuradas no heroku tem prioridade sobre as do .env

  • Exemplo:

 Heroku env variables

Em seguida gere um build da sua imagem

docker-compose build

Heroku

Faça login no heroku

heroku login && heroku container:login

Caso não tenha criado sua aplicação no heroku ainda

heroku apps:create [app]

Finalmente, faça o deploy

heroku container:push web -a [your app name]

E então o release

heroku container:release web -a [your app name]

Agora se tudo correu bem, você pode utilizar o comando

heroku open

Se aparecer uma tela como essa, parabéns, sua API está publicada 😎😁

 HelloWorldPage

About

Estudo de uma API simulando uma loja usando ASPnet core 🤖, Containerizado 🐳 e subindo aplicação no Heroku 👾

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published