Despliegue de aplicación Java en VPS: guía paso a paso de la A a la Z
\n\nDesarrollar una aplicación Java es solo la mitad del trabajo. La segunda parte, igualmente importante, es su despliegue en un servidor de producción. En esta guía, recorreremos el ciclo completo de despliegue de una aplicación Java (Spring Boot) en un servidor virtual privado (VPS) con sistema operativo Ubuntu 22.04. Aprenderá a configurar el servidor, compilar el proyecto, ejecutarlo como un servicio del sistema y garantizar el acceso seguro a través de un servidor web.
\n\n1. Preparación del VPS e instalación del software necesario
\n\nEl primer paso es conectarse a su VPS mediante SSH e instalar Java Runtime Environment (JRE) y Git.
\n\nConexión al servidor
\nssh root@su-ip-del-servidor\n\nActualización de paquetes e instalación de Java (OpenJDK 17)
\nPara Spring Boot 3.x se recomienda Java 17. Instalaremos OpenJDK.
\napt update && apt upgrade -y\napt install openjdk-17-jdk git -y\njava -version\nDebería ver información sobre la versión de Java 17.
\n\nInstalación de Nginx (para reverse proxy)
\napt install nginx -y\nsystemctl start nginx\nsystemctl enable nginx\n\n2. Compilación de la aplicación Java (Maven/Gradle)
\n\nEn su máquina local (o directamente en el servidor, si clona el repositorio) debe compilar el archivo JAR. Consideraremos ambas opciones.
\n\nOpción A: Compilación local y copia al servidor
\nSupongamos que tiene un proyecto Spring Boot con Maven.
\n# En la máquina local\nmvn clean package -DskipTests\n# El archivo aparecerá en target/my-app-0.0.1-SNAPSHOT.jar\nLuego lo copiamos al servidor mediante SCP:
\nscp target/my-app-0.0.1-SNAPSHOT.jar root@su-ip:/opt/myapp/\n\nOpción B: Compilación directamente en el servidor
\nClonamos el repositorio y compilamos el proyecto:
\ncd /opt\ngit clone https://github.com/su-usuario/su-repositorio.git myapp\ncd myapp\n./mvnw clean package -DskipTests\n# O, si Maven está instalado globalmente:\nmvn clean package -DskipTests\n\n3. Configuración de producción y creación del servicio systemd
\n\nPara que la aplicación se inicie automáticamente al arrancar el sistema y se reinicie en caso de fallo, crearemos un archivo unit de systemd.
\n\nCreación del script de inicio
\nCree el directorio para la aplicación (si aún no lo ha creado):
\nmkdir -p /opt/myapp\n# Mueva el archivo JAR a este directorio si aún no está allí\n\nCreación del servicio systemd
\nCree el archivo /etc/systemd/system/myapp.service:
nano /etc/systemd/system/myapp.service\nInserte el siguiente contenido (reemplace las rutas y parámetros según su proyecto):
\n[Unit]\nDescription=My Java Spring Boot Application\nAfter=syslog.target network.target\n\n[Service]\nUser=root\nWorkingDirectory=/opt/myapp\nExecStart=/usr/bin/java -Xms256m -Xmx512m -jar /opt/myapp/my-app-0.0.1-SNAPSHOT.jar --server.port=8080\nSuccessExitStatus=143\nRestart=always\nRestartSec=10\n\n[Install]\nWantedBy=multi-user.target\nExplicación de los parámetros:
\n- \n
-Xms256m -Xmx512m— tamaño inicial y máximo del heap de Java. \n --server.port=8080— puerto en el que funcionará la aplicación. \n Restart=always— reinicio automático en caso de caída. \n
Inicio y verificación del servicio
\nsystemctl daemon-reload\nsystemctl start myapp\nsystemctl status myapp\nsystemctl enable myapp # Inicio automático al arrancar\nVerifique que la aplicación responda localmente:
\ncurl http://localhost:8080/actuator/health\nDebería recibir una respuesta JSON con el estado UP.
4. Configuración de Reverse Proxy mediante Nginx
\n\nEl acceso directo a la aplicación a través del puerto 8080 no es seguro. Configuraremos Nginx como servidor proxy, que recibirá las solicitudes en