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.