Evolutivos entre entornos [Working Progress]

 

Introducción

Onesait Platform ofrece una variedad de elementos y funcionalidades adicionales para facilitar la migración y restauración de elementos en el contexto del versionado Git. Al seguir esta guía, los equipos de desarrollo y operaciones podrán abordar la migración de manera sistemática y eficiente, minimizando el riesgo de errores y asegurando una transición exitosa hacia nuevos entornos. Permitiendo:

  1. Mejorar la Calidad del Software: La migración en un entorno controlado garantiza una mayor calidad del software entregado, reduciendo los errores y minimizando los tiempos de inactividad.

  2. Reducir Costos y Riesgos: Al automatizar los procesos de migración de software, Onesait Platform ayuda a reducir los costos operativos y los riesgos asociados con los despliegues manuales, al mismo tiempo que mejora la estabilidad y la fiabilidad del sistema.

Como primer paso ante cualquier migración entre entornos, tendremos inicialmente que definir el tipo de migración que queremos realizar, donde podremos abarcar las diferentes posibilidades:

  1. Migración completa: la cual implica transferir todas las aplicaciones, datos y configuraciones de un entorno a otro, asegurando que el sistema funcione correctamente del mismo modo en el nuevo entorno.

  2. Evolutivos / incrementales entre entornos: Donde trasladamos aquellos incrementales o mejoras en el software de un entorno a otro. Este tipo de migración se enfoca en implementar nuevas características, correcciones de errores o actualizaciones en un entorno, migraremos aquellos elementos e información específica requerida.

Una vez identificado los elementos que queremos migrar, vemos las diversas etapas en la migración.

Punto de partida

Antes de comenzar la migración, dispondremos de nuestro repositorio GIT y ambos entornos, el entorno origen y entorno de destino, el cual estará desplegado en una versión inicial facilitada por el config.init de plataforma.

image-20240412-072926.png

Una vez dispongamos de ambos entornos y nuestro repositorio GIT, podremos comenzar a realizar la migración de todos los recursos entre ambos.  

Migración de conceptos de plataforma

Para la realización de migración de conceptos entre entornos (entendiendo por conceptos todas aquellas definiciones generadas desde el controlpanel como: realms, usuarios, flujos, entidades, dashboard etc) se ha de realizar con el rol de administrador. El cual será el encargado de la gestión del entorno.

 De manera previa, necesitaremos disponer de un repositorio GIT y enlazarlo en nuestros diferentes entornos, posibilitando esa migración e incrementales entre entornos. Para ello, nos dirigiremos a la configuración del versionado VERSION CONTROL > Configuration:

image-20240412-073006.png

Introduciremos la información correspondiente a nuestro repositorio GIT y habilitando el versionado nos permitirá poder realizar restauraciones de los conceptos de plataforma de manera independiente.

Una vez, completada esta configuración podremos gestionar el versionado en la plataforma, facilitándonos las migraciones e incrementales entre entornos, o la restauración en un punto pasado.

Versionado Completo

Onesait Platform puede gestionar versiones completas de proyectos, lo que permite a los equipos trabajar en diferentes versiones de un proyecto simultáneamente y realizar cambios de manera controlada. Esta funcionalidad permite generar una fotografía instantánea del entorno, incluyendo todos los elementos y configuraciones relevantes. Esto proporciona una forma rápida y completa de hacer una copia de seguridad o restaurar toda la plataforma en un estado anterior.

Para ello, desde el propio controlpanel nos dirigiremos a VERSION CONTROL>create snaptshot & Git tags

Accederemos a un panel con todos los conceptos de plataforma seleccionados, que será todos los conceptos que se incluirán en el versionado.

Cuando realizamos un snapshot o un versionado de elementos debemos de definir un tag de versionado, como podemos ver en la guía de buenas prácticas, definiríamos un tag representativo de nuestro proyecto, como por ejemplo <proyecto>.<entorno_origen>.<tipo_versionado>.<versión> : ej_proyecto.desarrollo.snapshot.v1.0.0

