Hay algo especialmente incómodo en abrir el panel de tu wordpress y encontrarte, una vez mas, con el aviso de "hay 23 actualizaciones pendientes". Y no hablo de una semana concreta. Hablo de años.
El punto de partida
Este blog lleva vivo desde principios de los 2000. Ha pasado por varias etapas, primero fue un b2evolution, luego phpnuke (o al reves, ya no me acuerdo) y la última, durante muchísimo tiempo, WordPress. Funcionaba, sí. Pero para mantenerlo tuve que estar esclavizado durante años, casi casi se trataba de un trabajo a tiempo parcial que no me apetecía tener.
Los motivos eran múltiples, pero principalmente estos tres, y por este orden:

- La seguridad. WordPress es uno de los CMS gratis más usados, y eso lo convierte en el objetivo de toda clase de alimañas, de hecho me lo han llegado a petar y a meter un software de minería en mi servidor. Los logs de acceso mostraban continuamente intentos de acceso a
wp-login.php,xmlrpc.phpy aplugins que no tenía instalados. Y cuando el agujero estaba en uno de los plugins que sí usaba... tocaba restaurar backups, perder posts y un infierno que costaba un par de días al menos. - Las actualizaciones continuas. El nucleo de WP, suiis temas, los plugins, la versión de PHP... Cada
actualización era una pequeña ruleta rusa y un continuo dolor de cabeza, porque ya se sabe que si algo puede fallar ... falla. - Los recursos. PHP, la base de datos, las cachés para que el sitio no fuera lento y plugins para compensar la falta de cachés y cien mil cosas mas porque sin plugins no eres nada. Demasiada maquinaria para servir cuatro fotos y media docena de posts.
El objetivo
Algo sencillo de explicar en una frase: que el contenido sean ficheros y que la web sea solo la forma de enseñarlos. Formato md y a tomar por @|#€@
Nada de plugins de terceros, nada de una base de datos expuesta guardando mis posts, y la menor superficie posible para que alguien pueda llamar a la puerta. Chinos, rusos y Azerbaiyanos a tomar por culo todos ...
La migración
El primer paso fue sacar todo de WordPress y convertir cada una de los posts a Markdown con su front-matter (título, fecha, categorías, slug...). Este proceso llevó semanas, mas de veinte años de contenido: HTML incrustado, shortcodes que a Wordpress le encanta generar, pies de foto a la manera de WP y algunos heredados todavía de b2evo, imágenes en rutas imposibles... Tocó escribir scripts de limpieza y revisar muchas cosas a mano. Muchas de las que todavía estoy retocando ahora (como este mismo post que lleva un tiempo publicado y no se veía).
También me preocupaba no perder lo ganado con los años, así que mantuve algunas de las URLs históricas con sus redirecciones correspondientes. Lo último que quería era que Google se olvidara de mi, aunque tuve que redirigir algunas rutas de imágenes que tenía todavía contra Picasa 😱.
La arquitectura (lo justo y necesario para mostrar posts)
La web nueva está hecha con Next.js y la he construido a medida, con la ayuda de mis becarios. Lo importante es la tranquilidad, no la tecnología con la que se contruye:
- El principio es que el código y el contenido viven separados. Desplegar una versión nueva nunca toca los posts, y publicar un post nunca obliga a recompilar, ambas cosas son totalmente independientes.
- Los ficheros son el arbol de la vida. Cada post es un
.mdque puedo leer, copiar o versionar con herramientas de toda la vida, si es que no son mas que archivos de texto, de hecho al principio los editaba con Typora y con Obsidian, y ni tan mal. - Cada vez que toco algo, es una versión. Si me equivoco editando, vuelvo atrás, porque si, me equivoco bastante.
- Un panel de administración nuevo y a mi medida, con 4 cositas y pensado para no dar pistas. Además el panel de administración no está expuesto en un sitio donde todo el mundo ya sabe (Si, si ... puedes buscar en /admin a ver que pasa) 🤣.
¿Y que pasa con la seguridad?
No existe el sistema a prueba de balas (excepto el que está desconectado de internet, algo que no parece buena idea en un blog). Pero la diferencia es sustancial: ya no hay un montón de plugins que vigilar, ni rutas conocidas que todo el mundo sabe atacar. Los bots siguen buscando pero ahora se encuentran con un error 404.
Las dependencias siguen existiendo, claro, pero son pocas, las elijo yo y las actualizo cuando quiero, no cuando me obliga una alerta.
Conclusión
El servidor consume una parte mínima de lo que consumía antes, la web vuela en comparación con el burro que teníamos antes para entregar la página y, sobre todo, puedo pasarme semanas e incluso meses sin actualizar nada que no me llevo un disgusto y me puedo centrar en escribir en el blog en lugar de mantenerlo.
A veces, el mejor CMS es el que no necesitas.
