Tribalyte Technologies Tribalyte Technologies
  • Inicio
  • Misión y visión
  • Nuestros expertos
  • Nuestras soluciones
  • Casos de éxito
  • Blog
  • Contáctanos
  • Únete al equipo
Tribalyte Technologies Tribalyte Technologies
  • Inicio
  • Misión y visión
  • Nuestros expertos
  • Nuestras soluciones
  • Casos de éxito
  • Blog
  • Contáctanos
  • Únete al equipo
Dic 19

Desplegando en OpenShift Online una app Ionic 4 – Angular

  • diciembre 19, 2019
  • Rafael Barriuso
  • No Comments
  • Consejos tecnológicos, Desarrollo de software, Tecnologías

Bienvenidos a una nueva entrada del blog de Tribalyte sobre desarrollo de aplicaciones en la nube.

En anteriores entradas hicimos una introducción a OpenShift Container Platform, y más recientemente hablamos sobre cómo crear una app sencilla con Ionic Framework 4. En esta entrada vamos a tratar de aplicar ambas tecnologías para crear, compilar y desplegar una app Ionic 4 con Angular en la nube con OpenShift Online.

Dicho de manera rápida, OpenShift Online es la versión pública de OpenShift alojada y gestionada por Red Hat. Para comenzar a utilizar la plataforma es únicamente necesario registrarse utilizando o creando una cuenta gratuita de desarrollador de Red Hat. Actualmente existe la opción de utilizar un plan de entrada («Starter plan»), que es gratuito y cuenta con las siguientes limitaciones: máximo 1 proyecto, 2GB de RAM, 2GB de almacenamiento persistente, renovación cada 60 días (gratuita e ilimitada) y soporte de comunidad (más info en la página de OpenShift Online).

Por otro lado, usaremos una aplicación de ejemplo basada en un «starter» de Ionic 4 con Angular, cuyo código se encuentra publicado en https://github.com/TribalyteTechnologies/ionic4starter

A continuación describiremos paso por paso cómo compilar y ejecutar nuestra aplicación web de ejemplo (sólo front-end) sobre OpenShift. Aviso: sirvan las siguientes líneas como prueba de concepto que, como veremos al final, presenta algunas limitaciones.

Index

  • 1 Creación de la plantilla del proyecto
  • 2 Personalización de nuestra imagen de contenedores
  • 3 Conclusiones

Creación de la plantilla del proyecto

En primer lugar creamos un proyecto pulsando sobre Home -> Projects -> Create Project e introduciendo el nombre del proyecto, como por ejemplo «ionic4starter».

Captura de pantalla de 2019-12-08 17-53-25

Un proyecto en OpenShift es un espacio de nombres de Kubernetes donde se agrupan todos los recursos, como veremos más adelante.

El siguiente paso consiste en utilizar una plantilla existente que nos ayude a generar las configuraciones de compilación y despliegue. Para ello seleccionamos nuestro proyecto recién creado y pulsamos sobre Home -> Status -> Browse Catalog. Con ello se abrirá el catálogo de pilas tecnológicas pre-configuradas en OpenShift Online (por ejemplo Perl, .NET Core, Go, Node.js, PHP, Python, Java, WildFly, etc). No olvidemos que OpenShift es una plataforma de compilación, despliegue y ejecución de aplicaciones contenerizadas agnóstica en lo que a la tecnología de la aplicación se refiere.

Dado que nos interesa compilar la app Ionic 4 – Angular con Node.js, en nuestro caso seleccionaremos Node.js y pulsaremos sobre «Create Application», introduciendo los datos requeridos:

Captura de pantalla de 2019-12-08 18-10-09

Tal y como señala el formulario, de no ser público el repositorio (Git) de código, sería necesario crear un secreto de código fuente pulsando Workloads -> Secrets -> Create -> Source Secret y pegando bien nuestro usuario y contraseña, o (mejor) la clave SSH de acceso al repositorio. En nuestro caso de ejemplo esto no es necesario.

Es importante seleccionar la opción de crear ruta («Create route«) para que el sistema configure automáticamente una URL pública donde poder acceder a nuestra aplicación.

