Creando una web personal/profesional: generadores estáticos y otros

Saludos:

Como comenté el otro día he estado probando varias cosas para montar mi web personal/profesional.

Antes de nada voy a aclarar una cosa: si tu intención es solo crear un blog, entonces casi cualquier plataforma te vale: Jekyll, Pelican, Nikola, Hexo, ponga_aquí_el_suyo…

Si tu intención es otra cosa, la cosa cambia. No todas las plataformas pueden ser tan sencillas de poner en marcha.

Mi intención concreta es tener varias secciones donde describo mis actividades profesionales (ya sabéis, hay que publicitárse para conseguir trabajo) y un blog. De hecho así esta pensada mi actual e inacabada página con Drupal.

A este planteamiento se le sumó hace poco la idea de tener como extra una tienda-e (tengo algunas ideas que se pueden transformar en producto tangible) como complemento.

Como características me había fijado como importantes las siguientes:

  • Páginas estáticas sin posibilidades de comentarios.

  • Diario-e (blog) con comentarios

  • Tienda-e (como he aclarado arriba)

  • Gestión de escritura de artículos con Git (y del sitio completo).

  • Artículos en modo borrador.

  • Publicación automática

  • Escritura de artículos con Markdown

  • Resaltado/marcado de código

  • Escritura de matemáticas

  • Agrupación de series de artículos (para el que conozca Drupal: libros)

  • Cálculo del tiempo de lectura (es una chorrada, pero mola).

  • Exportación a PDF, Epub u otros.

  • Carrusel

  • Facilidad de despliegue en mi actual alojador.

  • Sistema de comentarios (para el blog)

  • Multiusuario

  • Posibilidad de encuestas.

Otras cuestiones a tener en cuenta eran la gestión de etiquetas y taxonomía, generación de RSS y sindicación de otros RSS, plantillas de temas y facilidad de adaptación y, bastante importante, tiempo de mantenimiento de todo.

Con estos factores a tener en cuenta decidí probar:

  1. Grav
  2. Jekyll
  3. Pelican
  4. Nikola
  5. Hexo

(Y también empecé con Metalsmith pero lo dejé por difícil.)

Drupal ya lo tenía probado, en su versión 7, así que ya tenía claro lo que se podía hacer con él y su coste.

Hecha esta previa -y larga- introducción he aquí mis conclusiones:

Grav

Es un sistema «híbrido», un CMS pero sin base de datos, necesita de PHP -es lo que menos me gusta- y poco más.

Mi experiencia ha sido muy buena con él, se pone en marcha rápido, las cosas funcionan, no hay muchos temas pero tienen bastante calidad, casi todos son adaptativos, la documentación es excelente…

No me cumplía todos los requisitos pero si los más importantes (uso de Git, despliegue fácil, resaltado de código, uso de matemáticas).

Importante para mi, cuenta con un sistema de comentarios propio (es lo que tiene ser dinámico) y un plugin para montar una tienda.

Como desventaja: bueno, al igual que los motores de generación de páginas estáticas, si quieres modificar el tema te tienes que mojar en el código. También es posible que el tiempo de mantenimiento sea algo superior a los otros.

Pelican

Pues ya dije sobre él aquí, no tengo mucho más que añadir.

Jekyll

Como con Pelican, ya dije todo lo que tenía que decir de él.

Nikola

En Nikola lo primero que te dice la documentación es que no uses el paquete de Debian/Ubuntu. A pesar de ser versiones próximas (7.6.4 vs 7.8.4) no se aconseja:

The Debian/Ubuntu package is broken and outdated. The Nikola developers strongly discourage using it and do not support this method of install until this issue is resolved — please install via pip instead.

La instalación vía plip es una… en fin, instala un montón de cosas que probablemente ya tengas instaladas (y después tendrás que estar preocupado de tenerlo todo al día), pero bueno. Como solución menor, hay contenedores y también esta empaquetado en Snap:

$ snap find nikola
Name    Version  Developer  Notes  Summary
nikola  7.8.1    ralsina    -      A modular, fast, simple, static website and blog generator

Nikola utiliza virtualenv, no he indagado mucho sobre el asunto pero si concierne a la seguridad, bienvenido.

