Migración de un sitio web con Joomla 3.10.10 a Joomla 4.1.5 con la tienda Virtuemart
Para completar la migración deberás leer nuestro artículo: Configuración de Virtuemart después de una migración a Joomla 4.1.5
Normalmente lo que se pretende al hacer una actualización o migración del software de un sitio web que está funcionando correctamente es aprovechar las ventajas que ofrece la última versión del mismo, ya sean ventajas de seguridad, velocidad, etc., manteniendo el mayor número posible de datos del sitio antiguo, en el caso de un sitio web construido con Joomla: Usuarios, Menús, Módulos, Categorías, Artículos y cualquier otro componente que contenga particularmente datos propios, como es el caso de la tienda online Virtuemart que tiene datos sobre pedidos, facturas, pagos, etc.
Ya digo de antemano que no todo lo que tenemos en nuestro sitio web con la versión 3.10.10 de Joomla lo podremos migrar a Joomla 4. Habrá componentes, plugins y módulos de terceros que no sean compatibles con Joomla 4 y los tendremos que desinstalar antes de lanzar la migración que nos proporciona Joomla. Si tienen una versión para Joomla 4 los instalaremos después de la migración, si no tendremos que encontrar algo parecido que funcione con la última versión de Joomla.
En el caso particular de Virtuemart la migración conserva todas las tablas en su estado actual y posteriormente tendremos que actualizarlas con una nueva instalación de Virtuemart. En el momento de escribir este artículo hay un problema entre el enrutador de Joomla 4 y el enrutador de Virtuemart por lo que la tienda sólo funciona bien con el SEO de Virtuemart deshabilitado, es decir las URLs no tendrán la apariencia SEF de las de Joomla. Recomiendo esperar a hacer la migración hasta que este problema haya sido solucionado por los desarrolladores de Virtuemart.
Vamos a ver paso a paso y en detalle el procedimiento de migración que yo utilizo, que básicamente es emplear el componente de Actualización de Joomla con algunos añadidos que habrá que hacer manualmente. Lo que intentaremos es dejar el menor número posible de tablas en la base de datos para que la migración sea más limpia.
RECOMENDACION IMPRESCINDIBLE: Este proceso cambiará la mayoría de los archivos (núcleo de Joomla) y las tablas de la base de datos por lo que es necesario que se haga en un subdirectorio del sitio web o, preferiblemente en otro sitio web que se tenga para pruebas. Ni que decir tiene que de una u otra manera es absolutamente necesario realizar una copia de seguridad de los archivos y la base de datos. Hazlo ahora o no sigas leyendo.
Paso 1: Analizar las actualizaciones de terceros disponibles
Al abrir la Administración de nuestro sitio Joomla lo primero que hace el sistema es chequear si hay disponible alguna actualización y nos lo indica en la parte superior del panel y en el menú lateral de la izquierda en el apartado Mantenimiento. Esta es una imagen real:
Habrá algunas actualizaciones de terceros que sean compatibles con Joomla 4 y otras no. Para ver cuáles son vamos a lanzar el chequeador de migración de Joomla 3.10.10 que nos detallará la compatibilidad de todas ellas. Para ello vamos a Componentes → Actualización de Joomla!
Aquí abriremos las Opciones en el botón situado el la parte superior derecha:
Dentro del Servidor de actualizaciones tocaremos la flecha del menú desplegable y elegiremos Próximo Joomla y pincharemos en Guardar y cerrar:
Ahora se no abrirá una nueva página de Comprobación previa a la actualización para Joomla 4.1.5 donde el sistema nos dirá con detalle todas la incompatibilidades existentes:
Como vemos en la imagen el detalle puede ser exhaustivo, más si abrimos a la derecha la opción [Más detalles] que nos informará del Nombre de la extensión, su tipo, la versión instalada y si es compatible con Joomla 3.10.10 y Joomla 4.1.5. Dejo el principio de la lista:
Si tenemos un Joomla que hemos estado actualizando y trabajando con él desde hace años, nos sorprenderá ver que tenemos extensiones que ni siquiera sabíamos que estaban (en este caso en particular un migrador de Joomla 1.5 a Joomla 2.5 que se llama J2XML) y que podemos desinstalar perfectamente aún manteniendo la versión 3.1.10 porqué lo único que hacen es ocupar espacio en disco y añadir tablas a la base de datos.
En este caso de este sitio web en particular observamos que la mayoría de las extensiones con "Sin información de compatibilidad" son de Virtuemart, por lo que nos centraremos en ver si hay alguna actualización de Virtuemart que esté validada para Joomla 4.1.5. Para ello nos dirigimos a Extensiones → Actualizar
Vamos a centrarnos en las que aparecen de Virtuemart:
El núcleo de Virtuemart consta de dos extensiones fundamentales que son las que actualizan el resto de módulos y plugins. Estas son los componentes del Administrador, Virtuemart y VirtueMart AIO. Actualizaremos primero una y luego la otra. La primera (com_virtuemart) pasará de la versión 4.0.2 a la 4.0.4, una vez actualizada el sistema nos informa que se ha realizado con éxito:
y nos avisa que se han modificado algunas tablas:
Aviso
alterColumns xz3sd_virtuemart_customs from TEXT NOT NULL to custom_params TEXT AFTER `layout_pos`
alterTable CHANGE xz3sd_virtuemart_customs.custom_params query ALTER TABLE `xz3sd_virtuemart_customs` CHANGE COLUMN `custom_params` `custom_params` TEXT AFTER `layout_pos`
All countries are up to date
Esto es importante porque la versión 4.0.4 de Virtuemart ya es compatible con Joomla 4.x y cuando lancemos la migración las tablas ya estarán actualizadas.
Ahora actualizaremos la segunda extensión de Virtuemart, la AIO. El componente AIO (com_virtuemart_aio) se usa para instalar o actualizar de una sola vez todos los complementos y módulos esenciales para VirtueMart. Después de hacerlo nos aparece la siguiente información:
Aquí vemos que se han actualizado bastantes tablas de la base de datos y plugins. Si ahora nos vamos a Sistema → Panel de Control veremos que la mayoría de plugins de Virtuemart ya no necesitan actualización para Joomla 3.10.10 (es posible que tengáis que cerrar y volver a abrir el navegador para que se actualice el número de actualizaciones y también borrar la caché tanto del sitio como del administrador)
Si ahora pinchamos en el botón azul "Ver actualizaciones" comprobaremos que Virtuemart AIO ha actualizado la mayoría de los plugins (solo quedan VirtueMart - Payments, Klarna y VirtueMart - Payments, Klarna Checkout. Klarna es el método de pago más popular de la región nórdica, por lo que si no tenéis clientes en esos países lo mejor que podréis hacer es desinstalar estos dos plugins para que luego no den problemas al lanzar la actualización a Joomla 4.1.5).
En este caso de ejemplo, quedan también algunas extensiones de pago (DJ-MegaMenu Pro Package, GDPR y JSitemap Professional). Lo mejor es ir a la web del desarrollador para ver si tienen versiones para Joomla 4 y si no directamente desinstalarlas y posteriormente buscar extensiones compatibles con Jooma 4, que las hay. Yo en la migración que estoy realizando las he desinstalado.
Después de desinstalarlas, algunas extensiones dejan tablas en la base de datos, por lo que es recomendable revisar la base de datos, localizar las tablas y borrarlas manualmente.
Parte 2: Migración de Joomla 3.10.10 a Joomla 4.1.5
Bien, una vez desinstaladas todas esas extensiones nos vamos otra vez a Comprobación previa a la actualización para Joomla 4.1.5 y veremos que nos han quedado muchas menos:
Si en lugar de la pestaña "Comprobación previa a la actualización" nos vamos a la pestaña "Actualización en vivo" veremos las extensiones que verdaderamente causan conflictos (Los siguientes plugins pueden causar problemas durante la actualización):
Por lo que no vamos a Extensiones → Gestionar → Gestionar
Y hacemos una búsqueda de cada una, por ejemplo J2XML:
Como antes no había desinstalado el paquete del migrador J2XML nos aparece todo lo que está instalado de esta extensión:
Aquí podemos hacer dos cosas: desinstalar una a una empezando por los plugins, módulos (si existieran) y acabando por el paquete. O bien desinstalar directamente el paquete y ver si nos queda algo. Si realizamos la segunda opción, siempre en este caso, veremos que todavía queda algo:
Por lo que desinstalaremos una a una hasta que no quede nada.
En lo que respecta a System - KC VM Registration Redirect y VM Framework Loader during Plugin Updates, también las buscaremos en Extensiones → Gestionar y las desinstalaremos. Estas dos extensiones luego veremos que cuando actualicemos Virtuemart AIO ya desde Joomla 4.1.5 se nos instalarán de nuevo.
Si refrescamos la página y nos vamos de nuevo a la pestaña "Actualización en vivo" veremos que ya no hay nada incompatible:
Todavía nos queda algún paso más para asegurarnos que no nos de error al lanzar la actualización. En este caso del ejemplo vemos que, a parte de las extensiones de Virtuemart, existen algunas que pueden darnos problemas: la librería eshiol, el módulo BT Login, la plantilla xxxxxxx, un archivo GDPR Spanish translation que nos ha quedado después de desinstalar el componente GDPR, un plugin bastante antiguo de Virtuemart (System - ARTIO VM Invoice 3 Autorun), un archivo llamado file_fof30 y un plugin VM Custom - iStraxx Download simple. Buscaremos todos ellos en el Gestor de Extensiones y los desinstalaremos.
Mención a parte merece el archivo file_fof30 que es una librería que instala Akeeba para sus extensiones y que para desinstalarla completamente deberemos descargar un plugin que los hace por nosotros. Nos vamos a este artículo de Akeeba "Joomla 4 is around the corner" y hacia el final donde pone "Before upgrading an existing site to Joomla 4" en el párrafo:
We have create a special extension called Magic Eraser which attempts to automatically remove all remnants of our VERY old extensions which are now obsolete. The Magic Eraser can be downloaded from here.
Pinchamos en here y nos llevará a la página de Github desde la cual lo descargaremos:
Nos vamos a Extensiones → Instalar e instalaremos la extensión. Una vez instalada veremos que salta un error de instalación:
Pero en el mismo Aviso se nos indica que es normal el error y que está previsto que trabaje así:
Ignore cualquier aviso de Joomla (cosas sobre fondo amarillo) que vea ANTES o DESPUÉS de este mensaje aquí, incluido el mensaje "Instalación de extensión: falla de rutina de instalación personalizada". Son de esperar al retirar las sobras.
Ignore también el mensaje de error "Error al instalar el archivo" DESPUÉS de este mensaje. Esto también se espera. Magic Eraser en realidad no es una extensión instalable. Es solo un script de limpieza envuelto dentro de un paquete de extensión de Joomla. Después de que el script haya terminado de ejecutarse, le decimos a Joomla que cancele el intento de instalación. Esto hace que aparezca este error SIN causar ningún problema a su sitio. De hecho, es solo una forma inteligente de limpiar las extensiones obsoletas sin tener que instalar otra extensión que debe desinstalarse de inmediato. ¡Menos trabajo para ti!
Una vez desinstaladas todas las extensiones que os parezcan sospechosas (las del ejemplo que hemos mencionado arriba) y en particular cualquier plantilla de terceros o modificada manualmente, estaremos listos para lanzar la actualización a Joomla 4.1.5.
Yo recomiendo que se desinstalen TODAS las extensiones que aparecen en la pestaña "Comprobación previa a la actualización", si no nos dará problemas. Posiblemente haya algunas que no aparecen en el Gestor de Extensiones, puede ser que estén desactivadas o sean antiguas y hayan quedado ahí por alguna razón. Yo recomiendo que mediante PhpMyAdmin se haga una búsqueda en las tablas por el nombre de la extensión y se borren directamente esas tablas (por favor tener cuidado de que sean las adecuadas).
Parte 3: Lanzamiento de la actualización a Joomla 4.1.5
Debemos estar preparados para cualquier posible error, para ello antes de lanzar la migración vamos a descargarnos el último paquete de Joomla 4.1.5, lo descomprimiremos y lo tendremos preparado para luego y que si es necesario usaremos.
Ahora nos iremos de nuevo a la pestaña "Actualización en vivo" y picharemos en el botón azul "Instalar la actualización"
Si todo va bien aparecerá un mensaje de que Joomla se ha actualizado a la versión 4.1.5:
En algunos casos el progreso de la actualización se queda en el 90,2% dando posteriormente un mensaje de Gateway Timeout
The gateway did not receive a timely response from the upstream server or application.
Percent complete 90.2%
Bytes read 22873148
Bytes extracted 63672526
Files extracted 10942
Error 504
Gateway Timeout
The gateway did not receive a timely response from the upstream server or application.
Para solucionar esto deberás comprobar algunas configuraciones de tu servidor. En el caso de CentOS o Rocky Linux, en el archivo /etc/httpd/conf/httpd.conf subir el parámetro Timeout a un valor más alto, y en el archivo /etc/php.ini subir los valores de max_execution_time y max_input_time a valores bastante más altos (posteriormente podrás dejarlos como estaban) y reiniciar el servidor Apache: systemctl restart httpd.service
Por último quiero aclarar que al haber desinstalado casi todas las extensiones de terceros el sitio no es el mismo que el que teníamos con Joomla 3.10.10, tendremos que posteriormente ir restaurando todas estas extensiones... pero esto ya lo veremos en otro artículo. Esperemos que no os salga la "pantalla naranja de la muerte de Joomla"
Feliz migración a Joomla 4.1.5 !!!