Sito personale di Elia Argentieri. https://elinvention.ovh/

hugo.md 3.7KB

+++ date = “2017-03-12T01:47:14+01:00” title = “Hugo, generatore di siti statici scritto in Go” categorie = [“ElinvenSito”] [image] url = “https://gohugo.io/img/hugo.png” +++

Nel corso degli anni ho usato vari generatori di siti statici. Uno dei primi che ho provato fu il mitico Hakyll, visto che aveva una buona reputazione, purtroppo però al quei tempi non conoscevo il paradigma funzionale e Hakyll andava programmato in Haskell! Oltre al fatto che non ci capivo una mazza, una soluzione del genere è troppo complicata: usare Haskell per programmare il template del sito è quasi come sparare a una mosca con un cannone.

Dopodiché ho provato varie alternative, ognuna con i suoi difetti e nessuna che mi colpisse per funzionalità e semplicità, finché non capitai su Jekyll. Jekyll, scritto in Ruby (altro linguaggio sconosciuto…), sembrava quel che faceva al caso mio: semplice, ben documentato, estensibile (lo usa GitHub).

Dopo un po’ di tempo però, non ero più soddisfatto, così quando capitai sulla homepage di Nikola, mi misi subito all’opera. Nikola è un generatore scritto in Python, che supporta i template Jinja2 e Mako. Nikola è molto più organizzato di Jekyll, in generale lo reputo superiore e in questi 2 anni mi ha servito egregiamente.

Dopo circa un anno, rieccomi qua a cercare un altro generatore di siti statici. Stavolta i motivi che mi hanno portato a questa conclusione sono molteplici:

  • il pacchetto Debian di Nikola è abbandonato dal 2015
  • fare una virtualenv per poi installare l’ultima versione di Nikola con pip è noioso e sub-ottimale perché io con le virtualenv finisco sempre male e ogni volta vanno attivate e perché pip fa un po’ schifo
  • la velocità di Nikola è… maledettamente lento! Solo per mostrare l’aiuto ci vogliono circa 2 secondi sul mio pc e più di 5 secondi su OLinuXino! All’inizio questo non era un problema, ma lo è diventato man mano che il sito è cresciuto.

Quindi stavolta è il turno di Hugo, scritto in Go, supporta i template HTML Go, che sono simili a quelli jinja2.

Innanzitutto il gestore di pacchetti di Go è infinitamente migliore di pip e non rompe le scatole con le virtualenv. Dopo averlo installato, il primo test che ho fatto è stato questo:

$ time hugo version
Hugo Static Site Generator v0.20-DEV linux/amd64 BuildDate: 2017-03-10T19:15:18+01:00
hugo version  0,02s user 0,00s system 98% cpu 0,020 total

Direi che sembra SANO. Dopodiché ho messo insieme uno script python per convertire gli articoli del sito nel formato accettato da Hugo e ho generato il sito in circa 200 millisecondi!!! Approvato. Subito a smanettare con i template e sono riuscito a replicare il tema del vecchio sito molto facilmente e visto che c’ero ho fatto qualche aggiunta qua e l’ha. Il risultato non è male, credo che Hugo sia ancora più semplice di Nikola e che riesca a non farsi mancare niente.

Viste le prestazioni ho messo il repository git su OLinuXino e ci ho installato un hook di post-receive, che, dopo un push, genera il sito e lo rende subito disponibile. Questo è ciò che ho tirato fuori scopiazzando qua e la dalla rete:

#!/bin/sh

BARE=$HOME/elinvensito.git
WORK=$HOME/elinvensito

test -d $WORK || mkdir $WORK
git --git-dir=$BARE --work-tree=$WORK checkout -f

cd $WORK
git --git-dir=$BARE --work-tree=$WORK submodule update --init

rm public -rf
hugo

echo "Done!"
exit 0

La cartella di output public, è symlinkata su /srv/www, così molto comodamente, appena arriva un nuovo commit, la versione aggiornata è subito online.

Hugo è bello perché lo dico io. Toh. ;-)