Hugo

Ce n’est pas mon prénom, peut-être le votre, c’est surtout un framework pour construire des sites web, écrit en “Go” (le langage). Son principe est simple:

  • Vous créez votre arborescence de blog suivant certaines règles
  • Vous rédigez vos articles en Markdown
  • Vous pouvez visualiser votre blog en live (en local) avec hugo server
  • Une fois validé, vous pouvez générer le contenu statique du site avec hugo > génère un dossier Public qui contient le site

La sécurité avec Hugo

Du fait que le site soit statique, on réduit déjà drastiquement le nombre de failles exploitables: pas de base de données (MariaDB ou autre), XSS très limité…etc. N’oublions pas que RIEN n’est infaillible. Cependant, si vous jetez un oeil à ses différentes CVE, ça reste assez vide.

Avant de rendre le site statique, l’environnement de dev d’Hugo peut être vulnérable. La sécurité du runtime est détaillée dans ce très bon article de leur doc.

Rédaction du blog

J’utilise depuis de nombreuses années Visual Studio Code. Gratuit, performant et avec un lot de modules pratiques inégalable. Je synchronise VSC avec mon Github. Les données du blog sont synchronisées sur un repository privé et accessible seulement à mon compte.

L’avantage d’écrire des articles en Markdown, c’est que je peux écrire n’importe où, n’importe quand. C’est simplement un fichier syntaxé, on peut donc écrire dans n’importe quel éditeur de texte du moment qu’on connait les bases de sa syntaxe (très simple).

CI/CD avec Github

Github, mais d’autres gestionnaires Git aussi, propose des actions. Une action Github peut-être déclenchée lors d’un évènement particulier, défini dans un fichier de configuration. Il faut ensuite déclarer cette action dans le panneau de conf Github du repository.

Voici le code utilisé pour l’automatisation, c’est un fichier YAML:

name: Publish Website to Web Hosting
on:
  push:
    branches:
      - main
jobs:
  web-deploy:
    name: 🎉 Deploy
    runs-on: ubuntu-latest
    steps:
    - name: 🚚 Get latest code
      uses: actions/checkout@v2
    
    - name: 📂 Sync files
      uses: SamKirkland/FTP-Deploy-Action@4.3.0
      with:
        server: ${{ secrets.FTP_SERVER }}
        username: ${{ secrets.FTP_USERNAME }}
        password: ${{ secrets.FTP_PASSWORD }}
        local-dir: ./public/
        server-dir: ../
        exclude: |
          **/.git*
          **/.git*/**          

Je ne l’ai pas inventé évidemment, cela provient d’un tutoriel trouvable sur le net. Il existe certainement d’autres méthodes mais j’ai fait avec ce que mon hébergeur me propose: du FTP.

Vous aurez remarqué l’utilisation de variables secrets.FTP_SERVER, je vous le conseille fortement. Vous pouvez les utiliser dans plusieurs actions.

La publication du site

Lorsque je fais un push sur le github, l’action se déclenche et va pousser le contenu du dossier du repository via FTP et écraser le contenu précédent. Et voilà !

Rien de complexe en soit, rien de très élégant non plus, je cherchais surtout quelque chose de simple et dont je pouvais me servir partout, facilement. Et en prime, je me passe du traditionnel Wordpress, bien trop exploité à mon gout.

Quelques liens utiles