Implantação de aplicação Java em VPS: nível avançado com CI/CD

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Implantação de aplicação Java em VPS: nível avançado com CI/CD, Docker e SSL



Neste artigo, abordaremos o processo avançado de implantação de uma aplicação Java em um VPS (Virtual Private Server). Não vamos nos deter em etapas básicas como instalação do JDK ou execução de arquivo JAR. Em vez disso, focaremos na configuração do pipeline CI/CD, conteinerização com Docker, uso de Nginx como proxy reverso, obtenção automática de certificados SSL, além de monitoramento e tolerância a falhas da aplicação.



Pressupõe-se que você já tenha um VPS com Ubuntu 22.04 LTS, um domínio básico e esteja familiarizado com a linha de comando Linux. Todos os exemplos de código são escritos em Java 17+ usando Spring Boot, mas os princípios se aplicam a qualquer framework Java.



1. Conteinerização da aplicação Java com Docker



O primeiro passo para uma implantação avançada é empacotar a aplicação em um contêiner Docker. Isso garante reprodutibilidade do ambiente e simplifica a implantação.



Crie um Dockerfile na raiz do projeto:



# Usamos multi-stage build para reduzir o tamanho da imagem finalFROM maven:3.9.6-eclipse-temurin-17 AS builderWORKDIR /appCOPY pom.xml .RUN mvn dependency:go-offlineCOPY src ./srcRUN mvn clean package -DskipTests

FROM eclipse-temurin:17-jre-alpineWORKDIR /appCOPY --from=builder /app/target/*.jar app.jarEXPOSE 8080ENTRYPOINT ["java", "-jar", "app.jar"]


Arquivo docker-compose.yml para execução com banco de dados:



version: '3.8'services:  app:    build: .    ports:      - "8080:8080"    environment:      - SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/mydb      - SPRING_DATASOURCE_USERNAME=user      - SPRING_DATASOURCE_PASSWORD=pass    depends_on:      - db    restart: unless-stopped

db: image: postgres:15-alpine environment: POSTGRES_DB: mydb POSTGRES_USER: user POSTGRES_PASSWORD: pass volumes: - pgdata:/var/lib/postgresql/data restart: unless-stopped

volumes: pgdata:


Após construir a imagem com o comando docker compose build, você terá um contêiner pronto para implantação.



2. Configuração do pipeline CI/CD (GitHub Actions)



A automação da implantação é um elemento-chave do nível avançado. Usamos GitHub Actions para compilar, testar e enviar a imagem para o servidor.



Crie o arquivo .github/workflows/deploy.yml:



name: Deploy Java App to VPS

on: push: branches: [ main ]

jobs: build-and-deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4

- name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin'

- name: Build with Maven run: mvn clean package

- name: Build Docker image run: docker build -t myapp:latest .

- name: Save Docker image to tar run: docker save myapp:latest | gzip > myapp.tar.gz

- name: Copy image to VPS via SCP uses: appleboy/scp-action@v0.1.7 with: host: ${{ secrets.VPS_HOST }} username: ${{ secrets.VPS_USER }} key: ${{ secrets.VPS_SSH_KEY }} source: "myapp.tar.gz" target: "/opt/app/"

- name: Deploy on VPS uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.VPS_HOST }} username: ${{ secrets.VPS_USER }} key: ${{ secrets.VPS_SSH_KEY }} script: | cd /opt/app docker load < myapp.tar.gz docker compose down docker compose up -d rm myapp.tar.gz


Não se esqueça de adicionar os segredos VPS_HOST, VPS_USER, VPS_SSH_KEY nas configuraç

Blogs

Book Recommendations