Con estos sencillos pasos acabas de crear los recursos iniciales de tu aplicación de ejemplo. Estos recursos son:

  • DeploymentConfig o configuración de despliegue, donde se incluye qué contenedores se han de desplegar, basados en qué imágenes y en qué condiciones se deben regenerar (por ej. en caso de cambiar la configuración o en caso de existir una nueva imagen de la aplicación), así como la configuración de escalado.
  • BuildConfig o configuración de compilación, donde principalmente se define la estrategia para generar una imagen Docker / Podman a partir del código fuente, y cuándo se debe re-compilar (por ej. al haber nuevos commits en el repositorio Git).
  • Service: Básicamente es la URL donde se ofrece el servicio desplegado, que puede ser dado por varios Pods.
  • ImageStream: Es similar a un repositorio de imágenes Docker / Podman donde se almacenan las imágenes de contenedores generadas al compilar. Otros componentes de OpenShift lo utilizan para recibir notificaciones cuando se añaden nuevas imágenes.
  • Route, o ruta externa, que como comentábamos más arriba es la URL pública que genera el sistema y «mapea» a nuestro servicio.
  • Otros: políticas de red, etc.

Sin embargo, tras un momento, podemos ver en Builds -> Builds -> exampleapp-1 -> Overview  que la compilación de nuestra app ha fallado por falta de memoria («The build pod was killed due to an out of memory condition.»). Este problema se debe a que, como vimos al principio de la entrada, la cuenta gratuita de OpenShift Online limita la memoria RAM a 1GB como máximo, lo cual es insuficiente para el compilador de Angular (ng build) cuando se ejecuta en un entorno Node.js con la configuración por defecto.

Para poder lograr compilar nuestra aplicación, debemos de cambiar de estrategia…

Personalización de nuestra imagen de contenedores

Según hemos visto antes, es necesario que limitemos la memoria de Node.js a la hora de compilar, lo cual es posible utilizando el flag –max-old-space-size de Node. Para poder realizar la compilación de la aplicación Ionic/Angular con este flag, hemos de utilizar nuestro propio Dockerfile, que ya se encuentra en le repositorio de la aplicación de ejemplo y donde la línea que evita que el compilador falle es:

ENV NODE_OPTIONS=--max-old-space-size=500

De esta manera cualquier proceso Node.js no utilizará más de 500MB de memoria de pila, dejando el resto para otros procesos (o capas de software) que se necesiten ejecutarse durante la generación de la imagen.

Teniendo ya nuestro propio Dockerfile, simplemente necesitamos o crear una nueva configuración de compilación pulsando en Builds -> Build Configs -> Create Build Config y pegando el siguiente código en el editor YAML:

kind: BuildConfig
apiVersion: build.openshift.io/v1
metadata:
  name: docker-build
  namespace: ionic4starter
  labels:
    name: docker-build
spec:
  nodeSelector: null
  output:
    to:
      kind: ImageStreamTag
      name: 'exampleapp:latest'
  resources:
    limits:
      memory: 1Gi
  successfulBuildsHistoryLimit: 5
  failedBuildsHistoryLimit: 5
  strategy:
    type: Docker
    dockerStrategy: {}
  postCommit: {}
  source:
    type: Git
    git:
      uri: 'https://github.com/TribalyteTechnologies/ionic4starter.git'
  triggers:
    - type: ConfigChange
  runPolicy: Serial

Con esto tendremos una configuración de compilación que utiliza la estrategia Docker y por tanto utilizará nuestro Dockerfile.

Inmediatamente después de guardar la configuración de compilación, OpenShift Online lanzará la compilación. Es posible ver los «logs» de compilación abriendo Builds -> Builds -> docker-build-1 -> Logs.

