Actualización de la web del centro a Plone 5
La web del centro está basada en un fantástico gestor de contenidos llamado Plone. Comenzó a funcionar en algún momento de 2006 y desde entonces ha estado en marcha sirviendo nuestra web.
Naturalmente en todos estos años se han subido muchos contenidos a la web (unos 50GiB) y se ha ido actualizando con regularidad la versión de Plone. Pero actualizar el gestor de contenidos desde la versión 4 a la versión 5 no es un proceso automático, así que nuestra web se había quedado estancada en la versión 4 más tiempo de lo esperado.
Sin embargo la versión antigua de la web comenzaba a notar el paso del tiempo y en la nueva versión se puede disfrutar de:
- Un tema responsive que, por cierto, tiene por nombre Barceloneta.
- Una API REST que permite interactuar con el gestor de contenidos.
- Mejoras de rendimiento.
- Nuevas características como la capacidad de subir varias imágenes o ficheros de golpe.
Sobre el gestor de contenidos Plone
La pila de software que interviene en Plone es:
Componente | Comentario |
---|---|
Sistema operativo | Cualquier distribución de GNU/Linux actual y con soporte. |
Python | Puede ser el python del sistema o una versión específica instalada para ejecutar Zope. |
Zope | Es el servidor de aplicaciones sobre el que se ejecuta Plone. Implementa el acceso a la base de datos, el sistema de permisos, la autenticación de los usuarios, las funciones de copia de seguridad, etc... |
Plone | El propio gestor de contenidos que se ejecuta sobre Zope. |
Además hay que considerar los contenidos gestionados que se almacenan en la Zope Object Database (ZODB) —una base de datos orientada a objetos y nativa de Python— que acaban escritos en:
- En el fichero Data.fs (filestorage). Aquí se guardan todos los objetos de Plone (y el propio contenido) que no son ficheros binarios.
- En el directorio blobstorage (blobstorage). Por razones de rendimiento los ficheros binarios que se suben a Plone se guardan en un directorio separado o incluso en un almacén de objetos como Amazon S3.
Y por supuesto cualquier adaptación que se haya realizado a Plone. Desde modificaciones al tema utilizado hasta productos añadidos pasando por la configuración (usuarios, permisos, contenidos compartidos, flujo de trabajo utilizado, estado de los contenidos).
Sobre la versión de Plone 4 utilizada
La versión de Plone en la que nos habíamos quedado estancados tenía las siguientes características:
- Python 2.7.3
- Zope 2.13.20
- Plone 4.3.1 (4306)
Gestionando 1.8GiB de datos en filestorage y 50GiB de datos en blobstorage. 96 usuarios, varias modificaciones y un producto añadido (Products.Carousel).
Un camino para la migración de los contenidos
La actualización de una versión menor dentro de Plone 4 puede realizarse editanto el fichero buildout.cfg y regenerando la instalación de Plone con la nueva versión. Una vez hecho desde la interfaz de administración se podrán actualizar los contenidos.
Sin embargo este camino no sirve para pasar de un sitio Plone 4 a un Plone 5 debido en parte a que la representación de los contenidos en Plone 5 está basada en Dexterity mientras que en Plone 4 se utilizaban Archetypes. Así que deben exportarse los contenidos de la versión antigua e importarse en un Plone 5.
La manera oficial de realizar esta migración se apoya en dos productos:
- collective.jsonify: Para exportar los contenidos de la versión antigua de Plone a ficheros JSON.
- collective.transmogrifier: Para generar los contenidos Dexterity en la nueva versión.
Sin embargo de estas dos herramientas sólo he podido hacer funcionar collective.jsonify. Y no en la versión de Plone 4.3.1 pero sí en la última versión publicada de Plone 4 (en Plone 4.3.19). Después he tenido que escribir un pequeño script Python (jsonify2restapi que se puede encontrar en https://github.com/ElPuig/jsonify2restapi) que lee los ficheros y utiliza la API REST de Plone 5 para importarlos en el nuevo Plone.
Así los pasos para realizar la migración han sido:
- En el Plone 4.3.1 original realizar un backup con la herramienta propia de Plone zeocluster/bin/backup.
- Montar una nueva máquina con la última versión de Plone 4. Es decir con Plone 4.3.19.
- Añadir el produto Carousel a Plone 4.3.19 y volver a ejecutar el buildout.
- Llevar el backup desde Plone 4.3.1 a Plone 4.3.19
- Restaurar el backup en Plone 4.3.19 y utilizar la interfaz web de administración para actualizar el sitio.
- Instalar collective.jsonify en Plone 4.3.19
- Definir los métodos externos de collective.jsonify y exportar los contenidos a JSON
- Preparar una nueva instalación de Plone 5.2.1
- Utilizar jsonify2restapi para:
- Crear los usuarios de la web utilizando el script users.py
- Importar los contenidos utilizando el script jsonify2restapi.py
- Últimos retoques al sitio web en Plone 5
Nuevo servidor Plone 5
Finalmente el nuevo sitio web se está ejecutando sobre una MV con Ubuntu 18.04 LTS con las siguientes versiones de software:
- Plone 5.2.1 (5208)
- CMF 2.4.2
- Zope 4.1.3
- Python 3.6.9 (default, Nov 7 2019, 10:44:02) [GCC 8.3.0]
- PIL 6.2.1 (Pillow)
- WSGI: Activat
- Servidor: waitress 1.4.3
Un detalle feo ha sido comprobar, que igual que en la versión anterior, hay fugas de memoria que hacen que los procesos client de zeoserver cada vez consuman más memoria. De manera que he programado un reinicio diario de zeoserver en cron.