02/06/2021: Migrer Wordpress vers Grav

wp to grav

La domination de Wordpress remise en cause

WordPress, tout le monde connaît, même les non-professionnels qui pensent que c'est une plate-forme de création (depuis wordpress.com). Ce CMS (Content Management System) s'est imposé de façon magistrale depuis 10 ans sur internet, quelque chose que j'avais déjà pressenti après l'avoir testé en "early bird" en 2004. A tel point qu'ajourd'hui cette architecture propulse 2/3 des sites internets à traverse le monde. Vous avez bien lu. Une telle prééminence s'explique par de nombreuses qualités qu'on ne listera pas ici. Reste que ce succés, comme tout succés d'ailleurs, à un revers, et pas des moindres:

Wordpress est aussi le CMS le plus connu des hackers. Ils en connaissent les moindres failles, ce qui explique ses nombreuses attaques en termes statistiques par rapport au reste d'internet. La moindre faille entre deux plugins est exploitée sans vergogne, et gare au site non mis à jour !

Ce qui explique du côté des dev. de wordpress une course aux armements permanente, et les incessantes mises à jour du CMS. Or, ces dernières ne sont pas sans causer des problèmes, notamment du fait que le mariage arrangé de nombreuses extensions (plugins), compatibilités hasardeuses. En clair, le site n'est pas à l'abri de problèmes suit à une mise à jour du coeur de wordpress ou d'autres plugins. Souvent le résultat est ...une page blanche. Sur un site à gros traffic, panique garantie.

Le second problème, c'est les performances, en particulier avec un site important, entre une base de données considérable et les commentaires associées. Une grande base de données prends du temps a être parsée et le résultat c'est un site plus lent; tout simplement. Il arrive un moment où les performances sont tellement dégradées qu'il faut passer sur un serveur plus performant et donc plus coûteux.

Downgrade ou upgrade ? Et c'est quoi Grav d'abord ?

Les alternatives à wordpress:

Soyons clair ici, wordpress est le représentant le plus éminent d'une classe de CMS à architecture "php-mysql". La base structurale est en php, et les données sont stockées sur une base en SQl. MySql est le manager de la base. Les premiers sites étaient codés en html, et un site simple peut tenir en une page. Le php permet de séparer les différents eléments du site en portions non suceptible de changements fréquents et répétés, comme le header (en-tête), le menu, le footer (pied de page), les colonnes, etc. Le php permet de "monter" un site pour un navigateur qui le restiture ensuite en html pour le visiteur.

C'est une manière de faire qui a conquis internet, littéralement, et règne en maître depuis 20 ans. Des sites e-commerce aux forums en passant par les blogs et sites institutionnels, le paysage de la bulle internet a été façonnée par cette architecture dite "dynamique". Pourtant il existe des alternatives:

1-La Génération de pages HTML statiques à l'aide de générateurs de sites statiques*
2-La Génération dynamique à partir de fichiers texte à l'aide de CMS de fichiers plats
* Logiciels générateurs de page html, comme word, adobe dreamwever, spark...
Pour le second cas, il s'agit des CMS dits en "flat-file", la plupart utilisant du XML pour stocker leurs données, mais pas que.

GRAV comme alternative

Parmi les "flat file" il y en a une qui assurément sort du lot. Il est même décrit depuis ces cinq dernièes années comme le "wordpress plat":
  • Leader du «CMS open source de fichiers plats»
  • Utilise Markdown et Twig pour la mise en page, et le PHP
  • Installation facile et rapide
  • Léger et sécurisé
  • Communauté active et prolifique
Pour en savoir plus sur le CMS flat file superstar: GRAV en détail. Cerise sur le gâteau, Il existe une méthode d'exportation WordPress pour grav.
Il y à un nombre de questions à se poser pour envisager une telle migration:

Avez vous le temps d'effectuer cette migration ?

      Cela semble évident, mais pour un site à 100+ pages, il y a fort à parier qu'il faudra un peu de mise en forme pour chacune pour retrouver l'aspect désiré.
      Il faudra en plus refaire/adapter la charte graphique sur un thème existant GRAV.
      Il faudra aussi recréér les fonctionnalités utilisée via des plugins wordpress qui n'existent pas forcément
      Il faudra aussi porter tous les commentaires à la main le cas échéant
      Enfin il faudra vérifier que tous fonctionne niveau référencement: Avoir les mêmes URL qu'avant est impératif !