Si todo ha funcionado como debe, ¡enhorabuena! Tras unos minutos la aplicación estará disponible al mundo entero en nuestra ruta pública. Esta URL se puede consultar en Networking -> Routes , en la columna «Location» (por ejemplo http://exampleapp-ionic4starter.apps.us-east-2.starter.openshift-online.com/).

Captura de pantalla de 2019-12-08 19-15-51

Puedes consultar el estado de tu contenedor en Workloads -> Pods -> exampleapp-1… y las estadísticas del proyecto en Home -> Status -> Project: ionic4starter -> Dashboard.

Captura de pantalla de 2019-12-08 19-17-02

 

En caso querer actualizar nuestra aplicación con cualquier cambio subido al repositorio, solamente será necesario pulsar en Builds -> Build Configs -> docker-build -> Actions -> Start build y nuestra aplicación se actualizará automáticamente. Por supuesto también sería posible configurar un «hook» para lanzar la actualización cada vez que se realiza un cambio sobre el código fuente.

Conclusiones

A lo largo de esta entrada hemos visto una manera en la que es posible compilar y desplegar una app muy sencilla de ejemplo, utilizando un «Dockerfile» propio a fin de evitar problemas de compilación derivados de la limitación de memoria del plan gratuito de OpenShift Online. Obviamente las estas limitaciones no son tales al utilizar versiones profesionales de OpenShift.

Alternativamente, también es posible compilar en nuestro entorno local para generar imágenes Docker / Podman y enviarlas al «ImageStream» de nuestro proyecto, obteniendo la URL pública de Builds -> Image Streams -> exampleapp -> Public Image Repository y haciendo «push» desde nuestro entorno de desarrollo. Pero eso quizá lo comentemos en futuras entradas del blog :)

Espero que esta entrada haya servidor para, mediante una pequeña prueba de concepto, recorrer los conceptos básicos sobre cómo desplegar aplicaciones en OpenShift Online. ¡Nos vemos en la nube!

Artículos Relacionados:

  • Lazy loading en Angular 9Lazy loading en Angular 9
  • Principio Solid Liskov ¿Cuáles son los principios S.O.L.I.D.?"Principio Solid Liskov" ¿Cuáles son los principios S.O.L.I.D.?
  • Sistema embebido y sus características | Conceptos fundamentales - Tribalyte TechnologiesSistemas embebidos y sus características | Conceptos fundamentales
  • 1Menores y tecnología
  • Realidad Aumentada usando Unity y Vuforia: ejemplo práctico - Tribalyte TechnologiesRealidad Aumentada usando Unity y Vuforia para crear Apps | Ejemplo práctico
  • Facebook
  • Twitter
  • LinkedIn
  • E-Mail

About The Author

CTO y Cofundador en Tribalyte. Soy Ingeniero de Telecomunicación, con más de 15 años de experiencia internacional en el sector del desarrollo de software. Mi misión en Tribalyte es guiar el Área de Ingeniería de Software y contribuir a que los proyectos se realicen con las tecnologías más adecuadas y la más alta calidad.

Leave a reply Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

ELIGE UNA CATEGORÍA

  • Blockchain
  • Consejos tecnológicos
  • Desarrollo de aplicaciones
  • Desarrollo de software
  • Sistema embebido
  • Tecnologías
  • Uncategorized

Una compañía dedicada al desarrollo de apps, software y soluciones embebidas para empresas.

SOCIOS

Contacto

Glorieta de Quevedo 8 6º2
28015 Madrid (ESPAÑA)
Phone: +34 910 177 514 E-Mail: contact@tribalyte.com Web: www.tribalyte.com
Sello PYME INNOVADORA 21/01/2025
PYME INNOVADORA
Válido hasta el 21 de enero de 2025
escudo de MEIC 21/01/2025

AYUDA

  • Política de privacidad
  • Política de calidad
  • Política de seguridad
  • Términos de uso

CERTIFICACIONES

⠀⠀⠀⠀⠀⠀⠀⠀⠀

SUBVENCIONES

Tribalyte Technologies S.L. ha    conseguido la ayuda C007/20-ED de Red.es para el impulso y la promoción de actividades de I+i y para el fomento de la inversión empresarial para desarrollar el proyecto iPatia. Así mismo, valoramos muy positivamente la contribución del FEDER, principal fondo de la política de cohesión europea, por lo que supone de impulso a nuestro trabajo y en consecuencia al crecimiento económico y la creación de empleo de esta región y de España en su conjunto.
Esta página web utiliza cookies para mejorar su experiencia de usuario y para recabar estadísticas anónimas de uso. Aceptar Más información