De una alerta crítica de PHP a varios días de actualizaciones, auditorías, migraciones y un rediseño que llevaba años pendiente.
Todo empezó con un aviso de seguridad de PHP.
El 21 de octubre de 2026 se publicaron correcciones para dos vulnerabilidades críticas que podían permitir la ejecución remota de código. De esas noticias que, cuando trabajas con sistemas, te hacen dejar lo que estás haciendo y preguntarte qué servicios tienes afectados.
En principio, la tarea parecía bastante concreta: revisar las versiones instaladas, determinar qué había que actualizar, aplicar las correcciones y comprobar que todo seguía funcionando.
Un trabajo de mantenimiento, vaya.
Tres días después había actualizado varios servicios, investigado posibles intentos de explotación, preparado copias de seguridad, migrado prácticamente desde cero una instalación antigua de Joomla y cambiado por completo el aspecto de mi página personal.
Supongo que es una forma de aprovechar el tiempo.
Primero, lo importante: la seguridad
Una vulnerabilidad crítica no significa automáticamente que un sistema haya sido comprometido. Significa que existe un riesgo que hay que evaluar y resolver.
Y, en este caso, el riesgo era suficientemente serio como para no dejarlo para otro día.
Lo primero fue identificar qué servicios utilizaban PHP y cuáles podían estar afectados. No bastaba con comprobar una versión en el servidor: tenía que revisar las aplicaciones, sus entornos de ejecución y las dependencias de cada una.
Además, algunas aplicaciones que utilizo no estaban alojadas donde recordaba. Nada especialmente sorprendente cuando llevas años administrando servicios y moviéndolos de un sitio a otro, pero sí una buena razón para comprobar las cosas en lugar de fiarse de la memoria.
Con el inventario aclarado, tocaba establecer prioridades.
Los servicios potencialmente vulnerables no podían seguir funcionando normalmente mientras decidía qué hacer con ellos. Algunos se detuvieron temporalmente y otros se actualizaron a versiones que incorporaban las correcciones de seguridad.
También revisé los registros disponibles buscando indicios de actividad sospechosa.
Como ocurre con prácticamente cualquier servicio expuesto a Internet, había peticiones automatizadas, intentos de localizar recursos y bastante ruido. No encontré evidencias de que se hubieran explotado las vulnerabilidades en los sistemas revisados.
Eso no demuestra que nunca haya ocurrido nada, pero sí permite distinguir entre un riesgo potencial y una intrusión confirmada. Son dos situaciones diferentes y conviene no confundirlas.
Actualizar es fácil. Conseguir que todo siga funcionando, no siempre.
Una vez identificado el problema, llegaba la parte aparentemente sencilla: actualizar.
En algunos servicios el proceso resultó relativamente directo. Preparar la actualización, aplicar los cambios, arrancar y verificar.
Pero una actualización no está terminada porque un contenedor vuelva a estar en ejecución.
Hay que comprobar que la aplicación responde, que sus componentes son compatibles, que los datos siguen estando disponibles y que las funciones principales continúan funcionando.
En una de las aplicaciones fue necesario realizar también una actualización importante de la propia plataforma. En otras hubo que revisar las versiones del entorno y las dependencias.
Todo esto llevó bastante más tiempo del que sugiere la frase «actualizar PHP».
Aun así, había una pieza que complicaba especialmente el trabajo: mi página personal.
El problema de una web que llevaba demasiado tiempo funcionando
Mi web llevaba muchos años publicada con Joomla.
Había sobrevivido a distintos servidores, cambios de infraestructura y varias etapas de mi vida profesional. Seguía teniendo artículos, proyectos, enlaces y documentación que quería conservar.
Lo que no había tenido era una renovación tecnológica en condiciones.
Cuando revisé la instalación, me encontré con una versión antigua de Joomla que no podía resolver simplemente cambiando PHP y reiniciando el servicio.
La distancia entre aquella instalación y las versiones actuales era demasiado grande.
En ese momento aparecieron dos posibilidades: intentar encadenar actualizaciones y resolver todas las incompatibilidades que fueran apareciendo, o aprovechar para construir una instalación nueva y trasladar únicamente lo que realmente merecía la pena conservar.
Elegí la segunda.
No porque fuera necesariamente menos trabajo, sino porque me permitía dejar atrás dependencias antiguas y recuperar el control sobre lo que estaba ejecutando.
Una migración que empezó por las copias de seguridad
Antes de tocar el contenido, hice copias de los archivos y de la base de datos original.
Y las comprobé.
Parece una obviedad, pero una copia de seguridad que nunca has verificado es, hasta cierto punto, un acto de fe.
Después llegó la parte de separar el contenido que quería conservar de toda la estructura que se había acumulado durante años.
Había cerca de un centenar de artículos, categorías, menús, contenido en varios idiomas y asociaciones entre las versiones en español e inglés.
También había extensiones y funcionalidades que habían tenido sentido en su momento, pero que ya no necesitaba.
Decidí conservar principalmente los artículos y su organización, y dejar atrás componentes antiguos de galerías, descargas y otras funcionalidades que no justificaban seguir arrastrando dependencias.
La idea era bastante sencilla: conservar la historia, no necesariamente toda la tecnología que la había acompañado.
Por supuesto, sencilla era la idea. La ejecución fue otra cosa.
Reconstruir una web no es copiar artículos
Con una instalación moderna de Joomla preparada, comenzó la reconstrucción.
Había que recuperar los contenidos, reorganizar categorías, establecer los menús, restaurar las asociaciones entre idiomas y comprobar que cada elemento terminaba apuntando al sitio correcto.
Durante el proceso aparecieron los problemas habituales de cualquier migración que involucra datos acumulados durante años.
Categorías que ya no existían, referencias que había que reinterpretar, menús que no se correspondían exactamente con la nueva estructura y componentes que necesitaban una solución distinta.
En algún momento también descubrí que podía tener la instalación funcionando perfectamente y, aun así, no tener correctamente instalados todos los archivos del idioma español.
Son esas pequeñas alegrías que impiden que una migración resulte aburrida.
El trabajo fue avanzando mediante comprobaciones sucesivas: contenido, enlaces, idiomas, menús, formularios y navegación.
Al terminar, la web volvía a estar publicada sobre una plataforma actual, con una estructura mucho más sencilla.
Y aquí podría haber terminado la historia.
Pero entonces cometí el error de mirar la portada.
«Ya que estamos...»
Con el problema de seguridad encaminado y la nueva instalación funcionando, me encontré mirando una web técnicamente renovada que seguía transmitiendo una imagen bastante antigua.
Los contenidos estaban ahí, pero la presentación ya no representaba demasiado bien lo que hago actualmente.
Mi actividad profesional ha cambiado mucho desde los primeros años de la página. También mis proyectos, mis intereses y la forma en que quiero compartir lo que voy construyendo.
Así que apareció la frase que tantas horas de trabajo ha provocado en la historia de la informática:
«Ya que estamos, podríamos mejorar esto».
Lo que comenzó como unos ajustes estéticos terminó convirtiéndose en un replanteamiento completo de la página.
Quería que dejara de parecer un antiguo portal personal con secciones acumuladas y pasara a ser un espacio más claro para presentar proyectos, compartir experiencias y recuperar artículos escritos a lo largo de los años.
Sin convertirlo necesariamente en un blog que me obligara a publicar todas las semanas.
Una web distinta, pero con la misma historia
La nueva portada presenta mejor lo que hago y lo que quiero contar.
Los proyectos tienen más protagonismo, especialmente Protos, el lenguaje de programación en el que llevo trabajando desde hace tiempo.
Los artículos y experiencias tienen ahora su propio espacio, el Cuaderno.
El currículum sigue estando disponible, pero ya no condiciona toda la estructura de la web. También he aprovechado para revisar cómo describo mi trayectoria profesional y reflejar mejor mi trabajo actual.
La navegación es más sencilla y las versiones en español e inglés están integradas de forma coherente.
También he renovado la identidad visual, recuperado mi imagen personal e incorporado un diseño que funciona tanto en modo claro como en modo oscuro.
Este último detalle, naturalmente, proporcionó su propia colección de pequeños problemas.
Porque conseguir que una página se vea bien en modo oscuro no consiste únicamente en cambiar el fondo a negro. Siempre aparece algún recuadro que conserva un color antiguo, algún texto que pierde contraste o una sección que parece haber decidido independizarse del resto del diseño.
El currículum, por ejemplo, todavía tenía alguna sorpresa reservada.
Muchas comprobaciones y bastante inteligencia artificial
Todo este proceso lo he realizado con ayuda intensiva de herramientas de inteligencia artificial.
No tiene demasiado sentido ocultarlo, especialmente cuando buena parte de mi trabajo actual consiste precisamente en experimentar con estas tecnologías.
Me han ayudado a investigar, revisar configuraciones, preparar procedimientos de migración, analizar resultados y desarrollar el nuevo diseño.
Pero el proceso también ha necesitado decisiones, supervisión y muchas verificaciones.
Una IA puede proponer una solución perfectamente razonable que no encaje con una instalación concreta. Puede interpretar mal un resultado, olvidar una particularidad o resolver un problema creando otro.
Y cuando estás trabajando con tus datos y tus servicios, la responsabilidad de comprobar las cosas sigue siendo tuya.
En realidad, ha sido una buena demostración de cómo me gusta utilizar estas herramientas: delegar parte del trabajo, mantener el criterio técnico y verificar los resultados.
También de que una conversación aparentemente sencilla puede acabar produciendo una cantidad sorprendente de trabajo.
Lo que empezó como una urgencia terminó siendo una oportunidad
Si no hubiera aparecido aquella alerta de PHP, probablemente mi web seguiría como estaba.
Habría continuado posponiendo la migración de Joomla y, seguramente, también el rediseño.
La urgencia me obligó a revisar el estado de varios servicios, actualizar componentes y replantear una instalación que llevaba demasiado tiempo sin recibir la atención que necesitaba.
Y una vez resuelta la parte más urgente, aproveché para hacer algo que tenía pendiente desde hacía años.
El resultado no ha sido solamente una web con un aspecto diferente.
He reducido dependencias antiguas, simplificado su mantenimiento, recuperado contenido histórico y conseguido una página que representa bastante mejor mis proyectos y mi actividad actual.
Todo ello en unos pocos días que empezaron con una alerta de seguridad y terminaron con una web prácticamente nueva.
No es exactamente lo que tenía previsto hacer aquella semana.
Pero, pensándolo bien, muchas de las cosas más interesantes que he aprendido trabajando con tecnología han empezado así: intentando resolver un problema y descubriendo varios más por el camino.
Al menos, esta vez, el resultado también se puede ver.