Computación

Mi experiencia con Hugo

Esto no pretende ser un tutorial de Hugo, lo digo de entrada para que no se hagan ilusiones.

Hace tiempo que deseaba dejar atrás Wordpress. Lo considero un dinosaurio. Muy bonito hoy en día, pero gigantesco. Estoy ya bastante cansado de lidiar con plugins con huecos de seguridad, con bases de datos pidiendo siempre más y más memoria, además de la memoria necesaria para operar el propio Wordpress.

Nginx me vino a solucionar temporalmente varios de los problemas. Por ejemplo, mantener en cache una copia de la página, ahorra mucho del trabajo de servidor. Con la correcta configuración, incluso pude detener los agujeros de seguridad. Teniendo en el servidor clientes con la mala maña de usar plugins dudosos o temas “gratis” pues evitar las irrupciones fue todo un logro.

Llevaba ya bastante tiempo buscando alternativas. Dado que la mayoría de las personas usan las páginas más por obligación que por genuina necesidad, entonces no llegan a utilizar cosas tan triviales como los comentarios. Más de uno me he conseguido que cree que una página en Facebook o Instagram significa tener presencia web. Ni hablar de los que creen que tener una cuenta de correos de Gmail da algún tipo de seriedad al negocio.

En mi caso, llevaba tiempo mirando la posibilidad de usar generadores estáticos. Miré entre todas las opciones y Hugo me pareció que había mantenido un desarrollo más o menos vigoroso. Quizás no tantas herramientas como otras alternativas pero definitivamente le podía dar una oportunidad.

La curva de aprendizaje no es especialmente fuerte. Dado que no sé nada de Go, algo que tengo pendiente, pues se hace ligeramente difícil el arranque. Otra cosa es que la documentación está en inglés y, si acaso, en chino. En español hay muy poca información. Pero el idioma no es problema para mí.

Tengo la costumbre de cambiar la tecnología de éste blog cada dos o tres años. Normalmente es solo una actualización cosmética para mantenerlo al día con las nuevas tendencias o tecnologías. También me sirve para probar cosas que después empleo en otros sitios.

Esta vez no quería únicamente cambiar la parte visual sino también aprovechar para decirle adiós a Wordpress. El único límite auto impuesto es que se mantuviera la funcionalidad del sitio lo más original posible.

La migración de los artículos de Wordpress fue relativamente sencilla. Lo único raro era que no importaba qué usara, siempre terminaban las imágenes borradas. Dado que uso Bitbucket para mantener un control de versionado pues devolver las imágenes no era un problema. Terminé haciendo una exportación con Wordpress y luego utilicé un programa que lee el XML resultante y lo convierte a un modelo digerible por Hugo.

La importación no fue perfecta. Para empezar, las imágenes no estaban, lo que supuso copiar los archivos a su sitio correcto. Luego, debido al tiempo y las diversas versiones de Wordpress usadas, había problemas con los artículos que me obligaron a revisarlos a mano uno por uno. La tarea fue bastante tediosa.

El siguiente paso, conseguir un tema que fuera similar a lo que quería, para así, ahorrarme algo de trabajo y familiarizarme con la disposición interna de Hugo. Hay una buena cantidad de temas así que conseguir lo necesario fue solo cuestión de probar unos pocos hasta que conseguí uno que me pareció aceptable como base.

La adaptación es relativamente fácil aunque perdí varios días debido a la falta de experiencia con la operación interna. Nada grave.

Ahora la parte fastidiosa. El sitio estaba completo en contenido, hasta ahí todo bien. Lo que le faltaba era funcionalidad. Cosas como un buscador o un sistema de comentarios no existen en Hugo de paquete.

Dado que no hay nada como una “inteligencia” tras la página y mucho menos una base de datos, la funcionalidad extra queda en manos de javascript o un servidor externo. Implementar un buscador puede ser hecho con javascript, existen múltiples soluciones, entre ellas Lunr. Pero todas ellas dependen de enviar al cliente la lista completa del texto del sitio para que realicen la búsqueda en la máquina del cliente.

