Render

Aprenda como efetuar a publicação de um microsserviço baseado na plataforma Devprime no host Render.com utilizando o serviço Web Service, um banco de dados PostgreSQL, Docker e Github.

Devprime using Render

Introdução

A plataforma Devprime acelera a produtividade do desenvolvedor de software, oferecendo um projeto completo de arquitetura de software, componentes com comportamentos inteligentes, aceleradores para implementação de código e atualizações com novos recursos.

Neste artigo, abordaremos o uso do serviço de Host Render, uma plataforma de hospedagem de aplicativos que oferece recursos como Web Services, Static Sites, Background Workers, Cron Jobs, Docker, PostgreSQL e Redis.

Durante este artigo, usaremos um microsserviço com uma regra de negócio relacionada a pedidos e o banco de dados PostgreSQL. Demonstraremos os passos para criar o microsserviço, os serviços de hospedagem na Render e, em seguida, as configurações necessárias para disponibilizá-lo usando o plano gratuito.

Cheklist e preperação do ambiente inicial:

Criando um microserviço para utilizar no exemplo

O primeiro passo é criar um novo microsserviço para que possamos utilizar como modelo para publicar no host. O nome deste microsserviço será definido como “ms-render”, conforme demonstrado no comando abaixo.

  • Criando o primeiro microsserviço
    dp new ms-render --stream rabbitmq --state postgresql
  • Adicionando uma regra de negócio de exemplo “Order”
    dp marketplace order
  • Inicializando e acelerando implementações do microsserviço
    dp init

Após a criação do novo microsserviço entre na pasta do projeto “ms-render” você lá pode visualizar todas as implementações pelo Visual Studio Code conforme demonstrado no artigo relacionado a criação do primeiro microsserviço.

Devprime using Render

Nesse momento não utilizaremos o RabbitMQ e vamos desabilitar nas configurações do Adapter de Stream por meio do arquivo de configuração em “src\App\appsettings.json”.

  1. Entre na nova posta ms-order e abra pelo Visual Studio Code
    code src\App\appsettings.json

  2. Localize a chave “DevPrime_Stream” e na opção “Enable” coloque “false”.

  3. Altere o Handler “OrderCreated” comentando a linha “Dp.Stream.Send(destination, eventName, eventData);” para que não acione do envio de evento pelo Stream.

Abra o Handler pelo Visual Studio Code
src\Core\Application\EventHandlers\Order\OrderCreatedEventHandler.cs

IMPORTANTE:
Nesse exemplo estamos utilizando um banco de dados padrão relacional e portanto é necessário após ter o repositório implementado pelo dp init é necessário aplicar a estrutura de tabelas no banco de dados utilizando scripts SQL ou usando o comando dp state apply.

Criando o banco de dados PostgreSQL no Render.com

Neste exemplo, estaremos utilizando um banco de dados PostgreSQL em uma instância gratuita. Comece o processo de criação e configure os seguintes parâmetros: Nome / Banco de Dados / Usuário / Região / Versão do PostgreSQL. Ao final do procedimento, você terá acesso às configurações conforme ilustrado na imagem abaixo, o que é um passo crucial para obter as credenciais necessárias.

Devprime using Render

Os valores abaixo são apenas exemplos para exemplificar como obter as configurações do banco de dados PostgreSQL no Render.com e depois transporta para o microsserviço conforme os padrões de configuração.

Item Descrição Valor
Hostname URL Interna dpg-ckv4bi3amefc73cu3e5g-a
Port Porta TCP 5432
Database Nome do banco de dados msrender
Username Usuário de acesso msrender
Password Senha 0KxiNwzyNyIviwVizfjrROkmMjnd41yp
Internal Database URL String de conexão interna postgres://msrender:0KxiNwzyNyIviwVizfjrROkmMjnd41yp@dpg-ckv4bi3amefc73cu3e5g-a/msrender
External Database URL String de conexão Externa postgres://msrender:0KxiNwzyNyIviwVizfjrROkmMjnd41yp@dpg-ckv4bi3amefc73cu3e5g-a.oregon-postgres.render.com/msrender
Connection Composição da conexão Devprime Host=dpg-ckv4bi3amefc73cu3e5g-a.oregon-postgres.render.com;Username=msrender;Password=0KxiNwzyNyIviwVizfjrROkmMjnd41yp;Database=msrender

No exemplo abaixo nós demonstramos como aplicar a configuração do PostgreSQL no microsserviço por meio do arquivo de configuração “src\App\appsettings.json”. Para acessar no ambiente local é necessário utilizar a url externa do banco de dados.

