segunda-feira, 29 de setembro de 2025

Deploy Gratuito: Spring Boot PetClinic no Render + PostgreSQL no Aiven.io

🐾 Deploy Gratuito: Spring Boot PetClinic no Render + PostgreSQL no Aiven.io

Última atualização: 29 de Setembro de 2025 por Paulo Evaristo Ferreira da Silva

Introdução

Neste tutorial, você vai aprender a implantar gratuitamente a aplicação Spring Boot PetClinic (construída com Maven) usando:

  • Render — para hospedar a aplicação Java (plano gratuito)
  • Aiven.io — para o banco de dados PostgreSQL gratuito
Tudo 100% gratuito, sem cartão de crédito necessário!

Pré-requisitos

  • Conta no GitHub
  • Conta no Render
  • Conta no Aiven.io
  • Git instalado localmente
  • (Opcional) JDK 17 e Maven para testes locais

1️⃣ Passo 1: Crie um banco PostgreSQL gratuito no Aiven.io

  1. Acesse https://aiven.io e crie uma conta
  2. Clique em "Create a project" e dê um nome (ex: petclinic-project)
  3. Clique em "Create service":
    • Cloud provider: Escolha qualquer (ex: AWS Frankfurt)
    • Service type: PostgreSQL
    • Plan: Free Hobbyist
    • Service name: petclinic-db
  4. Clique em "Create service" e aguarde o provisionamento (~5 minutos)
  5. Após pronto, vá em "Overview" e anote:
    • Host (ex: deployfree-pevaristo.j.aivencloud.com)
    • Port (ex: 13854)
    • Database name (defaultdb)
    • Username (avnadmin)
    • Password (clique em "Show")
🔐 Não compartilhe esses dados! Eles serão usados apenas no Render.
Importante: Em "Networking", ative "Allow connections from any IP address" (para testes).
⚠️ Isso expõe seu banco publicamente — só use em projetos pessoais.

2️⃣ Passo 2: Prepare seu repositório no GitHub

Clone o repositório oficial do PetClinic

git clone https://github.com/spring-projects/spring-petclinic.git meu-petclinic-render-aiven
cd meu-petclinic-render-aiven

Crie um novo repositório no GitHub

  1. No GitHub, crie um novo repositório público (ex: petclinic-render-aiven)
  2. Conecte seu diretório local ao novo repositório:
git remote set-url origin https://github.com/seu-usuario/petclinic-render-aiven.git

3️⃣ Passo 3: Modifique os arquivos necessários

📄 Dockerfile

Crie ou substitua o Dockerfile na raiz do projeto com este conteúdo:

# Build stage
FROM maven:3.9.4-eclipse-temurin-17-alpine AS build
WORKDIR /app

# Copia o POM e baixa dependências
COPY pom.xml .
RUN mvn dependency:go-offline -B

# Copia o código-fonte
COPY src ./src

# Compila com o perfil 'postgres'
RUN mvn clean package -DskipTests -Ppostgres

# Runtime stage
FROM eclipse-temurin:17-jre-alpine AS runtime
WORKDIR /app

