Despliegue de una aplicación Java en VPS: guía paso a paso

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: por qué VPS es la opción ideal para aplicaciones Java

Desplegar una aplicación Java en un servidor privado virtual (VPS) es el estándar de oro para los desarrolladores que desean tener control total sobre el entorno de ejecución. A diferencia del hosting compartido, VPS proporciona recursos dedicados (CPU, RAM, disco), permite configurar la Java Virtual Machine (JVM), instalar cualquier librería y configurar el servidor según las necesidades específicas del proyecto.

En este artículo analizaremos el ciclo completo de despliegue: desde la preparación del VPS y la instalación del JDK hasta la ejecución de la aplicación en modo producción utilizando systemd. Todos los pasos están acompañados de ejemplos de código y comandos para Linux (Ubuntu 22.04 LTS).

1. Preparación del VPS e instalación del software necesario

1.1. Conexión al servidor

Después de comprar el VPS, recibirás una dirección IP y la contraseña de root. Conéctate mediante SSH:

ssh root@tu_IP_del_servidor

Se recomienda crear inmediatamente un usuario sin privilegios para el trabajo diario:

adduser deployer
usermod -aG sudo deployer

1.2. Instalación de Java (JDK 17 LTS)

Para aplicaciones Java modernas, OpenJDK 17 es la mejor opción. Ejecuta:

sudo apt update
sudo apt install openjdk-17-jdk -y

Verifica la instalación:

java -version
# Salida: openjdk version "17.0.10" 2024-01-16 LTS

1.3. Instalación de Git y Maven/Gradle

Para compilar el proyecto desde el repositorio:

sudo apt install git maven -y
# O para Gradle:
# sudo apt install gradle -y

2. Compilación y preparación de la aplicación

2.1. Clonación del repositorio

Supongamos que tu aplicación Spring Boot está en GitHub:

cd /opt
sudo git clone https://github.com/tu_cuenta/my-java-app.git
cd my-java-app

2.2. Compilación del archivo JAR

Para Maven:

mvn clean package -DskipTests

Como resultado, en target/ aparecerá el archivo my-app-0.0.1-SNAPSHOT.jar. Asegúrate de que se ejecuta:

java -jar target/my-app-0.0.1-SNAPSHOT.jar --server.port=8080

Verifica su funcionamiento: abre en el navegador http://tu_IP:8080.

2.3. Optimización del JAR para producción

Añade en application.properties los parámetros para producción:

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 almacenes contraseñas reales en el código: utiliza variables de entorno o Vault.

3. Configuración de la base de datos y el entorno

3.1. Instalación de PostgreSQL

sudo apt install postgresql postgresql-contrib -y
sudo systemctl start postgresql
sudo systemctl enable postgresql

Crea la base de datos y el usuario:

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. Configuración de variables de entorno

Crea el archivo /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"

Recarga el entorno:

source /etc/environment.d/java-app.conf

4. Ejecución de la aplicación como servicio systemd

4.1. Creación del archivo unit

Crea el archivo /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                

Blogs

Book Recommendations