En ese instante, se creará un commit en nuestro proyecto git (definido anteriormente) y podremos a posteriori exportarlo a otro entorno mediante el tag definido.

Versionado Selectivo

Del mismo modo, desde la plataforma se podrá gestionar un control de versionado de cada concepto generado, permitiendo realizar incrementales y exportar conceptos específicos entre entornos. Para ello, accedemos al mismo punto que anteriormente, version control>create snaptshot & Git tags. Donde podremos deseleccionar todos los conceptos y seleccionar solo aquellos que nos interese incluir en el versionado.

Nota: Cuando realizamos un versionado, podemos únicamente seleccionar nuestra aplicación generada y automáticamente nos agregará todos los conceptos asociados a ella.

 

En este caso y del mismo modo que cuando realizamos un snapshot, definimos un tag para nuestro versionado. ej_proyecto.desarrollo.selectivo.v1.0.0

Restauración Versionados

En este punto, disponemos de dos posibilidades. Desde el controlpanel y accediendo de nuevo al apartado de VERSION CONTROL>Restore Platform

 

Una vez dentro, completaremos con la información necesaria respecto a nuestro repositorio origen, donde hemos almacenado los versionados anteriores.

Dispondremos de dos opciones:

  • Restauración completa: enfocada para restaurar un snapshot realizado previamente. Donde al completar la información se realizará un borrado completo y se restaurará la versión seleccionada. (Ya sea un snapshot o versionado de varios conceptos de plataforma.)

  • Incremental: Seleccionado el checkbox de incremental, realizaremos una restauración únicamente de aquellos componentes nuevos o que se hayan modificado, facilitando la evolución entre entornos y un trabajo más ágil.

 En el portal del desarrollador podrás encontrar más información para trabajar con versionado en plataforma.

Migración de la información. (BBDD)

En este punto, abordaremos las mejores prácticas y consideraciones clave para llevar a cabo una migración de bases de datos exitosa dependiendo del tipo de la misma.

Desde la evaluación de requisitos y riesgos hasta la selección de herramientas adecuadas y la ejecución de pruebas exhaustivas, cada paso del proceso se abordará de manera detallada para proporcionar una guía completa y efectiva para los equipos de desarrollo y administración de bases de datos.

Migración de la base de datos MongoDB

Migración completa  

  1. Respaldar la base de datos en el servidor de origen:

mongodump --db {{ db_name }} --username {{ realtimedb_user }} --password {{ realtimedb_password }} --authenticationDatabase {{ realtimedb_authdb }} --out {{ output_directory }}

Transferir el respaldo al servidor de destino:

  1. Transfiere las carpetas generadas al servidor de destino utilizando SCP, FTP u otro método de transferencia de archivos

  2. Exportación de datos:

mongorestore --db {{ db_name }} --username {{ realtimedb_user }} --password {{ realtimedb_password }} --authenticationDatabase {{ realtimedb_authdb }} /tmp/realtimedb-dump/{{ db_name }}

Migración selectiva. 

