¿Por qué autoalojar Spring Boot en un VPS?
Las plataformas gestionadas para Java facturan por la RAM reservada e imponen su versión del JDK, lo que complica la optimización de la JVM y la gestión de las conexiones a PostgreSQL. En un VPS, usted controla toda la pila: OpenJDK 21 LTS con sus Virtual Threads, Maven para la compilación, Nginx como frontal y PostgreSQL 16 para los datos. Usted decide los flags de la JVM, el número de hilos, el ajuste del pool de conexiones y la estrategia de despliegue. Para una aplicación Spring Boot en producción, esta transparencia es decisiva: puede perfilar un endpoint lento, ajustar -Xmx por servicio y desplegar una nueva versión sin sobrecostes ocultos.
Ventajas concretas de un Spring Boot autoalojado
- Control total de PostgreSQL: índices, VACUUM, pool de conexiones y copias de seguridad pg_dump programadas.
- Virtual Threads (OpenJDK 21 Loom) para Spring WebMVC: cientos de peticiones concurrentes sin reescritura reactiva.
- Coste fijo y previsible, sea cual sea el tráfico o el volumen de peticiones de API atendidas.
- Datos y registros bajo su jurisdicción, útil para el cumplimiento normativo y la auditoría.
- Libertad de versión del JDK y de dependencias del sistema, sin las restricciones de un buildpack.
- Despliegues reproducibles: un fat JAR, un
java -jar, y la aplicación está en línea.
Requisitos de hardware y de software
Para una aplicación Spring Boot con PostgreSQL, prevea como mínimo 2 vCPU y 2 GB de RAM; apunte a 4 GB si ejecuta varios servicios o un pool de conexiones cargado. El sistema operativo recomendado es Ubuntu 24.04 LTS: OpenJDK 21 está en los repositorios oficiales, sin necesidad de ningún PPA. Un nombre de dominio es opcional: sin dominio, un túnel SSH hacia el puerto 8080 basta para el desarrollo y las pruebas. Calcule 10 GB de disco para la JVM, la aplicación, la base de datos y los registros.
Desplegar Spring Boot paso a paso
Instalar OpenJDK 21 y PostgreSQL
Conéctese por SSH y ejecute
apt-get install -y openjdk-21-jdk maven nginx postgresql postgresql-contrib: en Ubuntu 24.04 no hace falta configurar ningún repositorio adicional. ⚠️ Nombreopenjdk-21-jdkde forma explícita: el paquetemavensolo depende dedefault-jre-headless, es deciropenjdk-21-jre-headless, un entorno de ejecución sinjavac. Por esojava -versionmuestra 21.x y hace creer que todo está listo, mientras que la primera compilación en el servidor falla conNo compiler is provided in this environment. Compruebe:javac -version,mvn -versionypsql --version(16.x).Crear la base de datos y el usuario de PostgreSQL
Conéctese a PostgreSQL con
sudo -u postgres psqly ejecuteCREATE USER myapp WITH PASSWORD 'ContraseñaSegura'; CREATE DATABASE myappdb OWNER myapp;. Indiquespring.datasource.url=jdbc:postgresql://localhost/myappdben suapplication.properties.Compilar y subir el JAR
Ejecute
mvn clean package -DskipTestsen local y transfiera después el fat JAR a/var/www/su-app/app.jarmediantescp. Cree un archivoapplication.propertiescon sus credenciales de PostgreSQL,spring.datasource.urlyserver.port=8080.Crear un servicio systemd
Cree
/etc/systemd/system/su-app.serviceconExecStart=/usr/bin/java -jar /var/www/su-app/app.jar,Restart=always,User=www-data. Ejecutesystemctl daemon-reload && systemctl enable --now su-app. Compruébelo consystemctl status su-appyjournalctl -u su-app -f.Configurar Nginx y activar el HTTPS
Cree un bloque de servidor Nginx con
proxy_pass http://127.0.0.1:8080;y las cabecerasX-Forwarded-Proto. Ejecutecertbot --nginx -d su-dominio.compara obtener un certificado gratuito de Let's Encrypt. Spring Boot escucha únicamente en el puerto interno; Nginx se encarga del TLS.
Utilice los Virtual Threads de Java 21 con Spring MVC para multiplicar el rendimiento sin pasarse a WebFlux: añada spring.threads.virtual.enabled=true en su application.properties. Cada petición HTTP se ejecuta en un hilo virtual ligero, y miles de ellos pueden estar activos a la vez sin saturar el pool de hilos del sistema. ⚠️ La ganancia sigue estando condicionada en OpenJDK 21: un hilo virtual que se bloquea dentro de un bloque synchronized fija su hilo portador en lugar de liberarlo, y esa limitación solo la levanta la JEP 491, en el JDK 24. Así que, antes de esperar una ganancia en cargas limitadas por E/S (llamadas SQL, REST) en un VPS de 2 GB, compruebe que su controlador JDBC haya pasado a ReentrantLock — el de PostgreSQL lo hizo a partir de la 42.6.0 — y mida el pinning con el evento jdk.VirtualThreadPinned mediante JFR en vez de suponerlo.
Desplegar Spring Boot con un clic desde el Marketplace de ServOrbit
El Marketplace de ServOrbit ofrece una plantilla Spring Boot Stack preconfigurada: OpenJDK 21 LTS, Maven, Nginx y PostgreSQL 16 se instalan automáticamente en su VPS desde el momento del pedido. Sin sesión SSH para la instalación básica: llega directamente al paso de subir su JAR. La ficha del marketplace contiene las especificaciones exactas, los casos de uso y una guía de primera configuración.