Blog
Como realizar una migración exitosa de MAGENTO 1 a MAGENTO 2 parte 2
- diciembre 13, 2023
- Publicado por: admin
- Categoría: Magento 2
Introducción
Continuando con el tema de la migración de una tienda existente en la versión de Magento 1 a la versión de Magento 2, si aún no has podido revisar la parte 1 de este artículo te invito a que lo hagas ahora mismo desde este enlace Como realizar una migración exitosa de MAGENTO 1 a MAGENTO 2 parte 1
En esta segunda parte me enfocare en la herramienta que la gente de Magento ha creado para la migración de datos de una base de datos de una tienda de Magento 1 a una base de datos limpia de Magento 2, que de manera resumida te comentare que lo que consigue esta herramienta es llevar la información más relevante de una plataforma como Magento que vienen siendo los datos de los clientes así como los usuarios, los grupos de los mismo así como de los productos, categorías de los productos incluso atributos y hasta los pedido existentes, hay algunas otras características como la mayoría de configuraciones que para aquellos que conocemos de la estructura de tablas recordaremos perfectamente la tabla de configuraciones llamada core_config_data, la herramienta tratara de llevarse el mayor número de registros de datos que puedan ser compatibles entre ambas estructuras, y todo esto con la finalidad de que el proceso de migración pueda ser menor, ya algunas de las características que no fueron integradas de una a otra versión y son importantes en Magento 2 tendremos que realizarlas manualmente y en algunos casos revisar a que corresponde ya que te sorprendería ver que muchas de las funcionalidades que eran tediosas y rudimentarias ahora en la nueva versión de Magento 2 no serán necesarias ni habrá necesidad de tomarlas en cuenta.
Requisitos de migración
Habiendo conseguido listar cada uno de los puntos definidos en la auditoria de código llegamos a la conclusión de que ya tendríamos una lista de requisitos de migración ya que si cumplimos con cada uno de los puntos especificados hasta este punto podríamos decir que podemos continuar con la migración a modo de resumen el listado final que deberíamos haber cumplido es el siguiente:
- Los cambios en el Core de Magento se han resuelto con módulos y extensiones personalizados.
- Cualquier lógica de negocio que se hubiera encontrado incrustada en platillas se ha resuelto enviándola a clases de bloques en comunicación con clases de controladores.
- Todas las extensiones de terceros que se encontraron y que se ha conseguido la nueva versión por parte del mismo proveedor.
- Todas las extensiones de terceros que no se pudo encontrar u obtener una versión compatible para Magento2 en donde se tuvo que desarrollar la actualización a la nueva versión por el equipo de desarrollo asignado para la migración.
- Todas las extensiones personalizadas que fueron solicitadas por el equipo de negocio de la tienda o bien requerimientos solicitados a medida en donde se ha logrado crear por el equipo de desarrollo asignado para la migración las versiones para Magento 2.
- Haber conseguido desinstalar por completo todas las extensiones que estaban deshabilitadas sin haber causado un mal funcionamiento en algún componente de la tienda incluso la propia tienda por completo.
- Haber localizado todo el JavaScript personalizado preparado y listo para poder llevarlo a la nueva tecnología de requireJS para Magento 2.
- Y finalmente la parte del tema si este pertenecía a un proveedor en particular haber conseguido la versión para Magento 2 o en todo caso si no existe tal versión o bien fue un tema a medida solicitado por parte de la tienda haber conseguido obtener un checklist, detalle y descripción del mismo así como tener la referencia de los CSS, tenerlos listos porque una vez se migre el proyecto se procederá a generar el TEMA desde la nueva instalación de Magento 2 recordar que como se mencionó en el artículo anterior ya es sencillo con la acción de migrar un tema desde el tema base de Magento blank.
Si todos y cada uno de los puntos anteriores están completos y validados podremos proseguir al siguiente paso.
Actualizar la versión actual de Magento 1
Tal vez este punto parezca no muy necesario pero es importante que garanticemos que lo que migraremos será una tienda fuera de anomalías y malas prácticas de desarrollo por parte de quienes desarrollaron la tienda que se está migrando, con esto no me quiero referir a que cualquier proyecto que este hecho en la versión 1 de Magento tenga que estar mal, he pasado por una buena cantidad de proyectos desde pequeñas hasta grandes magnitudes de desarrollo con cientos incluso miles de líneas de código y las malas prácticas siempre estuvieron presentes en casi el 99% de las implementaciones, incluso yo mismo cuando empecé en el desarrollo de Magento 1 y no conseguía aplicar el estándar de la definición de Magento trate de aplicar mi propia lógica de desarrollo claro está que esto con el tiempo hace caer el rendimiento de una plataforma como lo es Magento, gracias a renovada y revolucionara Magento 2 todo esas malas prácticas quedaran en el pasado claro que esto no estar exento de que no ocurra pero ahora los que nos encargamos de coordinar y dirigir el proyecto tenemos más opciones de detectar cualquier mala práctica así podremos estar a tiempo y forma de mejor un código de calidad.
Una vez se realice una actualización de la versión de Magento 1 que será migrada a la última versión y esto lo dejo libre a criterio de cada desarrolladora ya que si recordaremos había distintas formas de migrar una tienda de Magento 1 por ejemplo 1.8 a 1.9, normalmente podría realizarse desde el propio backEnd o bien muchos como yo lo realizaremos desde línea de comandos ejecutando el comando de instalación (install path_magento Mage_All_Latest –force) claro habiendo ejecutado los permisos de carpetas limpieza de cache y re indexado el proyecto se actualizara a la última versión disponible.
Si hasta aquí todo es un éxito estaremos garantizando anticipadamente que la migración también podrá ser un éxito.
Usando la herramienta de migración de datos de Magento
Así como lo he comentado en la introducción la herramienta de migración de datos que ha creado Magento y ha puesto a disposición de quienes necesiten migrar una tienda a la nueva versión 2 de Magento nos permitirá poder llevar los datos de una base de datos MySQL de una tienda que ya está en productivo a una base de datos MySQL de una tienda limpia en donde podremos reutilizar toda esa información de forma transparente y esto sí que es un gran aporte ya que nos permitirá evitar utilizar otras formas de migrar esos datos.
Lo primero que debemos saber es en donde se encuentra esta herramienta de migración pues nada más y nada menos que directamente en Github y esto pues para hacernos las cosas más sencillas simplemente revisando esta dirección https://github.com/magento/data-migration-tool aquí es en donde podremos encontrar la herramienta, es importante revisar en detalla el README.md ya que se van agregando algunas anotaciones que nos ayudaran aún más a poder migrar la información de forma más segura y garantizando mejora el rendimiento.
Es importante mencionar que al día de hoy las versiones que son compatibles para la migración son las siguientes:
Para la versión Magento Community Edition:
- 1.6.x
- 1.7.x
- 1.8.x
- 1.9.x
Para versión Magento Enterprise Edition:
- 1.11.x
- 1.12.x
- 1.13.x
- 1.14.x
Como podemos ver son casi todas las últimas versiones así que por ese lado no le veo problema alguno.
Preparativos para la migración
Voy a colocar un punto de los preparativos de migración ya que mencionare cual es la forma más cómoda de realizarlo ya que esto nos permitirá poder ejecutar las acciones con toda seguridad si afectar el actual proyecto de la tienda publica de producción.
Voy a listar una serie de pasos a seguir para conseguir estos preparativos:
- Montar de forma local un sistema de servidor tipo XAMPP, WAMP, WinNMP
- Realizar una instalación de Magento 1 con la tienda a migrar
- Realizar una instalación de Magento 2 limpia
- Asegurarse de contar con el lenguaje de PHP 7
- Instalar la herramienta de Migración de Datos en la instalación limpia de Magento 2
1.- Montar de forma local un sistema de servidor tipo XAMPP, WAMP, WinNMP
Lo que necesitamos es trabajar la migración de forma local para no interferir en el proyecto de la tienda que se encuentra en producción, esto da una mayor seguridad y la pauta de poder repetir el proceso de forma segura, así que recomiendo instalar ya sea en Window o Linux alguna de las herramientas existentes, en mi caso utilizo WinNMP para Windows ya que este me permite mantener distintos entornos con distintas versiones del lenguajes de programación de PHP para cumplir con los requisitos de cada versión tanto para Magento 1 que corre sobre 5.x así como Magento 2 que se sugiere correrlo con la versión 7.x
2.- Realizar una instalación de Magento 1 con la tienda a migrar
Una vez tendiendo ya instalado nuestra aplicación de emulación de ambientes de servidor vamos a proceder a instalarnos el proyecto de Magento 1 de forma local con los requerimientos necesarios para conseguir una misma replica de lo que está en producción, así que para este proceso es necesario conseguir en primera parte un acceso al repositorio del código fuente del proyecto para clonarlo de forma local o en su defecto un archivo comprimido del código fuente de todo el proyecto de producción para tenerlo de forma local, y en segunda parte una copia de la base de datos de producción para instalarla de forma local, todo esto con la finalidad de contar con una réplica de un ambiente de forma local de tal cual el proyecto público.
Magento 1 tiene como versión del lenguaje PHP 5.x si intentamos hacer una instalación con alguna de las herramientas recomendadas y esta contienen una versión más actualizada probablemente podrá tener problemas para levantar el entorno es por ello que yo utilizo la herramienta WinNMP ya que esta me permitirá elegir entre distintas versiones del lenguaje tanto 5 como 7.
Esta instalación nos permitirá emular como quedaría nuestra tienda de producción una vez aplicado toda la lista de requerimientos de instalación revisados con anterioridad.
3.- Realizar una instalación de Magento 2 limpia
Para realizar una instalación desde cero les recomiendo revisar el curso de Aprendiendo a instalar Magento 2 http://www.marcgento.com/producto/aprendiendo-a-instalar-magento-2/ les ayudara a realizar una instalación limpia desde cero, solo cabe mencionar que es importante que el sistema de cron de Magento 2 no este habilitado, si se está trabajando en Windows no habría problema ya que por defecto se encuentran inhabilitados, si se está trabajando con Linux es sencillo dar de baja la tabla de cron mediante línea de comandos para dejarlos inhabilitados solo los de Magento.
Esta instalación limpia de Magento 2 es la que necesitamos preparar para que esté lista y represente la nueva versión de Magento 2 ya migrada con todos los datos de la versión 1 de Magento.
3.1.- Asegurarse de contar con el lenguaje de PHP 7
Esta práctica podría realizarse de muchas formas incluso he visto que algunos desarrolladores realizan dos instalaciones con versiones distintas para trabajar en sus ambientes locales esto se queda a consideración de cada uno lo que si es que se estén realizando los procesos de forma local para evitar mover o trabajar directamente en una instancia en la nube e incluso en la misma tienda productiva, así con este esquema podremos realizar las pruebas necesarias incluso si en un punto falla por algún problema podremos volver a repetir el proceso sin problema alguno.
Yo utilizo la herramienta WinNMP que me permite distintos contenedores de distintos proyectos con lenguajes de PHP en versiones 5 y 7 y es muy sencillo encender y apagar uno u otro proyecto así podre estar revisando el tema de auditoria de código de la tienda actual así como la migración a la nueva plataforma de Magento.
4.- Instalar la herramienta de Migración de Datos en la instalación limpia de Magento 2
Finalmente hemos llegado a la parte de la instalación de la herramienta para lo cual es necesario tener lista la instalación limpia y en ejecución ya que aquí es donde se montara la herramienta que se encargara de mover los datos de la base de datos de la versión 1 a la nueva versión 2.
La herramienta se encuentra en la URL mencionada con anterioridad en la URL https://github.com/magento/data-migration-tool un proyecto en GitHub pero antes de descargar el proyecto es necesario validar la versión más reciente ya que esto es importante más adelante en la parte de migración de datos, para lo cual iremos a la URL de las reléase del proyecto en esta URLhttps://github.com/magento/data-migration-tool/releases cuando entremos a la liga nos mostrara la pana de la herramienta con la última versión disponible es importante que tomemos en cuenta ese numerito como el que se muestra a continuación:
Al momento de crear este articulo la última versión era la 2.3.4 probablemente este cambie con el tiempo una vez anotado y teniendo ese número clave ya podremos instalar el proyecto de la herramienta pero antes es importante verificar si contamos con la herramienta composer ya instalada de no ser así es necesario la instalemos antes para continuar con el siguiente comando. Y como ya que no es parte de este articulo hablar de composer solo comentar que es muy sencillo instalar esta aplicación simplemente ir a su página oficial descargar el paquete e instalarlo como cualquier aplicación de Windows si es Linux simplemente con una línea de comandos quedaría instalado.
Para poder descargar la herramienta y tenerla en la instalación limpia de Magento es importante ejecutar dos comandos en la ruta principal del proyecto que son los siguientes:
- composer config repositories.data-migration-tool git https://github.com/magento/data-migration-tool
- composer require magento/data-migration-tool:2.3.4
El primer comando lo único que le dice a composer es que asigne a su configuración un repositorio de descarga
El segundo comando es el que ya se encarga de descargar del repositorio ya definido el paquete de la herramienta específicamente con la última versión anteriormente descrita en este caso la 2.3.4
Hasta este punto es importante que sepas que necesitaras del lado de Magento las credenciales de descarga de paquetes desde los repositorios oficiales de Magento para lo cual es importante contar ya con una cuenta de acceso en el sitio de www.magento.com creo que todos los que hemos tenido contacto con Magento ya deberíamos conocer todo esto de las credenciales e incluso ya contar con un registro en la página oficial, si necesitas conocer más acerca de cómo obtener estas credenciales te invito a revisar las categorías del sitio seguramente encontraras algo al respecto.
Suponiendo que ya tenemos las credenciales de descarga de los repositorios de Magento lo que tendremos que hacer una vez ejecutado el segundo comando no pedirá las dos credenciales de autorización como usuario y contraseña así que vamos a colocarlos al finalizar el proceso ya se habrá descargado la herramienta en el proyecto limpio de Magento 2 ya estaría listo para poder utilizarlo.
Configurando la herramienta de Migración de Datos
Llegando a este punto ya son pocos los pasos que debemos hacer pero antes hay que validar el tema de versiones y más que nada aquí hay que identificar de cual a cual versión estamos pretendiendo migrar por ejemplo si la tienda de Magento 1 es la versión 1.9.4 community edition y la vamos a migrara a Magento 2 en la versión 2.3 comunity edition(Open source) tomar en cuenta que hoy día Magento a su nueva versión de CE le está llamando Open soucer entonces aquí vamos a definir una definición simbólica para identificar las versiones y esto sea más claro al final solo es para saber en qué carpeta de la herramienta de migración trabajar:
- Magento 1 Community Edition = ce
- Magento 1 Enterprise Edition = ee
- Magento 2 Community Edition = ce
- Magento 2 Enterprise Edition = ee
Ahora bien si hablamos de migrar un ce a ce entonces existirá una carpeta llamada ce-to-ce y dentro de esta carpeta se encontraran todas las versiones de la tienda a migrara por ejemplo en mi caso del ejercicio encontrare una carpeta 1.9.4.0 y ¿para que me sirve saber esto?, esto es muy importante porque aquí es a donde debemos ir a realizar las configuraciones de migración, y ¿en dónde se encuentran estas carpetas físicamente? Cuando realizamos la descarga de la herramienta de migración lo que realmente paso es que se descargaron todas las carpetas y archivos necesarios de la herramienta ubicadas en la ruta vendor/magento/data-migration-tool/ce-to-ce de nuestra instalación limpia de Magento 2, aquí es a donde tenemos que ir a hacer unas modificaciones y configuraciones a un par de archivos, y si te preguntas ¿Pero y que paso con la regla de oro de que el CORE no se toca? Pues aquí esta una excepción ya que para una migración será necesario mover un par de archivos de configuración pero velo de esta forma esta tarea solo te servirá para una migración al final de que logres realizar toda la migración esta herramienta debería quitarse simplemente eliminando la librería por completo no hay necesidad de que este ahí así que el CORE de Magento quedara tal cual sin cambio alguno.
Si miramos un poco el contendió de la carpeta mencionada nos daremos cuenta que en primera parte encontraremos una serie de archivos XML todo con la terminación .dist y esto es porque se han colocado ahí justo para poder utilizar, los que necesitemos migrar así como un par de carpetas pero en la que debemos centrarnos es en la carpeta de la versión en mi caso la 1.9.4.0 que ahí es donde se encontrara el archivo XML de configuración que necesitamos actualizar.
Al entrar a la carpeta nos encontraremos archivos XML como son config, map y map-tier-price, el archivo que necesitamos actualizar para poder ejecutar la migración de datos es el que tiene el nombre config así que es necesario o bien hacer una copia del mismo o cambiarle el nombre al existente de config.xml.dist a simplemente config.xml.
Una vez que se haya cambiado el nombre del archivo tenemos que actualizar el nuevo archivo config.xml, así que será necesario abrir el archivo con un editor de código la idea es localizar un par de etiquetas XML y agregar información.
El primer nodo que necesitamos encontrar será el nodo <source> este nodo es el encargado de definir los datos de la base de datos origen en este caso estaríamos hablando de la tienda de Magento 1, así que solo tendríamos que colocar los datos de conexión, cabe mencionar que dentro del nodo source se encuentran los atributos host que se refiere al servidor de la base de datos, name que hace referencia al nombre de la base de datos y user que indica al usuario de conexión de la base de datos, pero que pasa con la contraseña ya que como tal el atributo no está definido así que hay que agregar un atributo más que sería password y aquí es donde colocaríamos la contraseña de la base de datos.
Ahora pasemos a un siguiente nodo y este será el nodo <cryp_key /> y para poder configurar este nodo es importante localizar un archivo de la tienda de Magento 1 ubicado en la ruta apt/etc/loca.xml, vamos a tener que abrir este archivo o localizar el nodo <key> que se encontrara dentro de la etiqueta <config> seguido de <global> seguido de <crypt> y dentro estará el nodo <key> en el cual se encontrara una cadena alfanumérica compuesta por números y letras así que esta es la que necesitamos copiar y pegarla en el nodo <cryp_key /> de nuestra instalación de Magento 2.
Archivos XML de MAPEO de datos
Una vez tengamos la configuración lista con los dato actualizados en config.xml es tiempo de verificar con que archivos de mapeo contamos, estos archivos XML de mapeo son los que están a disposición para su probable migración de tablas del proyecto de Magento 1 a las tablas del proyecto de Magento 2, esto para que aun quede más claro se refiere a que mediante estos archivos XML de configuración se pueda estructurar la información de los datos existentes de la versión anterior de Magento 1 indicándole por ejemplo como están estructuradas las tablas del catálogo de productos cuáles son sus atributos y cuáles son sus probables entidades relación una vez con esa información la herramienta puede saber cómo mover y a donde los datos al nuevo modelo de datos de Magento 2.
Así que puede revisar cada uno de los archivos XML y validar cuales puedes migrar a la nueva plataforma, en estos archivos XML podríamos decir que se encuentran agrupados en:
- GENERAL: que serán todas la asignación de clases entre Magento 1 y Magento 2, todos los archivos de configuración, la definición de tablas de configuración de rutinas y una de las tablas importantes la core_config_data aquí es donde se encuentra en el XML settings.xml
- EAV: el modelo de datos eav entidad atributo valor aquí es donde se definirán la lista de atributos y la lista de tablas
- LOG: el mapeo de configuración de logs y lista de logs de la tablas
- MAP: archivos de mapeo
- CUSTOMER ATTRIBUTES: tablas de atributos y lista de tablas
- OTHERS: aquí se encuentran la definición de las tablas de las OrderGrids, SalesOrder todo lo referente a las órdenes.
Aquí voy a mencionar como deberías trabajar con este proceso y probablemente sea tedioso pero es importante que se intente llevar el mayor si no el total de datos a la nueva versión de datos de Magento, así que será necesario que renombres poco a poco cada uno de los grupos cambiando los nombres de los archivos XML quitando la terminación .dist, pero esto no lo es todo ya que aun cambiando el nombre la herramienta de migración no sabrá como se llama el nombre XML que deberá tomar en cuenta en su proceso de migración así que aparte de cambiar el nombre es importante que dentro del archivo config.xml en el nodo <options> se indique el nombre del archivo a mapear .XML debe coincidir exactamente para que la herramienta lo pueda localizar y tomarlo en cuenta.
Iniciando con la migración de datos
Una vez teniendo todo listo y configurado lo primero que debemos hacer es ejecutar una serie de comandos desde la ruta principal del proyecto de Magento 2, así que el primer comando a ejecuta es el siguiente:
php bin/magento migrate:settings <ruta del archivo XML de configuración que se configuro>
En mi caso el archivo que configure para la versión 1.9.4.0 estaría localizado en la ruta: vendor/magento/data-migration-tool/etc/ce-to-ce/1.9.4.0/config.xml así que el comando anterior se ejecutaría de la siguiente forma:
php bin/magento migrate:settings vendor/magento/data-migration-tool/etc/ce-to-ce/1.9.4.0/config.xml
Ahora bien al ejecutar este comando lo único que se está logrando llevar la configuración a la nueva versión de Magento 2.
Ahora pasemos a lo verdaderamente esperado de todo este articulo y es al último comando de migración del resto de datos a la nueva base de datos de Magento 2, que claro esta si no hubiéramos hecho todo lo anterior no podríamos ejecutar este último comando de migración para lo cual necesitamos ejecutar:
php bin/magento migrate:data <ruta del archivo XML de configuración que se configuro>
Como podemos ver es exactamente casi igual que el anterior a diferencia que en este estaríamos cambiando el comando settings por data así que quedaría de la siguiente forma:
php bin/magento migrate:data vendor/magento/data-migration-tool/etc/ce-to-ce/1.9.4.0/config.xml
Una vez ejecutado este comando aquí si deberíamos esperar un poco más de tiempo ya que este proceso se tardara con respecto a distintos factores como la cantidad de datos a migrar así como la velocidad de nuestro ambiente local.
Pues hasta aquí podríamos decir que ya terminamos una migración exitosa si al finalizar la ejecución del comando, esta nos indique que fue exitosa, podríamos ver que el resultado no sea el esperado pero aquí es donde podemos ir intentando configurar el mayor número de archivos de Mapeo para la importación de tablas datos y configuraciones.
Hay un punto más que quiero comentar y es que me ha pasado en proyecto que continúan sus flujos en producción así que en estos caso la base de datos no fue congelada desde que los equipos de migracio9n empezaron a trabajar en realizar todas las acciones para conseguir la migración de datos y durante ese periodo se fue actualizando la base de datos productiva, supongamos que ya contamos con una migración exitosa en el ambiente local y está ya está lista para que represente la nueva versión productiva del proyecto, pero hasta este punto ya hay nuevo datos en la anterior tienda Magento 1 en este caso no tendríamos que volver a ejecutar los comando de migración de configuración (settings) ni tampoco el de datos(data) para este caso solo bastaría con un comando que solo actualizara los nuevos datos que no están en la última versión ya migrada para lo cual existe el comando delta:
php bin/magento migrate:delta vendor/magento/data-migration-tool/etc/ce-to-ce/1.9.4.0/config.xml
Tal cual los comandos anteriores indicando la ruta del archivo XML de configuración este comando delta nos ayudara solo a migrar la diferencia de datos a la nueva versión migrada lista para producción en Magento 2.
Hasta aquí he finalizado el artículo de una migración exitosa de Magento 1 a Magento 2 espero te sirva de algo el artículo y si tienes algún comentario duda o sugerencia puedes enviármela desde este articulo o en el área de contacto seguramente algo por ahí se me fue o existan algunas técnicas más que podrían servirnos a muchos de nosotros.
No olvides de subscribirte a los boletines informativos para estar enterado de cuando publicare nuevos artículos.