Commits

Un vídeo en la home, un sitemap caprichoso y un actualizador que ya no necesita

Un viernes de todo: el vídeo de presentación entra en la home, Google se

El viernes fue de esos días en que tocas de todo: vídeo de madrugada, actualizador por la mañana y un bloqueo de red por la tarde que no tenía nada que ver con el código.

El vídeo de presentación, por fin en la home

La portada de Web Base pedía a gritos el vídeo de presentación. Primero monté la estructura: un botón redondo con la duración aparece al terminar el hero y abre una tarjeta con el reproductor, con controles nativos del navegador y una portada provisional mientras no llegaba el archivo. Cuando llegó el vídeo real — cuadrado, de 296 píxeles —, el reproductor mantuvo ese formato y se ajusta a las pantallas pequeñas; el botón ahora muestra un triángulo de reproducción en lugar de ondas.

Un detalle que tenía ganas de resolver: no quiero los controles completos del navegador. Fuera volumen, pantalla completa y menú de opciones; se quedan la reproducción y la barra de avance. Todo verificado en el navegador en local; el despliegue ya vendrá.

Google y el sitemap: cuando el problema no está en tu código

Search Console marca el sitemap como «No se ha podido obtener». Producción, en cambio, devuelve el XML correcto: 79 URLs bien formadas, sin duplicados, con robots.txt y canónicas coherentes. Y la prueba en vivo de Google lo obtiene sin problemas. O sea: el archivo es bueno, pero el informe insiste en lo contrario.

Lo reenvié y el estado siguió igual. Lo dejo abierto a la espera de un nuevo intento de lectura; si persiste, tocará mirar qué recibió exactamente Google y los eventos de acceso en Cloudflare antes de cambiar ni una línea. De momento no he tocado el generador porque no hay ningún fallo reproducible.

El actualizador se actualiza solo

La promesa de Web Base es que el cliente solo pulsa botones. Pero desplegar los backups exigía actualizar el actualizador a mano, por SSH. «¿Esto no se podría evitar? Un cliente no va a ejecutar un comando en el servidor.» Toda la razón. Ahora el demonio — que corre como root en el host — lanza un proceso hijo independiente que actualiza el propio actualizador, sobrevive al reinicio de la unidad y hace la comprobación de salud y el rollback si algo va mal. Con una hora de espera entre intentos y un interruptor para desactivarlo.

La primera prueba real destapó dos fallos que los tests no veían. El módulo de protocolo tiene su propia lista de acciones permitidas, y las nuevas solo se habían añadido al demonio: las peticiones reales morían con «unsupported action», porque los tests llamaban al gestor directamente sin pasar por el protocolo. Y luego una más fina: la unidad de systemd usa un /tmp privado y el hijo extraía ahí la versión nueva para pasarla a Docker como bind mount; Docker la creaba en el /tmp real del host, que el hijo no ve. Extracción vacía. La solución: mover el staging a la carpeta de instalación, una ruta visible para todos.

Y aún una tercera, por la tarde: el hijo moría con la unidad que él mismo reiniciaba, porque abrir una sesión nueva no te saca del cgroup, el grupo de control donde systemd encierra el proceso. Ahora nace con systemd-run --scope y vive fuera. He limpiado también los staging huérfanos y el panel ya dice la verdad: «se reintentará a las HH:MM; no hace falta que hagas nada».

Backups completos: configurar, borrar y restaurar

La sección de backups había quedado a medias: solo un listado, sin formulario. Ahora hay configuración real (frecuencia, hora, retención, incluir medios), borrado de copias con doble validación del nombre y restauración con redes de seguridad por capas: antes de tocar nada hace una copia del estado actual — si falla, se reinstala sola —, pasa el contenido por las migraciones de esquema y reinicia la API. Para confirmar, hay que teclear el nombre del archivo. Esta ha sido, además, la primera release que se despliega sola desde el panel, sin SSH.

Un bloqueo de red que no es código

Cerré el día con el servidor doméstico sin salida por el puerto 443 hacia el catálogo de actualizaciones. Curioso: solo hacia esas dos IPs, solo en ese puerto. La web no se cae porque el túnel va por QUIC, que usa UDP. No es un problema de código: o el cortafuegos, o el router, o Cloudflare. Mientras se resuelve, el panel ya avisa cuando no hay contacto con el catálogo, en lugar de callarse y hacer creer que todo va bien.

Otras entradas del diario