En esta guía, documentaré el proceso completo para configurar un servicio en Ubuntu Server que permita ejecutar una webapp de Spring Boot como un proceso en segundo plano, iniciándose automáticamente al encender el servidor.
Configuración del archivo pom.xml
Antes de poder empaquetar tu aplicación Spring Boot como un archivo .jar ejecutable, es necesario ajustar la configuración de tu archivo pom.xml
. Esto asegurará que el archivo .jar
generado sea ejecutable por Java directamente.
En tu archivo pom.xml
, agrega la siguiente configuración dentro de la sección <build>
:
<build>
<finalName>pendientes-webapp</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
</plugins>
</build>
- finalName: Define el nombre del archivo
.jar
que se generará. En este caso, se llamarápendientes-webapp.jar
. - spring-boot-maven-plugin: Este plugin se utiliza para empaquetar la aplicación Spring Boot como un archivo
.jar
ejecutable. - executable: La opción
true
asegura que el.jar
generado sea ejecutable, lo que permitirá correrlo directamente en el servidor conjava -jar
.
Generar el archivo .jar ejecutable
Después de configurar el pom.xml
, debes generar el archivo .jar
ejecutable. Para hacerlo, ejecuta el siguiente comando en el directorio raíz de tu proyecto:
mvn clean package
Este comando empaquetará tu aplicación y creará el archivo pendientes-webapp.jar
en el directorio target/
de tu proyecto. Ahora que tienes el .jar
ejecutable, puedes proceder a configurar el servicio en Ubuntu Server.
Requisitos previos
Antes de comenzar, asegúrate de tener lo siguiente:
- Ubuntu Server instalado y configurado.
- Java JDK (en este caso, JDK 21) instalado en el servidor.
- Tu archivo
.jar
de Spring Boot listo para ejecutarse. - Permisos de administrador o
root
en el servidor.
Paso 1: Verificar la instalación de Java
Primero, es importante verificar que Java está correctamente instalado. Puedes hacer esto con el siguiente comando:
java -version
Esto debería mostrar la versión de Java instalada.
Paso 2: Crear el archivo de servicio para systemd
El siguiente paso es crear un archivo de servicio en systemd que permita administrar la ejecución de la webapp como un servicio. Este archivo se ubicará en el directorio /etc/systemd/system/. Abre un editor de texto (puede ser nano o vi):
sudo nano /etc/systemd/system/pendientes-webapp.service
A continuación, copia el siguiente contenido en el archivo. Este define el servicio para tu aplicación:
[Unit]
Description=Aplicacion Spring Boot Pendientes - Webapp
After=syslog.target
[Service]
User=root
ExecStart=/opt/jdk-21.0.4+7/bin/java -Duser.timezone=UTC -jar /opt/pendientes-webapp/pendientes-webapp.jar
Environment=INSTANCIA=INSTANCIA-1
Environment=VERSION=1.0.0-RELEASE
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
- Description: Una breve descripción del servicio.
- After: Define cuándo se debe iniciar el servicio, en este caso, después de que syslog.target esté listo.
- User: El usuario que ejecutará el servicio (aquí es root).
- ExecStart: La ruta donde se encuentra tu JDK y el archivo .jar de la aplicación. En este caso, también se especifica la zona horaria como UTC.
- SuccessExitStatus: El código de salida considerado exitoso para detener el servicio.
- WantedBy: Especifica en qué momento el servicio debe estar habilitado; multi-user.target asegura que se ejecute cuando el servidor está en modo multiusuario.
Paso 3: Recargar y habilitar el servicio
Una vez que el archivo de servicio está creado, debes recargar systemd
para que reconozca el nuevo servicio y luego habilitarlo para que inicie automáticamente al arrancar el sistema.
Recarga systemd para aplicar los cambios
sudo systemctl daemon-reload
Habilita el servicio para que se ejecute automáticamente en el arranque:
sudo systemctl enable pendientes-webapp.service
Inicia el servicio manualmente para probarlo:
sudo systemctl start pendientes-webapp.service
Verifica el estado del servicio para asegurarte de que se está ejecutando correctamente:
sudo systemctl status pendientes-webapp.service
Deberías ver un mensaje indicando que el servicio está activo y corriendo.
Paso 4: Detener y reiniciar el servicio
Si alguna vez necesitas detener o reiniciar el servicio, puedes utilizar los siguientes comandos:
Detener el servicio:
sudo systemctl stop pendientes-webapp.service
Reiniciar el servicio:
sudo systemctl restart pendientes-webapp.service
Paso 5: Logs del servicio
Puedes consultar los logs generados por el servicio con el comando:
sudo journalctl -u pendientes-webapp.service
Esto es útil para depurar problemas o revisar el estado de la aplicación a lo largo del tiempo.
Conclusión
Con esta configuración, tu aplicación Spring Boot estará configurada como un servicio en Ubuntu Server. El servicio se ejecutará en segundo plano y se reiniciará automáticamente después de un reinicio del sistema. Esto asegura una operación continua de tu webapp con un mínimo de intervención manual.
Si tienes más de una aplicación que deseas ejecutar de esta manera, puedes repetir este proceso creando archivos de servicio adicionales para cada aplicación.