# Copia o JAR do build stage
COPY --from=build /app/target/*.jar /app/app.jar

# Expõe a porta 8080
EXPOSE 8080

# Executa com perfil 'postgres' e configurações otimizadas
ENTRYPOINT ["java", \
    "-Dspring.profiles.active=postgres", \
    "-Xmx512m", \
    "-Xms256m", \
    "-jar", \
    "/app/app.jar"]
✅ O -Ppostgres ativa o perfil correto durante o build.

📄 src/main/resources/application-postgres.properties

Atualize este arquivo com:

# Database Configuration
spring.datasource.url=${SPRING_DATASOURCE_URL}
spring.datasource.username=${SPRING_DATASOURCE_USERNAME}
spring.datasource.password=${SPRING_DATASOURCE_PASSWORD}
spring.datasource.driver-class-name=org.postgresql.Driver

# JPA Configuration
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto=${SPRING_JPA_HIBERNATE_DDL_AUTO:update}
spring.jpa.show-sql=false
spring.jpa.properties.hibernate.format_sql=false

# Disable schema initialization (Hibernate will handle it)
spring.sql.init.mode=never

# HikariCP Configuration (otimizado para free tier)
spring.datasource.hikari.maximum-pool-size=5
spring.datasource.hikari.minimum-idle=2
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.idle-timeout=600000
spring.datasource.hikari.max-lifetime=1800000
spring.datasource.hikari.connection-test-query=SELECT 1

# SSL Configuration for Aiven
spring.datasource.hikari.data-source-properties.ssl=true
spring.datasource.hikari.data-source-properties.sslmode=require
spring.sql.init.mode=never evita falhas ao tentar rodar scripts no Aiven.

📄 render.yaml (opcional, mas recomendado)

Crie o arquivo render.yaml na raiz do projeto:

services:
  - type: web
    name: petclinic-aiven
    env: docker
    region: frankfurt
    plan: free
    dockerfilePath: ./Dockerfile
    healthCheckPath: /actuator/health
    envVars:
      - key: SPRING_DATASOURCE_URL
        sync: false
      - key: SPRING_DATASOURCE_USERNAME
        sync: false
      - key: SPRING_DATASOURCE_PASSWORD
        sync: false
      - key: SPRING_JPA_HIBERNATE_DDL_AUTO
        value: update
      - key: SPRING_PROFILES_ACTIVE
        value: postgres

📄 .gitignore

Adicione se não existir:

.env
target/
*.jar
.DS_Store

4️⃣ Passo 4: Faça push para o GitHub

git add .
git commit -m "feat: configuração para Render + Aiven"
git push -u origin main
✅ Seu código agora está no GitHub, sem senhas ou dados sensíveis.

5️⃣ Passo 5: Crie o serviço no Render

  1. Acesse https://dashboard.render.com
  2. Clique em "New""Web Service"
  3. Conecte sua conta do GitHub e selecione seu repositório (petclinic-render-aiven)
  4. Preencha:
    • Name: petclinic-aiven
    • Region: escolha uma (ex: Frankfurt)
    • Branch: main
    • Runtime: Docker
    • Build Command: deixe em branco (o Dockerfile cuida disso)
    • Start Command: deixe em branco
  5. Em "Advanced""Environment Variables", adicione como Secrets:
KEY VALUE
SPRING_DATASOURCE_URL jdbc:postgresql://<seu-host-aiven>:<porta>/defaultdb?sslmode=require
SPRING_DATASOURCE_USERNAME avnadmin
SPRING_DATASOURCE_PASSWORD <sua-senha-do-aiven>
SPRING_JPA_HIBERNATE_DDL_AUTO update
🔐 Substitua <seu-host-aiven>, <porta> e <sua-senha-do-aiven> pelos dados do Aiven.
  1. Clique em "Create Web Service"

6️⃣ Passo 6: Aguarde o deploy

  • O Render fará o build da imagem Docker e iniciará a aplicação
  • Em poucos minutos, seu app estará no ar em: https://petclinic-aiven.onrender.com
✅ Você verá no log: Tomcat initialized with port 8080 → deploy bem-sucedido!

🛠️ Troubleshooting

Erro: "Schema-validation: missing table [owners]"

Solução: Certifique-se de que SPRING_JPA_HIBERNATE_DDL_AUTO=update está configurado no Render.

Erro: "Connection refused"

Solução: Verifique se as credenciais do Aiven estão corretas e se o sslmode=require está na URL.

Aplicação muito lenta

Causa: O plano gratuito do Render hiberna após 15 minutos de inatividade. A primeira requisição após hibernação pode levar 30-60 segundos.

🎯 Entendendo os Modos do DDL-AUTO

Modo O que faz Quando usar
validate Apenas valida se tabelas existem Produção com banco já populado
update Cria/atualiza tabelas automaticamente Desenvolvimento e primeira vez
create Apaga e recria tudo sempre Nunca em produção!
create-drop Cria ao iniciar, apaga ao fechar Apenas testes
none Não faz nada Quando você gerencia schema manualmente

💰 Custos e Limitações

Render (Plano Free)

  • ✅ 750 horas de execução por mês
  • ✅ 512 MB RAM
  • ⚠️ Hiberna após 15 minutos de inatividade
  • ⚠️ Build de 90 minutos por deploy

Aiven.io (Plano Hobbyist)

  • ✅ 1 CPU / 1 GB RAM / 1 GB Storage
  • ✅ 20 conexões simultâneas
  • ✅ Válido por 30 dias (renovável)
  • ⚠️ Sem backup automático

🛡️ Dicas de Segurança

  • ❌ Não use ddl-auto=create no Aiven — prefira validate ou update
  • ❌ Nunca comite senhas no GitHub — use sempre Secrets no Render
  • ✅ Para produção, desative "Allow all IPs" no Aiven e use whitelist de IPs
  • ✅ Configure maximum-pool-size=5 para evitar esgotamento de conexões

🎉 Conclusão

Você agora tem uma aplicação Spring Boot rodando gratuitamente na nuvem, com banco de dados PostgreSQL gerenciado, tudo sem pagar um centavo.

🌟 Ideal para portfólio, estudos ou protótipos!

🔗 Links úteis

Se este tutorial te ajudou, compartilhe com seus colegas! 🐶🐱


✍️ Autor: Paulo Evaristo Ferreira da Silva
📧 Contato: filisteus@gmail.com
💻 GitHub: @filisteus

terça-feira, 19 de novembro de 2024

Criando um Cluster Kubernetes com AWS-EKS usando eksctl

Criando um Cluster Kubernetes com AWS-EKS usando eksctl

Criando um Cluster Kubernetes com AWS-EKS usando eksctl

Última atualização: 19 de Novembro de 2024 por Paulo Evaristo Ferreira da Silva

Introdução

Neste guia, vamos configurar um cluster Kubernetes no Amazon Elastic Kubernetes Service (AWS-EKS) utilizando a ferramenta eksctl. Essa abordagem simplifica o processo de criação e gerenciamento de clusters Kubernetes na AWS.

Pré-requisitos

  • Instalar AWS CLI
  • Instalar kubectl
  • Instalar eksctl
  • Credenciais de um usuário IAM configuradas no AWS CLI

Passo 1: Instalar AWS CLI

# Baixar e instalar a AWS CLI
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

# Verificar a versão instalada
aws --version

Passo 2: Configurar AWS CLI

# Configurar o AWS CLI
aws configure

# Forneça as seguintes informações:
# AWS Access Key ID [None]: SUA_CHAVE
# AWS Secret Access Key [None]: SUA_SENHA
# Default region name [None]: us-east-1
# Default output format [None]: json

Passo 3: Instalar kubectl

Baixe a versão recomendada para o Amazon EKS:

curl -LO https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

# Verificar a versão instalada
kubectl version --client

Passo 4: Instalar eksctl

# Instalar eksctl
ARCH=amd64
PLATFORM=$(uname -s)_$ARCH
curl -sLO "https://github.com/eksctl-io/eksctl/releases/latest/download/eksctl_$PLATFORM.tar.gz"
tar -xzf eksctl_$PLATFORM.tar.gz -C /tmp && rm eksctl_$PLATFORM.tar.gz
sudo mv /tmp/eksctl /usr/local/bin
eksctl version

Passo 5: Criar o Cluster AWS EKS

Agora podemos criar um cluster usando o comando eksctl:

eksctl create cluster --name=eksdemo1 \
                      --region=us-east-1 \
                      --zones=us-east-1a,us-east-1b \
                      --without-nodegroup

Passo 6: Criar Node Groups

Adicione grupos de nós (nodes) ao cluster:

eksctl create nodegroup --cluster=eksdemo1 \
                        --region=us-east-1 \
                        --name=eksdemo1-ng-public1 \
                        --node-type=t3.medium \
                        --nodes=2 \
                        --nodes-min=2 \
                        --nodes-max=4 \
                        --node-volume-size=20 \
                        --ssh-access \
                        --ssh-public-key=kube-demo \
                        --managed

Passo 7: Verificar o Cluster e os Nós

# Listar clusters
eksctl get cluster

# Listar grupos de nós
eksctl get nodegroup --cluster=eksdemo1

# Verificar os nós do cluster Kubernetes
kubectl get nodes -o wide

Preço do EKS Cluster

O custo do EKS depende de diversos fatores:

  • Custo do Cluster: $0.10 por hora, ou aproximadamente $72 por 30 dias.
  • Nós EC2: Por exemplo, um t3.medium custa cerca de $0.0416 por hora, resultando em $30 por mês por nó.
  • Perfis Fargate: Cobrança baseada no uso de vCPU e memória.

Se você rodar 1 cluster com 2 nós t3.medium continuamente por 5 dias, o custo será em torno de $25.

Apagando o Cluster

Para evitar custos desnecessários, apague os recursos quando não estiverem mais em uso:

Passo 1: Apagar Node Groups

eksctl delete nodegroup --cluster=eksdemo1 --name=eksdemo1-ng-public1

Passo 2: Apagar o Cluster

eksctl delete cluster eksdemo1

Notas Importantes:

  • Certifique-se de reverter quaisquer alterações de segurança feitas em grupos de segurança antes de apagar o cluster.
  • Revise e remova alterações em políticas IAM associadas aos nós EC2.

Conclusão

Com este guia, você pode criar, gerenciar e apagar clusters Kubernetes no Amazon EKS de forma eficiente. Certifique-se de monitorar os custos para evitar surpresas no faturamento.

domingo, 3 de setembro de 2023

Criação de um Cluster Kubernet com vagrant , virtualbox e kubeadm no Ubuntu 22.04

Criação de um cluster Kubernetes no Ubuntu 22.04

CRIAÇÃO DE UM CLUSTER KUBERNET NO UBUNTU 22.04 USANDO KUBEADM, VAGRANT E VIRTUALBOX

Última atualização: 03 de Setembro de 2023 por Paulo Evaristo F. Da Silva

Você está procurando um guia fácil sobre como instalar um cluster Kubernetes no Ubuntu 22.04 (Jammy Jellyfish)?

O guia passo a passo nesta página mostrará como instalar um cluster Kubernetes no Ubuntu 22.04 usando o comando Kubeadm, Vagrant e VirtualBox, passo a passo.

O Kubernetes tornou-se a plataforma de orquestração de contêiner de facto, capacitando desenvolvedores e administradores de sistemas a gerenciar e dimensionar aplicativos em contêiner sem esforço. Se você é um usuário do Ubuntu 22.04 ansioso para aproveitar o poder do Kubernetes, você veio ao lugar certo.

Um cluster Kubernetes consiste em nós de trabalho nos quais a carga de trabalho do aplicativo é implantada e um conjunto de nós mestres que são usados para gerenciar os nós de trabalho e os pods no cluster.

Pré-requisitos

  • Instalação mínima do Ubuntu 22.04
  • Mínimo de 2GB de RAM ou mais
  • Mínimo de 2 núcleos de CPU / ou 2 vCPU
  • Espaço em disco livre de 20 GB em /var ou mais
  • Usuário Sudo com direitos de administrador
  • Conectividade com a Internet em cada nó

Configuração do Laboratório

Endereço IP Nome do host
Mestre 192.168.56.110 master.marmotanet.local
Node1 192.168.56.115 node1.marmotanet.local
Node2 192.168.56.120 node2.marmotanet.local

Instalação do Vagrant, plugins e o VirtualBox

Acesse o link: https://developer.hashicorp.com/vagrant/downloads?product_intent=vagrant

Baixe o executável de acordo com o seu Windows, siga as instruções de instalação.

Abra cmd (Prompt de Comando) e digite:

vagrant --version
vagrant plugin install vagrant-vbguest

Acesse o link: https://www.virtualbox.org/wiki/Downloads

Clique em "Windows hosts" e baixe o VirtualBox de acordo com a versão do seu Windows.

Mais abaixo, clique em "All supported platforms" no item: "VirtualBox 7.0.10 Oracle VM VirtualBox Extension Pack", e baixe a extensão pack, depois, dê dois cliques e instale-o no VirtualBox.

Criando o arquivo Vagrantfile

Crie uma pasta para os arquivos, por exemplo, "cluster".

Crie um arquivo com o nome Vagrantfile (sem extensão).


# Criando a VM master
Vagrant.configure("2") do |config|
  config.vm.define "master" do |master|
    master.vm.box = "ubuntu/jammy64"
    master.vm.network "private_network", type: "static", ip: "192.168.56.110"
    master.vm.network "forwarded_port", guest: 6443, host: 6443
    master.vm.synced_folder ".", "/vagrant", type: "rsync"
    master.vm.hostname = "master"
    master.vm.provider "virtualbox" do |vb|
      vb.memory = 2048
      vb.cpus = 2
    end
    master.vm.provision "shell", path: "master-provision.sh"
  end
  config.vm.define "node1" do |node1|
    node1.vm.box = "ubuntu/jammy64"
    node1.vm.network "private_network", type: "static", ip: "192.168.56.115"
    node1.vm.synced_folder ".", "/vagrant", type: "rsync"
    node1.vm.hostname = "node1"
    node1.vm.provider "virtualbox" do |vb|
      vb.memory = 2048
      vb.cpus = 2
    end
    node1.vm.provision "shell", path: "node1-provision.sh"
  end

  config.vm.define "node2" do |node2|
    node2.vm.box = "ubuntu/jammy64"
    node2.vm.network "private_network", type: "static", ip: "192.168.56.120"
    node2.vm.synced_folder ".", "/vagrant", type: "rsync"
    node2.vm.hostname = "node2"
    node2.vm.provider "virtualbox" do |vb|
      vb.memory = 2048
      vb.cpus = 2
    end
    node2.vm.provision "shell", path: "node2-provision.sh"
  end
end
# ...

segunda-feira, 18 de maio de 2020

Instalação E Uso Com Módulos Ansible e vms ec2 da amazon

Tutorial prático do Ansible com instalação, uso e configuração do Ansible com módulos Ansible:

O Ansible é uma ferramenta de código aberto que ajuda na automação de tarefas, implantação de aplicativos, provisionamento em nuvem e gerenciamento de configurações.

                    

Portanto, estamos falando sobre a orquestração de TI, na qual as tarefas são executadas em sequência em várias máquinas ou servidores diferentes.

O Ansible faz isso conectando-se a várias máquinas por meio do SSH e executa as tarefas que foram configuradas em playbooks e usa uma linguagem simples chamada YAML (Yet Another Markup Language).

Adicionar legenda

terça-feira, 24 de março de 2020

Entendendo EC2

EC2 significa Elastic Compute Cloud. O EC2 é uma máquina virtual na AWS.
De acordo com a definição da Amazon, “Amazon Elastic Compute Cloud (Amazon EC2) é um serviço da web que fornece capacidade de computação redimensionável e segura na nuvem. Ele foi projetado para facilitar a computação em nuvem em escala da Web para os desenvolvedores. ”
Como já discutimos, o EC2 é uma máquina virtual na AWS e agora vamos compará-la com um computador. Isso é apenas para fornecer uma visão geral do EC2.
Quais são os principais componentes necessários para executar um computador
Sistema operacional : Aqui na AWS, temos o Amazon Machine Images e diferentes AMIs, como Ubuntu, Redhat, Windows, Etc, que podemos usar para executar nossas máquinas virtuais.
CPU : como temos CPUs em computadores normais, temos tipos de instância . Podemos escolher tipos de instância com base em nossos requisitos.
Disco rígido: aqui usamos o EBS para armazenar dados relacionados à nossa instância do EC2. EBS significa Elastic Block Storage.
RAM: Temos RAM aqui no EC2 e podemos escolhê-lo com base em nosso tipo de trabalho ou exigência.
Firewall: como temos firewalls em computadores para proteger contra vírus diferentes ou qualquer ameaça à segurança, aqui na AWS, temos grupos de segurança.
Adaptadores de rede: como os adaptadores de rede em nossos computadores, que nos ajudam a conectar-se à Internet, aqui temos um endereço IP que usa adaptadores de rede virtual.
Entendendo o modelo de preço EC2:
Existem 3 tipos comuns de cobrança para o EC2
  • On-Demand
  • Reserved
  • Local
On-Demand :
  • O tipo de instância sob demanda é como pagamento conforme você usa os tipos.
  • O faturamento é apenas para o tempo de funcionamento da máquina.
  • É o mais caro.
  • Podemos iniciar ou encerrar a máquina sempre que necessário.
Reserved :
  • O EC2 reservado é usado para reservar as máquinas a longo prazo, como 1 ano ou 3 anos.
  • Possui descontos especiais se escolhermos uma opção reservada
  • Independentemente de você usar a máquina, você será cobrado por todo o período, independentemente de usá-la ou não
Local :
  • Usando spot, podemos fazer lances no preço do EC2. Pagaremos apenas se o valor for igual ou inferior ao valor do lance
  • Se o preço à vista for superior ao preço da oferta, a instância do EC2 será encerrada.
Vamos discutir em detalhes sobre os componentes do EC2 no próximo artigo.

segunda-feira, 23 de março de 2020

Gerenciamento de identidade e acesso (IAM) (parte 2) da Amazon AWS

Este artigo é uma continuação do artigo anterior Gerenciamento de Identidade e Acesso (IAM) (Parte 1) da Amazon AWS , onde discutimos
  • O que é o IAM
  • Melhores práticas de segurança
  • Criando usuários do IAM
A próxima etapa da lista de verificação de status de segurança é criar um grupo








Gerenciamento de Identidade e Acesso (IAM) (Parte 1) da Amazon AWS

O IAM é um dos principais serviços da AWS. O IAM é usado para gerenciar usuários da AWS e seu acesso aos recursos da AWS. Quando criamos uma conta da AWS, teremos acesso root. Não é uma boa ideia usar a conta raiz porque ela tem acesso completo a todos os recursos da AWS. Então, vamos aprender como criar usuários diferentes e atribuir permissões a eles usando o IAM.


AWS IAM ICON

 

bobox

Blogger news