Bref, migrer wordpress sur un autre site php-mysql comme drupal (plus puissant que wordpress) semble plus naturel. C'est une méthode possible, mais c'est aussi une architecture connue ancienne avec une base de donnés (donc doublement vulnérable), et cela ne règle pas forcement le problème. Au final il y a des pièges dans chaque CMS. Le tout est d'avoir une bonne méthodologie pour cette migration et d'en être convaincu, avoir au moins une bonne semaine devant soi (un mois serait plus raisonnable en y travaillant épisodiquement), avec un site de test à part.

Méthodologie de la migration

1. Exportation depuis WordPress

Il y à des annés, le plugin WordPress wp2grav fut créé et abandonné, mais il est toujours référencé sur GitHub. Les fichiers Markdown de la base se retrouvent sous /wp-content/uploads/wp2grav/export. Ils peuvent donc être copiés dans la structure du répertoire grav du nouveau site. Il existe aussi WordPress-To-Markdown, mais il n'est pas spécialisé Grav.
Limitations trouvées: -Catégories et balises à retravailler -Images intégrées à l'ancienne URL absolue de WordPress à copier manuellement dans leurs répertoire respectif et liées de manière relative dans les pages. -Certains liens entre pages utilisant des URL absolues doivent être corrigés manuellement. -Le marqueur "Continuer la lecture" doit être inséré manuellement dans les pages Grav, aved le Résumé et le Séparateur. La structure de base des pages est donc transférable, maisil y à du travail, toutefois cela permet le "gran ménage de printemps" tout webmaster devrait faire: Mieux ranger les pages, corriger des liens brisés, supprimer les éléments inutiles et contenus pauvres, etc.

2. Ajuster le thème CSS

Les styles de thème doivent écraser ceux dand user\themes\antimater\css\custom.css, avec son CSS personnalisé worpdress, mais il est bien sûr recommandé de dériver un modèle enfant, une bonne pratique de webmaster en cas de mise à jour de thème. Il faudra aussi déménager le favicon sur ce thème enfant, comme user\themes\montheme\images\favicon.png. Pour voir les changements il faudra aussi forcer la main du navigateur utilisé.

3. Ajuster les paramètres du blog

Les paramètres de base de GRAV sont définis dans system/config/system.yaml et la configuration du site system/config/site.yaml. La documentation permet d'en savoir plus. Il faidra vérifier aussi les paramètres de langue pour un site multilingue. Des modifications sont à prévoir dans system\config\site.yaml en éditant le "default_lang:" suivi de la langue désirée (ex. "fr"). Dans system.yaml il faudra préciser:
pris en charge: [fr]
include_default_lang: false

4. Migration des Images

-Le thème par défaut (antimatter) affiche automatiquement la première image du dossier de page en tant qu'image d'en-tête, mail elle peut être désactivée avec "header_image: false" dans le fichier .md de la page. -Les images peuvent être stockées sous utilisateur/pages/images ou bien utilisateur/images à la place. -Après l'export WordPress, les images apparaissent en "texte courant" et doivent être repositionnées en CSS et un affichage passant par des paramètres d'URL.

Commandes Markdown pour les images:

! [monimage] (../../ images / monimage.jpg? Classes = right)
! [monimage] (../../ images / monimage.jpg? Classes = caption, figure-right "blabla")
! [monimage] (../../ images / monimage.jpg? Lightbox = 800 & resize = 200)
! [monimage] (../../ images / monimage.jpg? Lightbox = 800 & resize = 200 & classes = caption, figure-right "blabla")
! [monimage] (../../ images / monimage.jpg? Lightbox = 800 & resize = 200 & classes = right "blabla")


Des plugins grav vont être nécessaires pour réafficher les images comme sous wordpress. Note: La mise en cache réellement intelligente de grav peut interférer, mais aide aussi à vider les répertoires de cache. (Ou avec une commande bin/grav clearcache --images-only). Ces caches peuvent être supprimés aussi via le tableau de bord d'administration.

5. Les plugins

