Ir al contenido principal

Jhipster (Angular + Spring Boot) + Docker + AWS


En esta entrada vamos a ver la potencia de esta terna, ya sé que no tiene mucho que ver con el blog, pero me ha parecido interesante compartirlo ya que podemos desarrollar nuestra aplicación web basada en Sprint Boot con un frontal Angular sin mucho esfuerzo (más bien en maquetación), dockerizar esta aplicación, gestionarla desde nuestro dockerhub y publicarla en una máquina EC2 en Amazon completa, teniendo acceso a la misma.



El objetivo no es profundizar en JHipster, que nos permite desarrollar proyectos por medio de esta herramienta de una forma rápida, ya que nos asila de conocer y profundizar en exceso en las herramientas (siempre que no nos sea necesario) en las que nos podemos basar.

JHipster
Es una plataforma de desarrollo que nos permite generar, desarrollar y desplegar modernas aplicaciones web y arquitecturas de microservicios.

Os recomiendo que echéis un ojo, me ha parecido muy completo, fácil e intuitivo de manejar. 


Podemos integrarlo fácilmente dentro de Eclipse, montar nuestro proyecto y generar toda la estructura básica necesaria.





Una vez que tenemos la estructura podemos añadir nuevas entidades y gestionar las relaciones entre las mismas, podemos forzar a que se nos construya el código básico que nos va a permitir en la parte de servicios, toda la infraestructura en las diferentes capas: API REST, servicios, dominio y repositorio. Dentro del front también se nos va a generar la infraestructura en a angular.