Enfocada para la migración de tablas específicas y/o un conjunto específico de datos.

  1. Seleccionar las tablas a migrar:

    • Identifica las colecciones necesarias para migrar (REVISIÓN TAG VERSIONADO GIT // versionado Mongodb)

  2. Exportar las colecciones seleccionadas:

    • Utiliza la herramienta mongodump con la opción --collection para exportar solo las colecciones seleccionadas.

Ejemplo:

mongodump --db <nombre_base_datos> --username {{ realtimedb_user }} --password {{ realtimedb_password }} --authenticationDatabase {{ realtimedb_authdb }} --collection <nombre_coleccion> --out <directorio_destino>
  1. Utilizar una migración con filtrado, para migrar únicamente un conjunto de datos de la tabla.  

Ejemplo:

  1. Transferir los archivos de respaldo:

    • Transfiere los archivos de respaldo generados en el paso anterior al servidor de destino utilizando SCP, FTP u otro método de transferencia de archivos.

  2. Importar las colecciones en el servidor de destino:

    • En el servidor de destino, utiliza la herramienta mongorestore para importar las colecciones seleccionadas a partir de los archivos de respaldo.

Ejemplo:

Migración de la base de datos MariaDB:

Migración completa

  1. Respaldar la base de datos en el servidor de origen:

    • Utiliza el comando mysqldump para realizar una copia de seguridad completa de la base de datos.

Ejemplo:

  1. Transferir el respaldo al servidor de destino:

    • Transfiere el archivo de respaldo (respaldo_completo.sql) al servidor de destino utilizando SCP, FTP u otro método de transferencia de archivos.

  2. Restaurar la base de datos en el servidor de destino:

    • En el servidor de destino, utiliza el comando mysql para restaurar la base de datos completa a partir del archivo de respaldo.

Ejemplo:

Migración selectiva

  1. Seleccionar las tablas a migrar:

    • Identifica las tablas necesarias para migrar (REVISIÓN TAG VERSIONADO GIT)

  2. Respaldar solo las tablas seleccionadas:

    • Utiliza el comando mysqldump con la opción --tables para respaldar solo las tablas seleccionadas.

Ejemplo:

  1. Utilizar una migración con filtrado, para migrar únicamente un conjunto de datos de la tabla.  

  1. Transferir el respaldo al servidor de destino:

    • Transfiere el archivo de respaldo (respaldo_selectivo.sql) al servidor de destino utilizando SCP, FTP u otro método de transferencia de archivos.

  2. Restaurar las tablas en el servidor de destino:

    • En el servidor de destino, utiliza el comando mysql para restaurar solo las tablas seleccionadas a partir del archivo de respaldo.

Ejemplo:

Migración de la base de datos PostgreSQL:

Migración completa

  1. Respaldo de la base de datos en el servidor de origen:

    • Utiliza el comando pg_dump para realizar una copia de seguridad completa de la base de datos.

Ejemplo:

  1. Transferir el respaldo al servidor de destino:

    • Transfiere el archivo de respaldo (respaldo.sql) al servidor de destino utilizando SCP, FTP u otro método de transferencia de archivos.

  2. Restaurar la base de datos en el servidor de destino:

    • En el servidor de destino, utiliza el comando psql para restaurar la base de datos a partir del archivo de respaldo.

Ejemplo:

Migración selectiva

Si deseas realizar una migración selectiva de solo algunas tablas específicas en lugar de migrar toda la base de datos, deberemos de  seguir estos pasos:

  1. Seleccionar las tablas a migrar:

    • Identifica las tablas necesarias para migrar (REVISIÓN TAG VERSIONADO GIT)

  2. Respaldar solo las tablas seleccionadas:

    • Utiliza el comando pg_dump con la opción -t para respaldar solo las tablas seleccionadas.

Ejemplo:

  1. Utilizar una migración con filtrado, para migrar únicamente un conjunto de datos de la tabla.  

  1. Transferir el respaldo al servidor de destino:

    • Transfiere el archivo de respaldo (respaldo_selectivo.sql) al servidor de destino utilizando SCP, FTP u otro método de transferencia de archivos.

  2. Restaurar las tablas en el servidor de destino:

    • En el servidor de destino, utiliza el comando psql para restaurar solo las tablas seleccionadas a partir del archivo de respaldo.

    • Ejemplo:

Migración de la base de datos MinIO:

Migración completa

Elección de la Herramienta de Migración: Si disponemos de visibilidad entre entronos, podremos seleccionar una herramienta de migración que sea adecuada para las necesidades y el tamaño de los datos a migrar. Algunas opciones comunes incluyen:

  • MinIO Client (mc): La herramienta de línea de comandos oficial de MinIO que puede utilizarse para copiar datos entre dos instancias de MinIO.!!

  • rclone: Una herramienta de línea de comandos que soporta múltiples servicios de almacenamiento en la nube, incluyendo MinIO.

  • MinIO Data Migration Tool: Una herramienta específicamente diseñada para migrar grandes volúmenes de datos entre instancias de MinIO.

Por otro lado, si no disponemos una conexión directa entre ambos entornos, aún podemos realizar la migración de la información almacenada en MinIO utilizando algunas estrategias mediante la clonación de servidores.

Clonar los servidores de MinIO implica replicar tanto la configuración del servidor como los datos almacenados en él en otro servidor. Aquí tienes un enfoque general sobre cómo puedes hacerlo:

  1. Copia de la Configuración del Servidor:

    • Antes de clonar el servidor, asegúrate de copiar la configuración de MinIO en el servidor de origen. Esto incluye archivos de configuración como config.json, que contiene información sobre los puntos de acceso, credenciales de acceso, políticas de almacenamiento, etc. Puedes encontrar este archivo en el directorio de configuración de MinIO.

  2. Copia de los Datos:

    • Haz una copia de seguridad de todos los datos almacenados en el servidor de origen. Esto puede incluir el contenido de todos los buckets y cualquier otro dato almacenado en el servidor de MinIO. Puedes usar herramientas de copia de seguridad integradas en MinIO o simplemente copiar manualmente los archivos y directorios relevantes.

  3. Configuración del Servidor de Destino:

    • Configura un nuevo servidor de MinIO en el servidor de destino utilizando la misma versión de MinIO que en el servidor de origen. Asegúrate de configurar la misma configuración que en el servidor de origen, incluidos los puntos de acceso, credenciales de acceso, etc. Utiliza el archivo de configuración config.json que copiaste del servidor de origen como referencia.

  4. Restauración de los Datos: Copia los datos de respaldo que creaste del servidor de origen al servidor de destino. Esto puede implicar copiar los archivos directamente a través del sistema de archivos o utilizando herramientas de transferencia de archivos como rsync. Asegúrate de mantener la estructura de directorios y los permisos de los archivos durante la transferencia.

Migración incremental

{completar} 

Migración Reports y binary files. 

Migración completa

  1. Compresión de los Archivos:

    • Utiliza una herramienta de compresión como tar para comprimir los archivos y directorios que deseas migrar. Por ejemplo, para comprimir un directorio llamado informes:

Esto creará un archivo comprimido llamado informes.tar.gz que contiene todos los archivos y subdirectorios dentro de /ruta/a/informes.

  1. Transferencia de los Archivos Comprimidos:

    • Transfiere el archivo comprimido desde el sistema de origen al sistema de destino utilizando una herramienta de transferencia de archivos como scp (si dispusiéramos de conexión entre ambos entornos)

o copiando el archivo comprimido de manera manual al nuevo entorno.

  1. Descompresión de los Archivos:

    • Una vez que el archivo comprimido se haya transferido al entorno de destino, descomprímelo utilizando la herramienta tar. Por ejemplo:

  1. Verificación de la Descompresión:

    • Verifica que los archivos se hayan descomprimido correctamente y que estén disponibles y accesibles según lo previsto en el nuevo entorno.

Migración incremental

  1. Identificación de los Cambios:

    • Antes de cada migración, identifica los archivos que han cambiado o se han añadido desde la última migración. Puedes utilizar herramientas como rsync para comparar los archivos en el sistema de origen y el sistema de destino y determinar qué archivos necesitan ser transferidos.

  2. Copia de Seguridad de los Cambios:

    • Haz una copia de seguridad de los archivos que han cambiado o se han añadido desde la última migración. Esto asegura que tengas una copia de seguridad de los datos antes de realizar la migración incremental.

  3. Transferencia de los Cambios:

    • Utiliza herramientas de transferencia de archivos como rsync para transferir solo los archivos que han cambiado desde la última migración. Por ejemplo:

Esto transferirá solo los archivos que han cambiado o se han añadido en el directorio /ruta/a/informes al directorio de destino en el servidor destino.

  1. Actualización de Configuraciones y Enlaces:

    • Si es necesario, actualiza cualquier configuración o enlace de aplicaciones para reflejar los cambios en los archivos migrados en el sistema de destino.

  2. Pruebas y Verificación:

    • Realiza pruebas adicionales para asegurarte de que los archivos se hayan transferido correctamente y que estén disponibles y accesibles según lo esperado en el nuevo entorno.