Para empezar un sitio nuevo, tienes un asistente que lanzas con nikola init tu_sitio, te hace distintas preguntas: desde el idioma por defecto, hasta la integración del sistema de comentarios pasando por tu zona horaria. Mi impresión es que el asistente perfecto combinaría el de Pelican y el de Nikola, pero bueno, cualquiera de los dos esta bien.

El árbol del directorio es algo más complejo que el de Pelican pero se entiende bien.

Tras eso ya podemos lanzar nuestro sitio: nikola serve (-p xxxx, si no lo quieres en el 8000).

Las páginas se crean con una orden (nikola new_page o nikola new, según si es página o entrada del blog) y, al igual que otros, te rellena parte de las cabeceras. (No estoy seguro si es en este o en Pelican, si tienes la variable EDITOR activa te lanza el editor.)

Curiosidad sobre Nikola, utiliza por defecto ReStructuredText y, de hecho en algún punto de la documentación dice que si usas Markdown el tiempo de procesado va a aumentar mucho. De hecho, aquí la documentación no anda muy clara, para utilizar Markdown tienes que habilitarlo expresamente en la configuración:

POSTS = (
    ("posts/*.rst", "posts", "post.tmpl"),
    ("posts/*.md", "posts", "post.tmpl"),
    ("posts/*.txt", "posts", "post.tmpl"),
    ("posts/*.html", "posts", "post.tmpl"),
)
PAGES = (
    ("pages/*.rst", "pages", "story.tmpl"),
    ("pages/*.md", "pages", "story.tmpl"),
    ("pages/*.txt", "pages", "story.tmpl"),
    ("pages/*.html", "pages", "story.tmpl"),
)

Y hacerselo saber cuando lanza una nueva página o entrada con el modificador adecuado (-f markdown).

En cuanto a las características que buscaba… pues ahí se andan: el resaltado de código activado por defecto, los temas se cambian rápido (y se copian dentro del directorio del proyecto, al igual que los complementos), pude poner un Carrusel muy rápido (el mérito, más que de Nikola, es de Bootstrap), las matemáticas bien y sin mucho problema (aunque la documentación era un poco liosa en ese punto), otras cosas no: agrupación de series de artículos (hay un plugin pero sin documentación), importación de RSS (no parece funcionar).

Mi impresión es que su concepción es algo más moderna que la de Pelican, las cosas son algo más sencillas, su fichero de configuración esta profusamente documentado (demasiado incluso, diría). Los temas, tienen calidad pero están totalmente orientados hacia la creación de un blog, para cualquier otra cosa te toca trabajar. La documentación es buena pero a veces falta y hay complementos que no funcionan (o no he sabido ponerlos a funcionar).

Bien, pero…

Hexo

Hexo esta basado en Javascript y para instalarlo se utiliza npm, más o menos fácil. Por cierto hay contenedores preparados ya.

A mi con el npm de mi sistema (1.4.21) me tiró error, así que no me quedó más remedio que bajar nvm e instalar a partir de ahí. (Cualquiera sabe, eso del npm, el nvm y el node es un lío de cuidado.)

Tras instalar Hexo, lo básico, ya puedes iniciar un sitio nuevo, instalas más cosas y ponerlo a funcionar:

hexo init mi_sitio
cd mi_sitio
npm install
hexo generate
hexo server

El puerto por defecto creo que era el 4000 (Pelican y Nikola utilizan el 8000, en todos se puede cambiar.). No hace falta regenerar antes de «servir», lo hace todo de una vez si solo le pides que haga de servidor.

La configuración esta en _config.yml pero no puedes perder de vista el package.json.

Hexo no tiene asistente para ir más rápido con la configuración inicial.

La primera impresión que te produce Hexo es que esta cuidado por los diseñadores gráficos.

De entrada ya tiene resaltado de código activo por defecto y un tema adaptativo.

Los temas se integran dentro de la estructura del directorio y, por lo tanto, lo puedes controlar todo con Git.

En Hexo, mi sensación es que falta documentación, por ejemplo no aparece en ningún sitio como crear una página estática, ya sea la portada o cualquier otra. De hecho parece que a Hexo eso no le preocupa y lo deja en mano de las plantillas, si el tema que eliges no tiene, te toca pringar. Sin embargo, si existe un comando específico para crear páginas hexo new page título y entradas para el blog hexo new título, que no es que sirvan para mucho (te ponen la cabecera, pero solo el título y la fecha), pero bueno.