Para ello únicamente necesitamos:

  • Definir un fichero jdl con las entidades y las relaciones entre las mismas.
  • Utilizar la herramienta jhipster import-jdl, que nos permitirá generar / actualizar la estructura a partir de la información del fichero (https://www.jhipster.tech/creating-an-entity/)

Un tema que no he mencionado, y me ha parecido muy interesante, es que podemos securizar la aplicación y la gestión de usuarios con múltiples tecnologías, en mi caso he añadido Oatuh2 con una autenticación de usuarios basado en un sistema externo, en mi caso he empleado el servicio de okta, donde únicamente he tenido que configurar la cuenta, y crear la configuración de usuarios y aplicación en el mismo, una vez realizado esto, podemos configurar fácilmente que las operaciones se dirijan al servicio sobre el fichero de configuración como en este ejemplo:


En cuanto al frontal, la parte de angular, fue la que he escogido en mis pruebas, muy sencilla de manejar, la estructura que crea para las entidades y los servicios, todo muy organizado, nada que objetar..



Docker

Con esto ya no solo nos queda crear el docker y correr nuestra aplicación, en la página de jhipster podemos revisar todo lo que necesario, para crear el docker y ejecutar la aplicación..

https://www.jhipster.tech/docker-compose/

Si curioseamos un poco, podemos ver que podemos levantar dockers de diversos tipos desde la solución que hemos generado, BD, Sonar, etc... muy completo, la verdad...

Nuestro objetivo era, desplegar en AWS, realmente podríamos optar por varias opciones, pero vamos a desarrollar la más simple, ejecutarlo sobre una máquina EC2, para ello que vamos a necesitar:

  • Un repositorio donde podamos tener nuestra aplicación. Desde la máquina lo que haremos será conectarnos y cargar la imagen del docker y arrancarla.
  • También vamos a necesitar la BD, yo en mi caso empleo un MySql que tendremos alojada en el servicio RDS de AWS. 
  • Crear una máquina EC2 en AWS, nos vale una de la capa gratuita.


Para el primer paso, podemos abrirnos una cuenta en docker y dentro del hub crearnos un repositorio donde vamos a impactar nuestra imagen. Hay múltiples urls donde puedes ver esto, yo por mi parte dejo una que nos puede valer.

https://ropenscilabs.github.io/r-docker-tutorial/04-Dockerhub.html


AWS

Los dos últimos pasos comprenden trabajar con AWS. La idea es tener la BD en una instancia de RDS y la aplicación web la vamos a ejecutar sobre una instancia EC2 por medio de un Docker.

Para la BD en RDS creamos una instancia MySql, aprovechamos la capa gratuita ya que esto es una pequeña PoC, creamos la instancia ya la configuramos.



Una vez creada la instancia, podremos conectarnos a la BD desde nuestro entorno favorito, yo en mi caso utilizo DBeaver, si no lo conocéis echarle un ojo, es muy potente.



Se me olvidaba, la primera vez que os conectéis la BD no va a estar creada, esto lo reservamos al arranque de la aplicación, donde por medio de la configuración y JPA vamos a conseguir que se cree la estructura de la BD y se pueble con la configuración por defecto.


Al contenedor podemos pasarle parámetros y para conseguir el efecto mencionado, debemos introducir el parámetro SPRING_JPA_HIBERNATE_DDL_AUTO=validate, de esta forma se comprobará si la BD tiene algún cambio o es nueva, aplicando los cambios que se detecten.

Para la máquina virtual nos vale una máquina de tipo t2.micro, de la capa gratuita, para ello una vez lanzada y configurada la instancia debemos hacer dos cosas:

  • Instalar apache, tendremos lo necesitaremos para que haga de Proxy con respecto el contenedor docker que lancemos, 
  • Instalar docker, tendremos que poder lanzar nuestra aplicación paquetizada.


La instalación de apache no tiene complicación, por medio de yum y siguiendo cualquier tutorial en la web lo tendremos instalado en 3 minutos. Lo único será configurar lo para que haga de proxy sobre el puerto 80 y nos redirija al puerto 8080, que es donde vamos a configurar el contenedor para que escuche, nos basta con la siguiente configuración (tener en cuenta que estoy poniendo la url del servidor).



Para instalar Docker nos vale cualquier tutorial, hay multiples en la web. Una vez que lo tengamos instalado, vamos a logarnos en nuestro repositorio de contenedores.





Lo siguiente será hacer un pull del contenedor que queremos descargarnos y ya sólo nos quedará ejecutar el mismo.



Para ejecutarlo, nos basta con lanzar el comando señalado en verde y con esto ya podríamos acceder a a nuestra aplicación desplegada en la instancia de EC2.



Ya sólo nos queda terminar de configurar la web, para que sea más cómodo vamos usar una redirección a nivel de DNS dentro de nuestro dominio, para ello lo que vamos a hacer es redirigir la url mindundis.madridbigata.com a la url publica de la instancia EC2 en AWS ( por ahorrarnos unos €).



Ahora sólo nos queda configurar OKTA para que funcione la autenticación delegada que tenemos montada, para ello hay que dar de alta las nuevas url a nivel de la aplicación que hemos creado.



Con todo esto, si accedemos ya a la web podremos que ver que se carga sin problemas...



Y al logarnos, nos redirige a la url de OKTA donde entramos con las credenciales...


Una vez dentro, podremos navegar sobre los menús de administración como por ejemplo ver nuestros eventos:



Espero que os haya gustado, el objetivo es mostraros el proceso, no todos los detalles, si tenéis dudas os cuento como hacerlo.




Comentarios

Entradas populares de este blog

Machine Learning soluciones a los problemas

  El aprendizaje automático, o Machine Learning (ML), es una rama de la inteligencia artificial que se centra en la creación de sistemas que pueden aprender y mejorar a partir de la experiencia sin ser explícitamente programados para cada tarea específica. Este campo ha ganado una gran relevancia en los últimos tiempos debido a los avances en el procesamiento de datos, la disponibilidad de grandes volúmenes de información y el incremento en la capacidad de computación y soluciones Cloud. Vamos a explorar algunos conceptos fundamentales de ML, que problemas surgen en la práctica, como podemos limpiar los datos y que técnicas podemos emplear, que es la validación cruzada y algunos desafíos específicos que plantean los algoritmos. Conceptos Fundamentales de Machine Learning Tipos de Aprendizaje Aprendizaje Supervisado : En este tipo de aprendizaje, el modelo se entrena utilizando un conjunto de datos etiquetados, lo que significa que cada ejemplo de entrenamiento viene con una etiquet...

Despliegue de un IDP en Cognito AWS e Integración con una Web en Sprint Boot

  Introducción En este artículo vamos a describir el proceso de despliegue de un proveedor de identidad (IDP) en Amazon Cognito e integración con una aplicación web desarrollada en Sprint. Se detallan las fases necesarias, las tareas principales dentro de cada fase, junto con recomendaciones para asegurar un proceso exitoso. Fases Necesarias Configuración de Cognito En esta fase se creará el pool de usuarios, el grupo de usuarios y las políticas de autenticación y autorización en Cognito. Tareas Principales: Crear un pool de usuarios en Cognito para gestionar las identidades de los usuarios. Definir los atributos de usuario necesarios para la autenticación y autorización. Configurar las políticas de autenticación para determinar los métodos de acceso (por ejemplo, nombre de usuario y contraseña, autenticación social). Crear un grupo de usuarios para agrupar a los usuarios con permisos específicos. Definir las políticas de autorización para determinar los permisos de acceso a los re...