Nouvelle version du site đ„
Le passage de PHP Ă Jekyll #
AprĂšs quelques annĂ©es dâexistence, mon ancien site commençait Ă vieillir.
(Les sources de mon ancien site sont toujours disponibles sur Github, mais remontent Ă lâĂ©poque de mon DUT, soyez indulgents ! đ)
De plus, le premier et unique article prĂ©sent sur ce site nâĂ©tait mĂȘme pas hĂ©bergĂ© sur ce site, mais sur un sous-domaine (dĂ©sormais inexistant) et avec la plateforme Ghost (qui est un excellent logiciel libre au passage !).
Cela faisait donc deux sites Ă maintenir, pour un trafic plus que faible đ !
Le choix de PHP avait Ă©tĂ© fait Ă lâĂ©poque car il sâagissait du seul langage que je maitrisais.
En y rĂ©flĂ©chissant, pour effectuer une refonte du site, jâai listĂ© les points que je souhaitais avoir.
1. Des performances améliorées #
Pour cette refonte, je souhaitais obtenir des performances dignes de ce nom. Nâayant pas de logique cĂŽtĂ© serveur (puisque le but de ce site est simplement de servir du contenu, pas dâeffectuer un traitement dessus ou de traiter des donnĂ©es externe), le choix dâun langage cĂŽtĂ© serveur ne me semblait plus trĂšs cohĂ©rent.
Etant donnĂ© que jâai que du contenu statique, pourquoi ne pas envoyer au client un simple fichier HTML, plutĂŽt que de consommer du temps CPU et des processus PHP pour gĂ©nĂ©rer une page dâune faible complexitĂ© ? Pourquoi ne pas construire une fois toutes les pages nĂ©cessaire, pour nâavoir plus quâĂ les servir ensuite, supprimant le temps de gĂ©nĂ©ration de la page cĂŽtĂ© serveur ?
Jâai donc commencĂ© Ă creuser la question des gĂ©nĂ©rateurs de sites et en ai trouvĂ© plusieurs (le trĂšs bon site StaticGen mâa beaucoup aidĂ© Ă trouver des ressources et des avis). Câest ainsi que mon choix sâest portĂ© sur Jekyll.
Voici une illustration des performances actuelles du site, ainsi quâun rapport Dareboost. Je suis assez satisfait du rĂ©sultat, mĂȘme sâil me reste du travail Ă faire dessus (mais comme le produit parfait nâexiste pas, le site parfait nâexiste pas non plus ! đ)
2. Le contenu prime sur le design (pour moi) #
Je suis un trĂšs mauvais designer et lâintĂ©gration CSS est pour moi un vrai calvaire.
Câest dâailleurs pour cela que je suis parti dâun template Jekyll que jâai ensuite adaptĂ© Ă mes besoins.
Le thĂšme de base que jâai utilisĂ© peut ĂȘtre consultĂ© ici
NĂ©anmoins, je ne voulais pas dâun thĂšme complexe, qui allait ainsi influer sur les performances du site (plus il y a de CSS et de JS, plus le site sera long Ă charger pour lâutilisateur). Câest pourquoi le thĂšme que jâai choisi nâintĂšgre aucun javascript. Ainsi, seule une feuille de style, quelques emojis provenant de Github, et une feuille SVG1 sont chargĂ©es en plus du contenu.
Je nâexclus pas dâutiliser du javascript lorsque je ferai Ă©voluer le site, mais je vais tenter dâen limiter au maximum lâusage.
Certes, le thĂšme du site semblera au mieux austĂšre Ă certains, au pire hideux Ă dâautres, ⊠Mais au moins, le site est lisible sur (presque, je nâai pas de montre connectĂ©e pour tester !) tous les supports et charge rapidement đ
3. La rédaction doit se faire en Markdown et une séparation style/contenu doit exister #
Câest Ă©galement lâune des raisons qui mâa poussĂ© vers les gĂ©nĂ©rateurs de site statiques.
Jâaime beaucoup le markdown, et mâen sert beaucoup en cours pour ma prise de note. Il sâagit dâun langage extrĂȘmement simple pour la rĂ©daction, et en mĂȘme temps, trĂšs puissant.
Concernant la séparation style/contenu, les layouts
de Jekyll répondent parfaitement à ce besoin.
4. Sécurité #
Je souhaitais un site qui ne sera pas facilement corrompu. Avec des pages HTML, aucune faille PHP / Node / Java / (mettez le nom de votre langage prĂ©fĂ©rĂ© ic) possible. Avec un gĂ©nĂ©rateur de site statique, on gĂ©nĂšre le contenu une fois, on publie le rĂ©sultat et on sert le contenu, câest tout !
Concernant lâhĂ©bergement, je me suis tout dâabord dis que jâallais profiter de lâhĂ©bergement avec Github Pages. Cela fonctionne trĂšs simplement, mĂȘme avec un domaine personnel, puisquâil suffit simplement dâutiliser le gestionnaire DNS de son registrar pour faire pointer le domaine sur lâIP de Github Page.
NĂ©anmoins, cela un inconvĂ©nient majeur Ă mon sens : la maĂźtrise des paramĂštres du site est impossible, que cela soit au niveau du cache, des headers de sĂ©curitĂ©, ⊠Github empĂȘche toute modification des headers sur les sites hĂ©bergĂ©s par Github Pages2
Au final, nous ne sommes jamais aussi bien servi que par soi-mĂȘme, jâai donc utilisĂ© Travis CI pour dĂ©ployer le site gĂ©nĂ©rĂ© sur mon petit Raspberry avec un Rsync : pas besoin de plus compliquĂ©, cela me suffit amplement. Un serveur web devant, un certificat Letâs Encrypt et voilĂ !
Jâai ainsi pu obtenir une note convenable, selon lâobservatoire Mozilla et Cryptcheck. Il me reste nĂ©anmoins un peu de travail Ă faire sur les CSP (Content Security Policy), ce concept nâest pas Ă©vident Ă apprĂ©hender đŁ !
5. SEO #
Il sâagit de ma premiĂšre rĂ©elle expĂ©rience SEO3 et Jekyll offre de nombreux plugins4 permettant de gĂ©nĂ©rer des sitemap, un flux RSS, des mĂ©tadonnĂ©es, ⊠Jâai donc essayĂ© de tirer profit de cela au maximum.
Workflow #
Mon processus de développement est assez simple :
- Je développe en local mes articles et pages.
- Le code est versionné sur Github
- Travis sâassure de la qualitĂ© du site, avec des tests de validitĂ© des liens et des images, ainsi que la structure des pages HTML.
- Travis déploie une version (correspondant à la branche master) de production.
- Je dĂ©ploie Ă©galement avec une autre branche une version de dĂ©veloppement, qui me permet de tester le site avant dâeffectuer un merge sur master :smiley:
Un nouveau site, pour quoi faire #
Ce site va principalement me servir Ă exposer mes projets rĂ©alisĂ©s, et Ă effectuer ma veille technologique. Jây Ă©crirais des articles sur mes expĂ©riences de dĂ©veloppement, afin de garder une trace de ce qui mâest arrivĂ©. Je ne mâimpose cependant aucun rythme de publication, il est donc possible que le site reste quelques mois sans nouveaux contenus.
Evolutions #
Ce site est fonctionnel, mais pourtant il me reste quelques petits éléments à améliorer/régler.
SystĂšme de commentaire #
Etant sur un site statique, il nâest pas possible dâinclure des commentaires directement, puisquâil nây a aucun traitement cĂŽtĂ© serveur.
Evidemment, il est possible dâintĂ©grer des solutions tel que Disqus ou encore Facebook Comments mais ces solutions Ă©tant peu protectrice de notre vie privĂ©e, jâai prĂ©fĂ©rĂ© chercher une alternative.
AprĂšs quelques recherches, jâai trouvĂ© 2 solutions :
Le premier est un serveur de commentaire basique et lĂ©ger Ă©crit en Python. Je nâai pas encore eu beaucoup de temps Ă consacrer Ă ce sujet, notament pour lâauto-hĂ©berger, mais je pense quâil sâagit dâune trĂšs bonne solution et risque de me pencher dessus dans les prochaines semaines !
Le deuxiĂšme semblait trĂšs prometteur mais malheureusement victime de son succĂšs. En effet, il sâagit dâun bot Github, interagissant avec le dĂ©pĂŽt Github, et qui ajoute les commentaires directement dans la branche master
ou créé une pull request si une approbation est nécessaire avant la publication des commentaire.
De plus, comme indiquĂ© sur leur site, cet outil sâintĂšgre trĂšs bien avec Jekyll et Github. NĂ©anmoins, il utilise lâAPI Github, et Ă©tant un projet public commençant Ă prendre de lâampleur, les limitations de lâAPI Github semble bloquer/ralentir ce projet, entrainant de nombreuses erreurs.
Une solution pour parer au problĂšme serait dâauto-hĂ©berger le projet avec une clĂ© dâAPI Github personnelle mais semble beaucoup pour âsimplement des commentairesâ, mĂȘme si jâaimais beaucoup lâidĂ©e de pouvoir avoir des pull request pour chaque commentaire !
Edit : Les commentaires sont maintenant disponible ! đ„
Conclusion #
Merci Ă tous dâavoir lu cet article, jâespĂšre quâil vous aura plu.
Si vous avez des remarques, nâhĂ©sitez pas Ă me faire vos retours !
Scalable Vector Graphics â©ïž
Ce qui nâest en soit pas une mauvaise chose, si une totale libertĂ© Ă©tait donnĂ© Ă tous, ils se retrouveraient sĂ»rement avec des sites mal configurĂ©s dans certains cas et leur infrastructure pourrait alors ĂȘtre compromise ! â©ïž
Pour en citer quelques uns :
jekyll-sitemap
,jekyll-seo-tag
etjekyll-feed
â©ïž