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:
- Abra uma conta na plataforma Devprime e adquira uma licença (Developer/Enterprise).
- Instale uma versão atualizada do .NET (Linux, macOS e Windows)
- Instale e/ou atualize o Visual Studio Code e/ou o Visual Studio 2023 Community / Professional / Enterprise.
- Instale e/ou atualize o Docker (Para Windows, utilize o WSL2).
- Inicialize os containers do PostgreSQL e RabbitMQ no Docker e adicione a fila ‘orderevents’ no RabbitMQ.
- Instale e ative a versão mais nova do Devprime CLI.
- Crie uma pasta para os seus projetos e defina as permissões de leitura e gravação.
- Consulte o artigo “Criando o primeiro microsserviço” para explorar os primeiros passos na plataforma Devprime.
- Crie uma conta de Host no Render.com.
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.
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”.
-
Entre na nova posta
ms-order
e abra pelo Visual Studio Code
code src\App\appsettings.json
-
Localize a chave “DevPrime_Stream” e na opção “Enable” coloque “false”.
-
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.
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
|
|
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
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
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”.
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.
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
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.
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)