Evidemment les plugins wordpress n'existent pas forcément sui wordpress, le choix risque d'être nettement plus réduit. Ces plugins sont utiles pour retrouver l'ensemble des fonctionnalités usuelles:
  • Légendes des images
  • Lightbox: featherlight
  • Formulaire simple
  • Consentement aux cookies: plugin cookieconsent
  • Google Analytics (sans désactivation).
Pour ne savoir plus: https://getgrav.org/downloads/plugins.

6. Un peu plus de possibilités

Incidemment, plus de choses sont possible dans Markdown comparé au html de wordpress:
      Le HTML peut être utilisé directement, par exemple <*div style="clear: both;"*> <*/div*>
      Markdown Extra doit être activé sous les pages
      Les commandes twig et l'intégration d'autres modèles twig sont possibles si activés
      Les Plugins pour snippets PHP et shortcode comme dans WordPress sont utilisables.

7. Problèmes de serveur et administation

La documentation officielle GRAV donne des informations sur le serveur à utiliser lors des Dépannages: Pour un accès en écriture sur le serveur la commande suivante est chmod g+w assets/sauvegarde/cache/images/logs/tmp/user/data/ Le "résultat du test" des plug-in une fois affichée les poroblèms peuvent être résolus plus facilement. Les outil d'administration uniquement en cours de développement pour mettre à jour des plugins ou créer et modifier des pages sont disponibles. Pour une configuration différente il est possible de configurer son propre environnement. Le panneau d'administration peut être désactivé et l'utilisation de lignes de commandes est possible avec user\plugins\admin\admin.yaml enable:false et user\localhost\config\plugins\admin.yaml enable: true Pour les commentaires, cela n'est pas possible de base: Ils faut passer à des solutions externes: grav-comments-plugin, grav-jscomments-plugin notamment.

Conclusion

Certes GRAV à de nombreux avantages, notemment celui de la rapidité, et c'est une architecture plus moderne et mieux sécurisé car peu de hackeurs s'y intéressent. Ils auraient de toute façon beaucoup moins d'outils pour accéder le serveur via des exploits de la base de données puisqu'il n'y en a pas. Toutefois il est clair que l'équipe derrière GRAV n'a ni la volonté ou les moyens de simplifier le process d'exportation, si l'on en juge l'ancien unique plugin existant qui n'est plus supporté. Et les volontaires pour ce portage se voient obligés d'utiliser des solutions comme la commande en ligne, des plugins supplémentaires et beaucoup, beaucoup de travail manuel.

Mon souhait est qu'une agence de communication convaincue de l'intêrét de la démarche se charge de développer un tel plugin, permettant un partage global facilité, depuis les commentaires au style, littéralement en deux clics. Serait'il rentable ? Uniquement sur le marché international, pas en France seule. Trop d'agences de communication sont complaisantes sur l'utilisation de wordpress comme architecture. Or ce n'est qu'une architecture parmi d'autres. Certes, elle est très polyvalente, mais certainement pas la panacée à toutes les problématiques client. Des alternatives existent, mais si pour cela une migration demande d'y consacrer un travail considérable. L'enjeu en vaut-il la chandelle ? à vous de voir au final. Dand mon cas personnel, utiliser les vastes possibilités du bootstrap pour créér le site parfait sans se soucier des contraintes d'un back-office est la solution idéale. En attendant je continue ma quête du CMS parfait... A bientôt !

Voir aussi:

https://github.com/SiteBeez/wordpress-wp2grav-markdown-exporter
https://www.rafspiny.eu/blog/wordpress-migration-to-grav-cms
https://www.techielass.com/migration-from-wordpress-to-grav/
https://stackshare.io/stackups/grav-vs-wordpress
https://deliciousbrains.com/grav-cms-self-hosted-wordpress-alternatives-part-2/
https://discourse.getgrav.org/t/migrate-from-wordpress-to-grav/9484
https://blog.dmr-solutions.com/blog/wordpress-grav-umsteigen
https://programarivm.com/lessons-learned-from-a-wordpress-to-grav-migration
https://kevq.uk/migrating-from-wordpress-to-grav/
https://writehanded.co/blog/why-we-migrated-our-website-from-wordpress-to-grav-cms