Del resto de características que buscaba, se reparte a partes iguales, las matemáticas y el cálculo del tiempo de lectura salen andando sin problemas pero otras cosas necesitan trabajo.

En general, mi percepción es que le falta algo de recorrido a este Hexo, esta totalmente orientado a crear un blog, si te sales de ahí, empiezan los problemas. Adolece de falta de algo de documentación y hay cosas que no están muy bien explicadas.

En el lado bueno, cambiar de tema es muy fácil, los temas, aunque todos parecidos, están currados y son todos adaptativos. El archivo de configuración se entiende bastante y, a pesar de no tener asistente, se sobrelleva bien.

Problemas comunes a los generadores de páginas estáticas

Los generadores de páginas estáticas tienen, básicamente, dos problemas importantes para lo que yo estoy buscando:

a) Los comentarios.
b) La tienda.

Como bien sabéis los que me conocéis, intento no utilizar herramientas de terceros para «mis cosas» así que integrar los comentarios con Disqus, la gran G u otros no era algo que me plantease. Las opciones restantes son otros sistemas de comentarios externos: Isuu, Hashover u otros, incluyendo Discourse.

El problema de eso es que tienes que mantenerlo, por lo tanto el trabajo que te quitan las páginas estáticas te lo dan estos bichos. Aparte esta otro problema, que no sabes si lo puedes poner a funcionar en tu alojador. Isuu, p. ej., necesita de Python y algo más (creo recordar), no creo que se pueda poner a funcionar en cualquier sitio. Discourse corre en su propio contenedor. No añado más.

Pelican (y Nikola, creo) cuenta con un sistema propio de comentarios, pero, sin parecer supercomplejo de poner en marcha, tampoco parece precisamente superfácil. Además, es un sistema de comentarios que se basa en el correo-e, es decir al final tú usuario utiliza una herramienta de correo-e para enviar el comentario. Después tienes que procesarlo (de forma automática o manual) e incorporarlo a la web. No parece la forma ideal.

Hay otras opciones también, pero algunas son hasta rocambolescas, como p. ej. para aquellos que se alojen en Github que los comentarios lleguen por «petición de subida» (ese pull request).

No, el sistema de comentarios en un sitio estático, si no tienes una máquina completa a tú disposición, es complejo.

Lo mismo pasa con la tienda-e. Jekyll tiene algo medio implementado (Jekyll-store) pero el resto… En cualquier caso sobre esto tengo algunas cuestiones que plantearé en un hilo nuevo. Resumiendo mucho, no hay manera fácil de integrar una tienda-e en tú sitio de páginas estáticas.

Conclusiones y decisión

Mi decisión final es quedarme con Grav, a pesar de tener el «problema» del PHP su funcionamiento es casi el de un motor de generación de páginas estáticas. Todo esta muy cuidado, documentación excelente y se maneja con Git, que era, para mi, muy cómodo.

Si tuviera que quedarme con un motor de páginas estáticas, me quedaría con Pelican, a pesar de que Nikola me gustó bastante pero le noto carencias y ciertos problemas que con Pelican no vi. A Hexo creo que le falta algo de recorrido.

Posiblemente si contara con una máquina completa y no solo el alojamiento web, mi decisión sería otra pero, en mis actuales circunstancias, esta es mi elección.

Y esto es todo, perdón por el ladrillazo.

Salud y Revolución.

Lobo.

1 me gusta

Te recomiendo Wordpress, es la más sencilla de utilizar y la más completa, ofrece muchas cosas, tiene una comunidad muy rande y activa, un monton de plugins y complementos. También si lo enfocas más a tienda Prestashop. yo he hecho estás web en un periquete:

[pluto75] pluto75 http://foro.hacklabalmeria.net/users/pluto75
2 Mayo

Te recomiendo Wordpress, es la más sencilla de utilizar y la más
completa,

Te agradezco la intención pero Wordpress esta desestimada por la misma
razón que Drupal.

(Y puestos a meterse en esas harinas prefiero Drupal a Wordpress.)

Salud y Revolución.

Lobo.