Despliegue de aplicación Java en VPS: guía paso a paso de la A a la Z

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

Despliegue de aplicación Java en VPS: guía paso a paso de la A a la Z

\n\n

Desarrollar 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\n

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

\n\n

El primer paso es conectarse a su VPS mediante SSH e instalar Java Runtime Environment (JRE) y Git.

\n\n

Conexión al servidor

\n
ssh root@su-ip-del-servidor
\n\n

Actualización de paquetes e instalación de Java (OpenJDK 17)

\n

Para Spring Boot 3.x se recomienda Java 17. Instalaremos OpenJDK.

\n
apt update && apt upgrade -y\napt install openjdk-17-jdk git -y\njava -version
\n

Debería ver información sobre la versión de Java 17.

\n\n

Instalación de Nginx (para reverse proxy)

\n
apt install nginx -y\nsystemctl start nginx\nsystemctl enable nginx
\n\n

2. Compilación de la aplicación Java (Maven/Gradle)

\n\n

En su máquina local (o directamente en el servidor, si clona el repositorio) debe compilar el archivo JAR. Consideraremos ambas opciones.

\n\n

Opción A: Compilación local y copia al servidor

\n

Supongamos 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
\n

Luego lo copiamos al servidor mediante SCP:

\n
scp target/my-app-0.0.1-SNAPSHOT.jar root@su-ip:/opt/myapp/
\n\n

Opción B: Compilación directamente en el servidor

\n

Clonamos el repositorio y compilamos el proyecto:

\n
cd /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\n

3. Configuración de producción y creación del servicio systemd

\n\n

Para 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\n

Creación del script de inicio

\n

Cree el directorio para la aplicación (si aún no lo ha creado):

\n
mkdir -p /opt/myapp\n# Mueva el archivo JAR a este directorio si aún no está allí
\n\n

Creación del servicio systemd

\n

Cree el archivo /etc/systemd/system/myapp.service:

\n
nano /etc/systemd/system/myapp.service
\n

Inserte 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
\n

Explicació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
\n\n

Inicio y verificación del servicio

\n
systemctl daemon-reload\nsystemctl start myapp\nsystemctl status myapp\nsystemctl enable myapp  # Inicio automático al arrancar
\n

Verifique que la aplicación responda localmente:

\n
curl http://localhost:8080/actuator/health
\n

Debería recibir una respuesta JSON con el estado UP.

\n\n

4. Configuración de Reverse Proxy mediante Nginx

\n\n

El 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

Blogs

Book Recommendations