ASP.NET Core - Deploy no Heroku usando o PostgreSQL com EF Core - II


Hoje vou mostrar como publicar uma aplicação ASP .NET Core no Heroku acessando um banco de dados PostgreSQL e usando o EF Core.

Continuando a primeira parte do artigo vamos agora criar e configurar a aplicação no Heroku.

Criando a aplicação no Heroku

Acesse o ambiente do Heroku em https://signup.heroku.com/ e faça o login.

Clique no botão New e selecione : Create new app

Informe o nome produtoscrud e clique no botão : Create app

A seguir na próxima janela em Deployment method selecione : Container Register

Ainda nesta janela clique em Resources e a seguir clique no botão : Find more add-ons

Aqui vamos incluir um Data Storage para nossa aplicação e será apresentada uma janela com diversas opções. Em Data Stores selecione : Heroku Postgres

A seguir selecione o plano Hobby Dev que é Free e clique no botão Install Heroku Postgress

Selecione o projeto para o qual deseja instalar, no nosso caso produtoscrud e a seguir clique para submeter o pedido:

Com isso teremos o banco de dados PostgreSQL anexado ao nosso projetos produtoscrud.

Para obter as informações das configurações do nosso banco de dados vamos clicar sobre ele e na próxima janela vamos clicar em Settings:

Nesta janela, em Database Credentials vamos clicar em View Credentials para obter as informações sobre o nosso banco de dados:

Essas configurações serão usadas para acessar o PostgreSQL em nosso aplicação após a publicação no Heroku. Agora note que existe uma aviso informando que essas credenciais NÃO SÃO PERMANENTES.

Vamos agora usar essas credenciais para aplicar o Migrations e assim gerar o banco e a tabela no PostgreSQL do Heroku. Para isso vamos alterar no arquivo appsettings.json a string de conexão usando essas credenciais e a seguir vamos apagar a pasta Migrations do projeto e emitir novamente os comandos:

Nota: Você pode fazer isso manualmente usando o PgAdmin.

Após o processamento dos comandos podemos acessar o PgAdmin e ver o banco e a tabela criadas no PosgreSQL remoto:

Usando o GitHub Actions para fazer o deploy

No repositório GitHub vamos incluir 3 Secrets :

- `Heroku_APP_NAME`
  - produtoscrud

- `DATABASE_URL`
  - A url do PostgreSQL remoto

- `Heroku_API_KEY`
  - sua API Key

Com isso estaremos definindo os valores dessas variáveis de ambiente que serão fornecidas para podermos acessar o banco de dados PostgreSQL a partir da nossa aplicação no Heroku.

Para obter a API Key acesse as configurações de sua conta em https://dashboard.heroku.com/account e a seguir localize API key e para visualizar clique em Reveal:

Agora adicione um novo fluxo de trabalho do GitHub na guia Github Actions em seu repositório do GitHub. Isso criará e implantará o aplicativo da Web dockerizado no Heroku sempre que você enviar algo novo para o GitHub.

Neste fluxo inclua o seguinte código:

name: deploy-Heroku

on:
    push:
        branches: [ master ]
    pull_request:
        branches: [ master ]
    workflow_dispatch:

jobs:
    build:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v2
        - name: Build and deploy the Docker image
            env:
            Heroku_API_KEY: $
            APP_NAME: $
            run: |
            docker login --username=_ --password=$Heroku_API_KEY registry.Heroku.com
            Heroku container:push web -a $APP_NAME
            Heroku container:release web -a $APP_NAME

Para concluir dê um commit no repositório e agora vamos fazer o deploy no Heroku.

A seguir nos logar no ambiente do contêiner: heroku container-login

E dar o push na imagem gerada : heroku container: heroku container:push web -a produtosapi-heroku

Este comando compila e, em seguida, envia imagens do Docker para implantar seu aplicativo Heroku.

Para concluir temos que liberar a aplicação:  heroku container:release web -a produtosapi-heroku

Este comando faz a release da imagem Docker enviada anteriormente para seu aplicativo Heroku.

E agora podemos acessar o endereço: https://produtoscrud.herokuapp.com onde vamos obter:

Com isso temos nossa aplicação ASP .NET Core MVC publicada no Heroku e acessando o banco de dados PostgreSQL.

Infelizmente atualmente (12 / 2022) o Heroku não oferece mais o plano gratuito e assim
a opção para fazer o deploy agora somente é possível usando um plano pago.

"Se o SENHOR não edificar a casa, em vão trabalham os que a edificam; se o SENHOR não guardar a cidade, em vão vigia a sentinela."
Salmos 127:1

Referências:


José Carlos Macoratti