Introdução: por que VPS é a escolha ideal para aplicações Java
Fazer deploy de uma aplicação Java em um servidor virtual privado (VPS) é o padrão ouro para desenvolvedores que desejam controle total sobre o ambiente de execução. Diferente da hospedagem compartilhada, o VPS fornece recursos dedicados (CPU, RAM, disco), permite configurar a Java Virtual Machine (JVM), instalar quaisquer bibliotecas e configurar o servidor para as necessidades específicas do projeto.
Neste artigo, abordaremos o ciclo completo de deploy: desde a preparação do VPS e instalação do JDK até a execução da aplicação em modo produção usando systemd. Todas as etapas são acompanhadas de exemplos de código e comandos para Linux (Ubuntu 22.04 LTS).
1. Preparação do VPS e instalação do software necessário
1.1. Conexão ao servidor
Após adquirir o VPS, você receberá um endereço IP e a senha root. Conecte-se via SSH:
ssh root@seu_IP_do_servidor
Recomenda-se criar imediatamente um usuário não privilegiado para o trabalho diário:
adduser deployer
usermod -aG sudo deployer
1.2. Instalação do Java (JDK 17 LTS)
Para aplicações Java modernas, o OpenJDK 17 é a melhor escolha. Execute:
sudo apt update
sudo apt install openjdk-17-jdk -y
Verifique a instalação:
java -version
# Saída: openjdk version "17.0.10" 2024-01-16 LTS
1.3. Instalação do Git e Maven/Gradle
Para compilar o projeto a partir do repositório:
sudo apt install git maven -y
# Ou para Gradle:
# sudo apt install gradle -y
2. Compilação e preparação da aplicação
2.1. Clonagem do repositório
Suponha que sua aplicação Spring Boot esteja no GitHub:
cd /opt
sudo git clone https://github.com/sua_conta/my-java-app.git
cd my-java-app
2.2. Compilação do arquivo JAR
Para Maven:
mvn clean package -DskipTests
Como resultado, o arquivo my-app-0.0.1-SNAPSHOT.jar aparecerá em target/. Verifique se ele executa:
java -jar target/my-app-0.0.1-SNAPSHOT.jar --server.port=8080
Teste o funcionamento: abra no navegador http://seu_IP:8080.
2.3. Otimização do JAR para produção
Adicione parâmetros de produção no application.properties:
server.port=8080
spring.datasource.url=jdbc:postgresql://localhost:5432/mydb
spring.datasource.username=app_user
spring.datasource.password=secure_password
spring.jpa.hibernate.ddl-auto=validate
Nunca armazene senhas reais no código — use variáveis de ambiente ou Vault.
3. Configuração do banco de dados e ambiente
3.1. Instalação do PostgreSQL
sudo apt install postgresql postgresql-contrib -y
sudo systemctl start postgresql
sudo systemctl enable postgresql
Crie o banco e o usuário:
sudo -u postgres psql
CREATE DATABASE mydb;
CREATE USER app_user WITH PASSWORD 'secure_password';
GRANT ALL PRIVILEGES ON DATABASE mydb TO app_user;
\q
3.2. Configuração das variáveis de ambiente
Crie o arquivo /etc/environment.d/java-app.conf:
DB_URL=jdbc:postgresql://localhost:5432/mydb
DB_USER=app_user
DB_PASSWORD=secure_password
JAVA_OPTS="-Xms256m -Xmx512m"
Recarregue o ambiente:
source /etc/environment.d/java-app.conf
4. Execução da aplicação como serviço systemd
4.1. Criação do arquivo unit
Crie o arquivo /etc/systemd/system/java-app.service:
[Unit]
Description=Java Spring Boot Application
After=network.target postgresql.service
[Service]
User=deployer
WorkingDirectory=/opt/my-java-app
ExecStart=/usr/bin/java $JAVA_OPTS -jar /opt/my-java-app/target/my-app-0.0.1-SNAPSHOT.jar
SuccessExitStatus=143
Restart=always
Rest