Enviado por juanonlab el Sáb, 24/11/2018 - 20:00
Despliegue aplicación spring boot

En esta entrada voy a comentar como he desplegado una aplicación spring boot en mi servidor. Explicaré como dejar tu aplicación preparada para que aunque el servidor se reinicie esta arranque de manera automática (entorno ubuntu 18.04). 

Si no sabéis lo que es springboot diré de manera sencilla que es una tecnología que te permite agrupar gran parte de las tecnologías spring en un único fichero autoejecutable ya sea jar o war. Estos ficheros suelen contener un servidor web para que en un único fichero dispongas de todo lo necesario para arrancar la aplicación (servidor, spring mvc, acceso a la base de datos, apis... ). Digamos que es un todo en uno en entornos java. Ejecutar y listo.

Esquema:

Esquema spring boot

El servidor embebido de springboot escucha las peticiones por el puerto 8090 de manera local.

La idea general ha sido utilizar mi servidor nginx como proxy inverso. Este recibe las peticiones desde el exterior y las direcciona al servidor embebido de spring boot que se comunica con la base de datos para recuperar los refranes.

Para iniciarse en una tecnología es mejor tener una aplicación completamente funcional aunque esta sea sencilla. He creado una web que muestra de manera aleatoria frases insertadas en una base de datos mariadb. Es posible ver todas las frases de un mismo autor y visitar una página estática que muestra las tecnologías empleadas.

No tenía mucha experiencia con spring boot aunque he trabajado mucho con java. Configurar el puerto del servidor, conectar con tu base de datos...ha sido sencillo. Se dispone de buena documentación y tutoriales para avanzar a buen ritmo. Como punto de entrada a esta tecnología está muy bien pero hay muchísimas cosas que aprender.

Se emplea spring data para acceder a base de datos y aprovechar ciertas funcionalidades que permiten ejecutar consultas sencillas de manera casi automática. La parte front está implementada con el motor de plantillas thymeleaf y bootstrap4. Os dejo un enlace a mi bitbucket personal donde está alojado el proyecto. Es un pequeño proyecto muy mejorable pero funcional.

Frases spring boot app

Voy a mostrar los pasos que he seguido para el despliegue en mi servidor ubuntu:

 

Modificaciones en el servidor nginx

He decidido usar el directorio frases para direccionar hacía la aplicación spring boot. El puerto de redireccionamiento va a ser el 8090. Aquí dejo un gist con el código de nginx:

 

Configuración application.properties de springboot

En el siguiente fichero muestro como se ha configurado el puerto, el contexto de la aplicación, como se conecta con la base de datos y el dialecto utilizado para acceder a mariadb (pongo las contraseña a modo de ejemplo).

 

Configuración en ubuntu

Una vez que se ha generado tu fichero jar es hora de subirlo al servidor. En mi caso es un servidor ubuntu 18.04. Debes tener instalado java por supuesto. 

 

He decidido guardar las aplicaciones spring boot en el directorio:

/var/www/sboot

 

Por comodidad he renombrado el jar generado en mi aplicación y he pasado a llamarlo sbfrases.jar.

mv frases-juanonlab-0.0.1-SNAPSHOT.jar sbfrases.jar

 

Una buena medida de seguridad es no utilizar el usuario root para arrancar tu aplicación spring boot. He creado previamente un usuario específico para arrancar este tipo de aplicaciones. Con esta instrucción el propietario pasa a ser bootapp.

chown bootapp:bootapp sbfrases.jar

 

Mediante estas 2 instrucciones restringimos el acceso al fichero sbfrases.jar. La primera instrucción sólo da los permisos de ejecución y lectura al propietario (bootapp). La siguiente orden genera una especie de bloqueo sobre el fichero para que incluso el root sea incapaz de borrar este fichero. Para revocar esta orden habría que cambiar -i por +i.

chmod 500 sbfrases.jar
chattr -i sbfrases.jar

 

Instalar la aplicación como un servicio en systemd

Ahora voy a dejar preparado el jar para que sea sencillo arrancar y parar la aplicación. Además dejaré listo linux para que el servidor al reiniciar la máquina lance también el fichero jar de springboot.

Para ello creo un fichero de configuración y lo guardo en un directorio donde systemd lo tenga en cuenta.

En este gist se encuentra la configuración necesaria. Nótese que es necesario indicar la ruta completa donde se encuentra java (o su enlace simbólico) para lanzar el jar de springboot.

Este fichero se llama sbfrases.service y se debe guardar en /etc/systemd/system . El nombre del fichero coincide con el nombre de la aplicación.

 

Arrancar/Parar la aplicación

Una vez instalado en sytemd parar y arrancar la apliación es muy sencillo

 

- Arrancar:

systemctl start sbfrases

- Parar:

systemctl stop sbfrases

 

En esta pantalla puedes ver la aplicación corriendo:

root@juanonlabserver:/var/www/sboot# ps aux
...
root     14705  0.0  0.0      0     0 ?        I    15:14   0:00 [kworker/u2:3]
root     14998  0.0  0.0      0     0 ?        I    15:35   0:00 [kworker/u2:0]
dovecot  15128  0.0  0.2  47364  5660 ?        S    15:40   0:00 dovecot/auth
root     15150  0.0  0.0      0     0 ?        I    15:44   0:00 [kworker/u2:1]
root     15154  0.1  0.3 105900  7208 ?        Ss   15:45   0:00 sshd: root@notty
root     15234  0.0  0.1  13060  2092 ?        Ss   15:45   0:00 /usr/lib/openssh/sftp-server
bootapp  15326 51.2  9.4 2477144 192180 ?      Ssl  15:50   0:12 /usr/bin/java -jar /var/www/sboot/sbfrases.jar
root     15378  0.0  0.1  37364  3404 pts/0    R+   15:51   0:00 ps aux

Puedes observar que el propietario es bootapp.

 

Añadirlo al arranque de inicio del sistema

Si reinicias tu servidor ubuntu y no quieres iniciarlo de manera manual basta ejecutar este comando:

systemctl enable sbfrases.service

 

Conclusión

Esto es sólo una toma de contacto con la tecnología pero he implementando toda la funcionalidad básica. Faltaría añadirle por ejemplo un sistema de log pero a modo de demo te da una idea del potencial de esta tecnología.

Me he centrado sobre todo en el despliegue porque hay menos información que en la parte de implementación de springboot. Pincha en el link de mi aplicación frases en juanonlab para verla corriendo.

 

Bibliografía

Existe un artículo muy bueno en la propia documentación de spring. Dejo el enlace sobre como instalar una aplicación spring boot.

Añadir nuevo comentario