DEV Community

Lucas de Moraes
Lucas de Moraes

Posted on

[PT-BR] Subindo um Docker na nuvem Render

Repositório que estará sendo utilizado como exemplo

GitHub logo digitalinnovationone / santander-dev-week-2023-api

RESTful API da Santander Dev Week 2023 construída em Java 17 com Spring Boot 3.

Santander Dev Week 2023 Java API

RESTful API da Santander Dev Week 2023 construída em Java 17 com Spring Boot 3.

Principais Tecnologias

  • Java 17: Utilizaremos a versão LTS mais recente do Java para tirar vantagem das últimas inovações que essa linguagem robusta e amplamente utilizada oferece;
  • Spring Boot 3: Trabalharemos com a mais nova versão do Spring Boot, que maximiza a produtividade do desenvolvedor por meio de sua poderosa premissa de autoconfiguração;
  • Spring Data JPA: Exploraremos como essa ferramenta pode simplificar nossa camada de acesso aos dados, facilitando a integração com bancos de dados SQL;
  • OpenAPI (Swagger): Vamos criar uma documentação de API eficaz e fácil de entender usando a OpenAPI (Swagger), perfeitamente alinhada com a alta produtividade que o Spring Boot oferece;
  • Railway: facilita o deploy e monitoramento de nossas soluções na nuvem, além de oferecer diversos bancos de dados como serviço e…

 

Diferença entre nuvens

O Railway tem um interpretador para aplicações Spring Boot, então pelo repositório fornecido ele identifica o arquivo .jar necessário para aplicação.

O Render não, o que ele nos permite é gerar um serviço web, como um API, por exemplo, mas precisamos instruí-lo a montar o ambiente necessário para que a aplicação seja executada, faremos isso através de um Docker, mas não se assuste, é bem simples.

Caso você desconheça esta tecnologia, saiba mais através deste artigo.
 

Passo a passo

 

Se busca por rapidez e eficiência recomendo seguir por este caminho:

 

  • Alterar o ddl-auto no perfil de produção:
📂santander-dev-week-2023-api
 ┣ 📂.gradle
 ┣ 📂.idea
 ┣ 📂gradle
 ┣ 📂src
 ┃ ┗ 📂main
 ┃    ┗ 📂java
 ┃    ┗ 📂resources
 ┃       ┗ 📛application-dev.yml
 ┃       ┗ 📛application-prd.yml ←
 ┣ 🚫.gitignore
 ┣ 🐘build.gradle
 ┣ » gradlew
 ┣ » gradlew.bat
 ┣ 🐘settings.gradle
Enter fullscreen mode Exit fullscreen mode
spring:
  datasource:
    url: jdbc:postgresql://${PGHOST}:${PGPORT}/${PGDATABASE}
    username: ${PGUSER}
    password: ${PGPASSWORD}
  jpa:
    open-in-view: false
    hibernate:
      ddl-auto: update ←
Enter fullscreen mode Exit fullscreen mode

 

  • Descobrindo o nome do arquivo .jar

Execute:

bootJar

ou se preferir também é possível pelo terminal:

.\gradlew bootJar
Enter fullscreen mode Exit fullscreen mode

Guarde o nome do arquivo .jar gerado dentro de build/libs:

📂santander-dev-week-2023-api
 ┣ 📂.gradle
 ┣ 📂.idea
 ┣ 📂build
 ┃ ┗ 📂libs
 ┃    ┗ ⚙santander-dev-week-2023-api-0.0.1-SNAPSHOT.jar ←
 ┣ 📂gradle
 ┣ 📂src
 ┣ 🚫.gitignore
 ┣ 🐘build.gradle
 ┣ » gradlew
 ┣ » gradlew.bat
 ┣ 🐘settings.gradle
Enter fullscreen mode Exit fullscreen mode

Feito isto você pode excluir a pasta build ou executar o comando no terminal .\gradlew clean, pois não terá mais utilidade

 

  • Criando o Dockerfile na raiz do projeto e preenchendo-o:
É um arquivo simples sem extensão.
📂santander-dev-week-2023-api
 ┣ 📂.gradle
 ┣ 📂.idea
 ┣ 📂gradle
 ┣ 📂src
 ┣ 🚫.gitignore
 ┣ 🐘build.gradle
 ┣ 🐋Dockerfile ←
 ┣ » gradlew
 ┣ » gradlew.bat
 ┣ 🐘settings.gradle
Enter fullscreen mode Exit fullscreen mode
# Define a imagem base para a etapa de construção, que será uma versão do Debian
FROM debian:latest AS BUILD

# Atualiza os repositórios de pacotes e instala o JDK 17
RUN apt-get update && apt-get install -y openjdk-17-jdk

# Copia todo o conteúdo do diretório atual para o contexto de construção do Docker
COPY . .

# Concede permissão de execução ao script gradlew e executa os comandos clean e bootJar com ele
RUN chmod +x gradlew && ./gradlew clean bootJar

# Define a imagem base para a execução, que será uma versão mais leve do JDK 17
FROM openjdk:17-jdk-slim

# Copia o arquivo .jar da etapa de construção para o diretório atual do contêiner e o renomeia para app.jar
# Se atente ao nome do arquivo .jar gerado no passo anterior
COPY --from=build ./build/libs/santander-dev-week-2023-api-0.0.1-SNAPSHOT.jar app.jar

# Define o ponto de entrada do contêiner como a execução do arquivo .jar com a ativação do perfil "prd"
ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=prd", "app.jar"]
Enter fullscreen mode Exit fullscreen mode

 

  • Finalizado, faça um push das modificações para seu repositório Github.

Caso esteja seguindo por um clone do repositório de exemplo, execute o seguinte comando e suba para um novo repositório Github:

~/Desktop/santander-dev-week-2023-api
rm -rf .git ←

~/Desktop/santander-dev-week-2023-api
git init ←
Enter fullscreen mode Exit fullscreen mode

 

  • Criar uma conta no Render vinculada ao Github ou Google.

É importante ser vinculada à alguma conta para liberar o plano grátis
 

Preencher o campo name e prosseguir
 

New Web Service
 

  • Passar a URL do repositório Github criado e prosseguir:

Repo URL

Preencher o campo name e as variáveis de ambiente de acordo com o arquivo application-prd.yml e as configurações de Connections do PostgreSQL

PSQL Connection

Env VARS
 

  • Copiar o endereço da documentação do Swagger

url do seu web-service + /swagger-ui.html

No meu caso seria https://renderyaml.onrender.com + /swagger-ui.html como pode-se averiguar:

Successful deploy
 

  • Mantendo o serviço ativo

Como fora abordado, o Render tem uma política de hibernar todo serviço grátis que não interagir dentro de um intervalo de 15 minutos.

Mas podemos utilizar o monitorador de serviços online UptimeRobot para enviar requisições a cada 5 minutos mantendo nosso serviço sempre interagindo.

Basta:

  1. Se registrar no UptimeRobot;
  2. Tornando-se um usuário você pode criar um serviço de monitoramento acessando este link;
  3. O tipo de monitoramento Monitor Type deve ser HTTP;
  4. E em URL to monitor: basta colocar a URL do Swagger: url do seu web-service + /swagger-ui.html;
  5. Caso não queira ser atualizado sobre o status do seu serviço basta desmarcar a caixa Email;
  6. Pronto, basta criar seu monitor através do botão Create Monitor.

 

🎉 Parabéns! Agora você tem uma aplicação Spring Boot documentada pelo Swagger em produção!

Top comments (0)