Hugo e Codeberg Pages: workflow semplice con Git
Da qualche tempo cercavo un workflow semplice e leggero per pubblicare un sito statico generato con Hugo. Dopo varie prove ho deciso di utilizzare Codeberg Pages.
L’obiettivo era avere:
- repository Git con tutti i sorgenti del sito;
- deploy semplice;
- nessuna dipendenza da servizi proprietari;
- possibilità di usare un dominio personale;
- workflow completamente locale.
Perché Codeberg
Codeberg offre hosting Git basato su Forgejo e permette di pubblicare siti statici tramite Codeberg Pages.
Per un sito Hugo è una soluzione molto comoda:
- semplice;
- leggera;
- compatibile con Git;
- orientata al software libero.
Struttura del repository
Utilizzo due branch:
main -> sorgenti Hugo
pages -> sito statico generato
Il branch main contiene:
content/
layouts/
themes/
static/
hugo.toml
Il branch pages contiene invece solo il sito statico già generato:
index.html
css/
posts/
images/
...
Codeberg Pages pubblica direttamente il contenuto del branch pages.
Configurazione di Hugo
Nel file hugo.toml imposto:
baseURL = "https://alanleoni.ch/"
Creazione del branch pages
Il branch pages va creato una sola volta.
Genero il sito:
hugo --minify
Creo il branch orfano:
git switch --orphan pages
Rimuovo tutto:
git rm -rf .
Copio il contenuto della directory public/ nella root del branch:
cp -r public/* .
Commit iniziale:
git add .
git commit -m "Initial Pages branch"
git push -u origin pages
A questo punto il branch pages contiene soltanto il sito statico.
Ignorare la directory public
Sul branch main conviene ignorare public/.
Nel file .gitignore:
public/
Poi:
git rm -r --cached public
e commit.
Script di deploy
Per automatizzare il deploy utilizzo questo semplice script Bash.
Creo deploy.sh nella root del repository:
#!/usr/bin/env bash
set -e
git switch main
hugo --minify
rm -rf /tmp/hugo-public
cp -r public /tmp/hugo-public
git switch pages
find . -maxdepth 1 ! -name "." ! -name ".git" -exec rm -rf {} \;
cp -r /tmp/hugo-public/* .
git add .
git commit -m "Update site" || true
git push
git switch main
Rendo lo script eseguibile:
chmod +x deploy.sh
Da questo momento il deploy si riduce a:
./deploy.sh
Lo script:
- genera il sito Hugo;
- aggiorna il branch
pages; - esegue automaticamente il push;
- torna al branch
main.
Dominio personale
Per utilizzare un dominio personalizzato con Codeberg Pages conviene creare il file .domains all’interno della directory static/ del progetto Hugo.
Nel mio caso:
static/.domains```
Poi bisogna configurare i DNS.
Per `www`:
```text
CNAME www alanleoni.codeberg.page.
Per il dominio principale:
A @ 217.197.84.141
AAAA @ 2a0a:4580:103f:c0de::2
Considerazioni finali
Questo workflow è volutamente semplice.
Non utilizzo:
- CI/CD;
- GitHub Actions;
- Forgejo Actions.
Tutto il deploy avviene localmente tramite un semplice script Bash.
Per un piccolo sito personale generato con Hugo trovo che sia una soluzione:
- leggera;
- trasparente;
- affidabile;
- molto in linea con la filosofia Unix.