[{"data":1,"prerenderedAt":134},["ShallowReactive",2],{"seo-verification":3,"blog-desplegar-spring-boot-en-un-vps-es":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-desplegar-spring-boot-en-un-vps-es",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":32,"intro":35,"sections":36,"ctaTitle":79,"ctaBody":80,"ctaButton":81,"ctaUrl":82,"relatedPosts":83},50,"desplegar-spring-boot-en-un-vps",{"fr":12,"en":13,"ar":14,"es":10},"deployer-spring-boot-vps","deploying-a-spring-boot-application-on-a-vps","نشر-تطبيق-spring-boot-على-خادم-vps","Desplegar una aplicación Spring Boot en un VPS","Despliegue una aplicación Spring Boot en un VPS Cloud: fat JAR, servicio systemd, Nginx y SSL, con OpenJDK 21 y PostgreSQL 16. Guía completa para desarrolladores Java.",4,0,false,"2026-05-01T00:00:00+00:00","2026-09-08T02:42:11+00:00",{"id":17,"name":23,"slug":24,"color":25,"icon":26},"Desarrollo","developpement","bg-warning\u002F10 text-warning","dev",[28],{"id":17,"name":23,"slug":24,"color":25,"icon":26},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fdeployer-spring-boot-vps-poster.svg",{"categorySlug":33,"appSlug":34},"desarrollo","spring-boot-stack","Spring Boot sigue siendo el estándar para las API y los microservicios Java en la empresa. En lugar de pagar un PaaS facturado según la memoria de la JVM, un VPS le da el control total sobre el heap, el pool de conexiones y el costo mensual. Veamos cómo desplegar correctamente su artefacto en producción.",[37,41,51,54,73,76],{"type":38,"title":39,"body":40},"h2","¿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.",{"type":42,"title":43,"items":44},"ul","Ventajas concretas de un Spring Boot autoalojado",[45,46,47,48,49,50],"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.",{"type":38,"title":52,"body":53},"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.",{"type":55,"title":56,"steps":57},"steps","Desplegar Spring Boot paso a paso",[58,61,64,67,70],{"title":59,"body":60},"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. ⚠️ Nombre `openjdk-21-jdk` de forma explícita: el paquete `maven` solo depende de `default-jre-headless`, es decir `openjdk-21-jre-headless`, un entorno de ejecución sin `javac`. Por eso `java -version` muestra 21.x y hace creer que todo está listo, mientras que la primera compilación en el servidor falla con `No compiler is provided in this environment`. Compruebe: `javac -version`, `mvn -version` y `psql --version` (16.x).",{"title":62,"body":63},"Crear la base de datos y el usuario de PostgreSQL","Conéctese a PostgreSQL con `sudo -u postgres psql` y ejecute `CREATE USER myapp WITH PASSWORD 'ContraseñaSegura'; CREATE DATABASE myappdb OWNER myapp;`. Indique `spring.datasource.url=jdbc:postgresql:\u002F\u002Flocalhost\u002Fmyappdb` en su `application.properties`.",{"title":65,"body":66},"Compilar y subir el JAR","Ejecute `mvn clean package -DskipTests` en local y transfiera después el fat JAR a `\u002Fvar\u002Fwww\u002Fsu-app\u002Fapp.jar` mediante `scp`. Cree un archivo `application.properties` con sus credenciales de PostgreSQL, `spring.datasource.url` y `server.port=8080`.",{"title":68,"body":69},"Crear un servicio systemd","Cree `\u002Fetc\u002Fsystemd\u002Fsystem\u002Fsu-app.service` con `ExecStart=\u002Fusr\u002Fbin\u002Fjava -jar \u002Fvar\u002Fwww\u002Fsu-app\u002Fapp.jar`, `Restart=always`, `User=www-data`. Ejecute `systemctl daemon-reload && systemctl enable --now su-app`. Compruébelo con `systemctl status su-app` y `journalctl -u su-app -f`.",{"title":71,"body":72},"Configurar Nginx y activar el HTTPS","Cree un bloque de servidor Nginx con `proxy_pass http:\u002F\u002F127.0.0.1:8080;` y las cabeceras `X-Forwarded-Proto`. Ejecute `certbot --nginx -d su-dominio.com` para obtener un certificado gratuito de Let's Encrypt. Spring Boot escucha únicamente en el puerto interno; Nginx se encarga del TLS.",{"type":74,"body":75},"tip","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\u002FS (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.",{"type":38,"title":77,"body":78},"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.","Despliegue su Spring Boot Stack en unos minutos","La plantilla Spring Boot Stack de ServOrbit instala OpenJDK 21 LTS, Maven, Nginx y PostgreSQL 16 en su VPS. Suba su JAR y empiece de inmediato.","Desplegar Spring Boot Stack","\u002Fmarketplace\u002Fdesarrollo\u002Fspring-boot-stack",[84,101,118],{"id":85,"slug":86,"slugs":87,"title":91,"excerpt":92,"readTime":17,"views":18,"isPinned":19,"publishedAt":93,"updatedAt":94,"category":95,"categories":96,"featuredImage":29,"bgImage":30,"posterImage":98,"relatedSolution":99},5,"desplegar-laravel-en-un-vps",{"fr":88,"en":89,"ar":90,"es":86},"deployer-laravel-vps","deploying-laravel-on-a-vps-a-production-guide","نشر-laravel-على-خادم-vps-دليل-الإنتاج","Desplegar Laravel en un VPS: guía de producción","Ponga Laravel en producción en un VPS: PHP, workers, caché, base de datos, reverse proxy y HTTPS bien configurados.","2026-02-09T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":17,"name":23,"slug":24,"color":25,"icon":26},[97],{"id":17,"name":23,"slug":24,"color":25,"icon":26},"\u002Fblog\u002Fcovers\u002Fdeployer-laravel-vps-poster.svg",{"categorySlug":26,"appSlug":100},"laravel-stack",{"id":102,"slug":103,"slugs":104,"title":108,"excerpt":109,"readTime":110,"views":18,"isPinned":19,"publishedAt":111,"updatedAt":94,"category":112,"categories":113,"featuredImage":29,"bgImage":30,"posterImage":115,"relatedSolution":116},43,"desplegar-una-aplicacion-nodejs-en-un-vps",{"fr":105,"en":106,"ar":107,"es":103},"deployer-nodejs-vps","deploy-a-nodejs-application-on-a-vps","نشر-تطبيق-nodejs-على-vps","Desplegar una aplicación Node.js en un VPS","Despliegue una aplicación Node.js en producción en un VPS: PM2, reverse proxy Nginx, SSL Let's Encrypt y arranque automático con el sistema.",3,"2026-05-08T00:00:00+00:00",{"id":17,"name":23,"slug":24,"color":25,"icon":26},[114],{"id":17,"name":23,"slug":24,"color":25,"icon":26},"\u002Fblog\u002Fcovers\u002Fdeployer-nodejs-vps-poster.svg",{"categorySlug":33,"appSlug":117},"nodejs-stack",{"id":119,"slug":120,"slugs":121,"title":125,"excerpt":126,"readTime":110,"views":85,"isPinned":19,"publishedAt":127,"updatedAt":94,"category":128,"categories":129,"featuredImage":29,"bgImage":30,"posterImage":131,"relatedSolution":132},44,"desplegar-una-aplicacion-django-en-un-vps",{"fr":122,"en":123,"ar":124,"es":120},"deployer-django-vps","deploy-a-django-application-on-a-vps","نشر-تطبيق-django-على-vps","Desplegar una aplicación Django en un VPS","Despliegue Django en un VPS: Gunicorn, Nginx, PostgreSQL, Docker y SSL. Guía completa para desarrolladores Python que quieren autoalojar.","2026-05-07T00:00:00+00:00",{"id":17,"name":23,"slug":24,"color":25,"icon":26},[130],{"id":17,"name":23,"slug":24,"color":25,"icon":26},"\u002Fblog\u002Fcovers\u002Fdeployer-django-vps-poster.svg",{"categorySlug":33,"appSlug":133},"django",1789665016668]