Spring Boot 3

Java 21 VPS Deploy

Guia completo com Docker Multi-Stage Build, configuração de SSL no Nginx e fluxo de atualização contínua.

1. Preparação (Dockerfile)

Garanta que este arquivo esteja na raiz do projeto antes de dar git push.

FROM maven:3.9-eclipse-temurin-21 AS build
WORKDIR /app
COPY pom.xml .
RUN mvn dependency:go-offline
COPY src ./src
RUN mvn clean package -DskipTests

FROM eclipse-temurin:21-jre-alpine
WORKDIR /app
COPY --from=build /app/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

2. VPS (Clone & Compose)

1. Clonar (Só 1ª vez)

cd /root/infra-proxy
git clone https://github.com/srodrigo28/java-vps.git

2. Docker Compose (Add Serviço)

  app-java:
    build: ./java-vps
    container_name: java-producao
    restart: always
    environment:
      - SPRING_PROFILES_ACTIVE=prod
    networks:
      - rede_interna
docker compose up -d --build

3. Configuração Final Nginx (SSL)

Atenção: O arquivo default.conf guarda TODOS os seus sites. Não apague os outros! Adicione este bloco no final.

Configuração completa para java.99dev.pro com Cadeado:

                  # ==========================================
# SITE 1 (Seu Portal ou Site Principal)
# ==========================================
server {
    listen 80;
    server_name 99dev.pro www.99dev.pro; # <-- Confirme seu domínio aqui

    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

    location / {
        proxy_pass http://site1:80; # Nome do container do site 1
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

# ==========================================
# SITE 2 (Sua API PHP, por exemplo)
# ==========================================
server {
    listen 80;
    server_name api.99dev.pro;

    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

    location / {
        proxy_pass http://site2:80; # Nome do container do site 2
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

# ==========================================
# JAVA APP (NOVO - COM CADEADO/SSL)
# ==========================================
server {
    listen 443 ssl;
    server_name java.99dev.pro;

    # Certificados que geramos
    ssl_certificate /etc/letsencrypt/live/java.99dev.pro/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/java.99dev.pro/privkey.pem;

    location / {
        proxy_pass http://app-java:8080; # Nome do container Java
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

# ==========================================
# REDIRECIONAMENTO JAVA (Forçar HTTPS)
# ==========================================
server {
    listen 80;
    server_name java.99dev.pro;

    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

    location / {
        return 301 https://$host$request_uri;
    }
}
                
docker exec porteiro-nginx nginx -s reload

Ciclo de Atualização

Alterou código no PC e deu Git Push?

Diferente do PHP ou Node, o Java precisa ser recompilado. Se você só reiniciar, o código velho continua lá. Use esta sequência sagrada:

# 1. Entre na pasta do projeto e baixe as novidades
cd /root/infra-proxy/java-vps
git pull

# 2. Volte para a pasta da infra
cd ..

# 3. A MÁGICA: "--build" força a recompilação do Java
docker compose up -d --build app-java
Isso recria o .jar automaticamente e sobe o novo container.
Copiado com sucesso!