No me pareció una solución aceptable. El archivo terminaba ocupando más de 3Mb con la consiguiente espera para descargarlo. Mi siguiente opción fue implementar un servidor de búsqueda en mi propio servidor. Existen muy variadas opciones aunque todas tienen algo en común, son excesivamente pesadas. Ponerlos a funcionar era peor que tener Wordpress instalado. Opción descartada.

Probé las opciones conocidas como SaaS, search as a service o búsqueda como un servicio en español. Me quedé con Algolia. Tiene un muy razonable plan gratuito y características más que suficientes para lo que queria. Solo tiene un gran inconveniente, la información que está disponible en la red, está bastante desactualizada y la mayoría de la recetas simplemente no funcionan. La documentación de Algolia es bastante extensa pero no incluye ejemplos para Hugo y es un poco caótica. Pasé un par de días lidiando con el buscador hasta conseguir algo que funcionara como Dios manda.

Siguiente paso, un sistema de comentarios. Descarté de plano cosas como Disqus. Nunca lo he usado y no creo que lo haga nunca. Busqué entre las opciones autogestionadas, es decir, algo para montar en mi servidor. Hay varias opciones disponibles. Las que me llamaron la atención fueron Isso y Remark. La primera es un poco vieja aunque totalmente funcional en las pruebas hice pero no tenía una característica básica que necesitaba. No se podía obtener una lista de los últimos comentarios. Remark sí tenía todo lo necesario. Solo que no estaba en español. Así pues, tuve que clonar el repositorio y hacerle las adaptaciones pertinentes para que funcionara a mi gusto.

En éste punto, decidí complicar las cosas y darle una vuelta de rosca extra. La página no estaría hospedada en mi servidor. Para eso elegí Netlify. Muy buenos comentarios sobre el sitio y ciertamente bastante fácil de usar y con muchas característica que casi hacen olvidar que uno no está en su patio. El plan gratuito tiene 100Mb de descargas al mes. Suficiente para un buen número de sitio incluído el mio. La parte buena es que tiene la capacidad de construir el sitio a partir de mi repositorio git. Simplemente hace uno un push y en unos minutos Netlify muestra los cambios. La parte mala, es que contabilizan el tiempo empleado en la construcción del sitio lo que supone un máximo de 300 minutos al mes. En mi caso cada reconstrucción lleva un poco más de 3 minutos, asi que tengo que administrarlos adecuadamente.

De todas formas, por si acaso, traspasar el dominio a mi propio servidor es una operación bastante sencilla y rapida.

Siguiente en la lista, tener un listado de las paginas más visitadas. Esto ya lo tenía con Wordpress, así que ya sabía cómo hacerlo. Pero en el caso de los sitios estáticos, otra vez, me consigo que eso no puede ser hecho en el servidor. Al menos no en Netlify. La solución es simple. Creé un programa en Python que pide la información a Google Analytics, la procesa y me coloca el resultado en un archivo que es procesado por la plantilla correspondiente de Hugo en la reconstrucción. Ejecuto el programa en mi máquina cada dos días y si hay algún cambio, cosa fácil de determinar con git, lo subo al repositorio y actualizo automáticamente la página. Recordemos los 300 minutos máximo por mes. Por eso hago la operación cada dos días.

Dejo hasta aquí el cuento para no hacerlo más largo de lo debido.

Mi conclusión. Me quedo con Hugo. El solo hecho de no tener huecos de seguridad debido a los múltiples agujeros abiertos por plugins de calidad desconocida es el principal motivo. Sí, es un poco molesto al empezar pero qué programa no lo és.

No me agrada de un todo la dependencia de servidores externos, en este caso de Algolia y Netlify, porque mañana pueden cambiar su política de precios o sencillamente desaparecer. Nunca se sabe.

Para novatos, no es sencillo pero tampoco requiere un esfuerzo tan grande si solo se desea un sitio sin tener servidor propio.

En lo personal me quedé muy satisfecho. Hasta otra.