Abra pelo Visual Studio Code e coloque a sua connection no JSON.
code src\App\appsettings.json

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
    "DevPrime_State": [

    {
      "enable": "true",
      "alias": "State1",
      "dbtype": "postgresql",
      "type" : "db",
      "connection": "Host=dpg-ckv4bi3amefc73cu3e5g-a.oregon-postgres.render.com;
      Username=msrender;
      Password=0KxiNwzyNyIviwVizfjrROkmMjnd41yp;Database=msrender",
      "timeout": "5",
      "retry": "2",
      "durationofbreak": "45"
    }
  ],

Aplicando a estrutura de dados PostgreSQL no Render.com

No passo anterior você obteve as credenciais e configurou no “src\App\appsettings.json” e nesse momento nós vamos apliacar a estrutura de dados para que possamos testar o microsserviço.

Execute o comando abaixo
dp state apply state1

Ao final do processso a estrutura de tabelas será criada no banco de dados PostgreSQL no Render

Devprime using Render

Execute o microsserviço localmente e faça um Post / Get

No passo anterior nós configuramos o banco de dados apontando para o serviço PostgreSQL no Render por isso já podemos realizar um teste gravando e lendo informações.

Inicie o microsserviço executando um dos scripts abaixo:
.\run.ps1 (Windows) ou ./run.sh (Linux, macOS)

Acesse a url local do microsserviço em https://localhost:5001 ou http://localhost:5000

Devprime running  microsservices

Exportando as configurações em arquivo yaml

A configuração da aplicação é transmitida ao Render no formato de chave/valor. Neste momento, utilizaremos o comando “dp export kubernetes” para exportar arquivos YAML modelos para o Kubernetes. Isso nos permitirá copiar os parâmetros a seguir: devprime_app, devprime_observability, devprime_web, devprime_stream1, devprime_state1, devprime_Custom e devPrime_Services.

Execute o comando
dp export kubernetes

O export criará dois arquivos:

  • deployment.yml
  • service.yml

A imagem abaixo demonstra o exemplo do arquivo “deployment.yml”.

Devprime dp export kubernetes

Para visualizar as variáveis, abra o arquivo “Devpoyment” no Visual Studio Code.
code .devprime\kubernetes\deployment.yml

Enviando o código para um repositório privado no Github

Recomendamos a utilização de um repositório Github privado ao vincular o Render durante a criação dos Serviços Web. A Devprime oferece um comando que remove as credenciais do arquivo de configuração local.

Para excluir as credenciais do projeto, execute o seguinte comando:

dp clean

Criando um Web Services no Render

Agora chegou o momento de criar um novo Serviço Web no Render utilizando a opção de vincular o código-fonte disponibilizado por meio de um repositório privado no GitHub. Ao prosseguir, você terá a opção de integrar com sua conta do GitHub e escolher um repositório específico que será usado na publicação no Render. O Render utilizar o Dockerfile presente na pasta raiz do projeto para construir a imagem do nosso microsserviço.

Devprime Create a new Web Service Render.com

Após avançar, o próximo passo é definir alguns parâmetros iniciais para a criação do novo Serviço Web no Render.

Item Valor
Name Nome do microsserviço
Region Oregon
Branch Main
Root Directory em branco
Runtime Docker
Instance Type Free

Ao final do formulário localize a opção “Advanced” e escolha “Add Environment Variable” e adicione as variaveis que tratamos no passo anterior. devprime_app, devprime_observability, devprime_web, devprime_stream1, devprime_state1, devprime_custom e devprime_services.

Para visualizar as variáveis, abra o arquivo “Devpoyment” no Visual Studio Code.
code .devprime\kubernetes\deployment.yml

Devprime Create a new Web Service Render.com

Ao final do processo de compilação da imagem Docker e com as variáveis de ambiente corretas, o serviço estará ativo e já terá uma URL pública disponível para testar o serviço.

Devprime Create a new Web Service Render.com

Considerações finais

Este é um breve exemplo de publicação de um microsserviço na plataforma Devprime hospedado no Render. Use isso como referência para a publicação de outros serviços. Você pode adicionar recursos adicionais, como o RabbitMQ, Redis e, especialmente,ativar a segurança usando um provedor de identidade, como Keycloak, Auth0 e outros, para proteger o acesso às APIs.

Última modificação April 15, 2024 (498acca9)