Infrastructure Serverless – Partie 3/5 : Gestion de contenu (Patreon)
Content
<figure></figure><figure></figure><figure></figure>
Comme vous le savez sûrement, au fil du temps le blog korben.info est devenu un site conséquent et par son nombre de page que par sa sollicitation.Régulièrement, nous cherchons et mettons en place divers outils ou méthodes dans le but d’optimiser son exploitation, c’est à dire le rendre plus performant, plus rapide, mais aussi plus stable.Inévitablement il arrive que ce soit l’infrastructure elle-même qui nécessite une optimisation.
Ces derniers temps, nous avons étudié la possibilité d’une transition vers une nouvelle forme d’infrastructure. Cette forme, récemment popularisé sous le nom un peu buzzword de « serverless », propose de distinguer les différentes parties d’une structure web classique pour les placer dans des environnements qui leur sont adaptés et ainsi optimiser à chaque étape.
De manière générale, nous avons définis les objectifs avec les points suivants.
Optimiser le rendu web pour gagner en performances et en dynamisme ;
Bénéficier d’un dimensionnement dynamique pour absorber le trafic tout en économisant des ressources ;
Réduire la surface d’attaque pour maximiser sa sécurité ;
Favoriser la portabilité pour simplifier le changement de solution ou de prestataire.
Dans ce dossier, nous vous proposons d’explorer et de mettre en place un schéma d’infrastructure serverless, étape par étape.
Notre dossier sur l’infrastructure serverless
Infrastructure Serverless – Partie 1 : Générateur de site
Infrastructure Serverless – Partie 2 : Hébergement statique
Infrastructure Serverless – Partie 3 : Gestion de contenu (cet article)
Infrastructure Serverless – Partie 4 : Fonctions cloud (à venir)
Infrastructure Serverless – Partie 5 : Micro-services et conclusion (à venir)
Gestion de contenu
L’origine
Tout l’intérêt d’un site est son contenu (en principe).Le site statique que nous avons obtenu à la dernière étape offre un contenant parfait, mais jusque-là quasi vierge.
On pourrait envisager d’ajouter à la main notre contenu dans le template, mais ce serait franchement contre productif et plus vraiment un template. Donc on ne l’envisage pas et on se tourne plutôt vers un CMS.
Le principe
L’idée de base derrière un CMS tel que WordPress est de manipuler le texte, les images et les autres assets, simplement et efficacement pour à peu près n’importe quel utilisateur. Il permet généralement d’éditer le contenu du site via une interface web dédiée et facile d’utilisation.
Pour un blog, la mise en place d’un système pour la gestion de contenu est nécessaire.Mais plus précisément ici, ce que l’on cherche, c’est un CMS exclusivement utilisé pour le gestion éditoriale du contenu. Aucun traitement frontend pour un accès public au contenu n’est attendu.
Ce gestionnaire est donc « sans tête » (headless), dans la mesure où il ne propose que les interfaces utilisateur et programmatique pour les données, mais sans fournir le rendu public, lui géré par notre compilation (Partie 1 : Générateur de site).
La solution
Directement caractérisée par le CMS sélectionné, la nature du stockage des données est très variable, de la classique base de données aux fichiers Markdown dans un dépôt git, en passant par des solutions SaaS.
Une liste déjà bien fournie est disponible sur le site de Gatsby, mais il en existe une floppée, WordPress lui-même compris (on y reviendra en Partie 5 : Micro-services et conclusion).
Leur principale caractéristique par rapport aux CMS tout-en-un est donc de ne pas gérer eux même la compilation des pages publiques. Pour contrebalancer et s’intégrer dans notre flux de travail, ils auront en revanche les moyens de déclencher une compilation et un déploiement à chaque édition du contenu.
L’usage simple
A partir de notre base de la dernière fois, nous allons configurer sur Gatsby une source de contenu.
Pour rester simple, le système de fichier du dépôt sera utilisé avec des fichiers Markdown, mais à nouveau d’autres CMS compatibles sont possibles dont un grand nombre avec un vraie interface de gestion et de rédaction.
Dans notre configuration Gatsby, le fichier gatsby-config.js, on y ajoute la configuration de la source.
plugins: [ { resolve: "gatsby-source-filesystem", // <- pour traiter la source de données options: { name: "posts", path: "./src/posts/", // <- l'emplacement de notre source de données }, }, "gatsby-transformer-remark", // <- pour traiter le markdown ],
Un autre fichier JavaScript va servir de base pour le rendu, en gros comment intégrer les texte Markdown dans une structure HTML. C’est littéralement un template, ici basé sur la version suggérée en documentation.
a. D’abord on importe nos dépendances locales.
import React from "react"import { graphql } from "gatsby"
b. Ensuite on défini notre fonction template.
export default function Template({ data, // <- injecté par le requête pageQuery plus bas}) { const { markdownRemark } = data // <- contient les métadonnées et le corps const { frontmatter, html } = markdownRemark return (
{frontmatter.title}
// <- notre markdown )}c. Enfin, très important, notre requête de données. Notez qu’elle est défini comme une query GraphQL, donc comme une base de données, alors que derrière ce ne sont « que » des fichiers Markdown.C’est cette abstraction qu’apporte le plugin gatsby-source-filesystem mentionné plus haut.
export const pageQuery = graphql` query($id: String!) { markdownRemark(id: { eq: $id }) { html frontmatter { date(formatString: "MMMM DD, YYYY") slug title } } }`
Nous avons donc un fichier de templating défini.
Il ne nous reste plus qu’à rédiger un premier article en Markdown, dans /src/posts/.
---slug: "/my-first-post"date: "2021-12-15"title: "Mon tout premier article"---## Derrière le site statiqueHello world!
Le résultat
Une fois la compilation exécutée, pour Gatsby avec la commande gatsby build (voir Partie 1 : Générateur de site), nous avons obtenu le même site qu’en partie 2, mais avec une page en plus, compilée en HTML, respectant notre template et avec notre contenu. Ici la page est visible sur /my-first-post/.
La suite
Ça y est, nous y sommes, un site statique et pré-généré, hébergé statiquement et efficacement, avec un gestionnaire de contenu en parallèle pour le manipuler !
On pourrait s’en contenter et s’arreter là, mais il manque quand même la partie dynamique.Si elle ne peut pas être gérée par le CMS, et qu’il serait malvenu d’utiliser du JavaScript au niveau du navigateur (juste, non), on est vite un peu à l’étroit, comme certains le seraient avec un WordPress sans plugins.
C’est ici qu’interviennent les fonctions cloud, et c’est pour ça qu’on en discute dans notre prochaine partie !