Rendre son site (sur Raspberry 3 B+) beaucoup plus rapide

Par l'utilisation de services gratuits disponibles sur Internet.

4 minute de lecture
Par Stéphane
Rendre son site (sur Raspberry 3 B+) beaucoup plus rapide

Ce site est auto hébergé, c'est à dire qu'il réside chez moi, connecté sur ma box. Voici comment La Chienlit, malgré des tout petits moyens techniques, est rapide.

Ce qui ralentit

  1. D'abord parce que la machine qui sert de serveur http est un Raspberry Pi 3 B+ avec 1 Go de mémoire et un disque SSD de 120 GO pour le stockage (et aucune carte SD).
  2. Les accès disques sont très lents : pas plus de 18 Mo/s. C'est vraiment pas terrible. Vu que la bande passante de l'USB est partagé, je doute que mettre 2 disques en RAID 1 accélère quoique ce soit.
  3. L'interface Ethernet, dont la bande passante est partagée avec l'USB... ce n'est donc pas bien rapide.

Ce qui ne ralentit pas

  1. Le réseau : je suis relié en fibre optique avec quelques centaines de Gb/s en up, ça devrait aller vite, même si sans doute la box rajoute de la latence.
  2. Le processeur n'est pas le problème, avec ses 4 cœurs cadencés à plus de 1Ghz, et malgré le SSL (site en HTTPS).
  3. La mémoire centrale n'est pas, pour le moment, un problème, bien qu'il soit évidement que plus de mémoire, mieux c'est, car le système va conserver plus d'objets en cache (mémoire), économisant des accès disque.
  4. Le DNS : la machine possède son propre serveur DNS filtrant, Pi-Hole.
  5. Regarder les logs 😉: ils sont exportées sur https://logflare.app par un worker Cloudflare !
commande top sur raspberry pi 3 B+ raspbian montrant 0.04 charge processeur et 600 O de mémoire libre
top : processeur disponible, mémoire allouée au buffer cache

Première façon évidente mais coûteuse d’accélérer le serveur

Vous vous en doutez tous : il s'agit de remplacer le Raspberry Pi par une machine avec des entrées/sorties plus rapides. Et pour ça, miracle, le Raspberry Pi 4 b est quasi parfait ! Les débits réseau et USB (qui passe en 3.0) sont biens supérieurs :

Cela vous coûtera dans les 50€ pour le nouveau modèle, avec plus de RAM (par exemple 2 Go). Mais si vous utilisez déjà une version récente de Raspbian, il suffit de débrancher le disque de l'un pour le mettre sur l'autre (n'oubliez pas de proprement stopper le système sur le Pi d'abord ! La commande shutdown est votre ami).

Seconde solution, l'utilisation de services extérieurs

Il s'agir de déporter les accès à son serveur vers d'autres services. Le problème des entrées sorties lentes est ainsi résolu, car les images, qui sont longues à lire et à transférer vers le client (le visiteur du site), ne sont plus lues depuis le serveur mais des serveurs cache situés quelque part sur Internet (et n'en doutons pas, sur des machines puissantes avec des liaisons rapides !).

Le reverse proxy Cloudflare

Typiquement un proxy est une machine qui va faire les requêtes à votre place, ce qui est peut être utile si par exemple vous voulez cacher votre adresse IP.
Le reverse proxy lui va répondre à votre place aux requêtes venant d'Internet, et s'il n'a pas la réponse, alors il fait la requête sur le serveur (chez vous), transmet la réponse au client, et garde la réponse (si possible) en cache localement. À la prochaine requête identique, c'est la copie locale qui est retournée au client (visiteur) du site.
Cela marche extrêmement bien avec toutes les données statiques, comme les images.

Comment on configure Cloudflare fera l'objet d'un autre billet, ce qui est important ici c'est que :

  1. Cloudflare masque l'adresse IP de votre serveur, donc de votre box.
  2. Cloudflare vous protège des attaques DDoS (et autres).
  3. Cloudflare met en cache les images.
  4. Cloudflare est gratuit (pour l'usage qu'on en fait).
  5. La page Cloudflare est en français.

Le réseau de diffusion de contenu (CDN) Cloudinary

Reste que le problème subsiste : les images sont toujours sur votre serveur (le fameux Raspberry Pi pour moi), alors qu'elles pourraient être hébergées ailleurs ET aux bonnes dimensions.
Je m'explique.

  1. Hébergées ailleurs : sur un réseau de serveurs, comme celui de Cloudflare.
  2. Mises aux bonnes dimensions : sur ce blog (motorisé par Ghost), les images sont utilisées en plusieurs tailles. Par exemple l'image d'entête de chaque billet est utilisé en petit format dans la liste des billets (la première page du blog) et en grand format dans le billet lui même. Pareil pour les images dans les billets, elles sont présentés avec une certaine taille et en grand format quand on clic dessus.

Ces transformation peuvent être faite, avec plein d'autres choses d'ailleurs, sur un service extérieur. J'ai choisi Cloudinary, car une fois configuré (ce qui là encore donnera lieu à billet), les images inclues dans le blog sont automatiquement téléchargées dans Cloudinary, et remplacé dans le billet par un lien.
Les tailles, tags, meta données, etc. peuvent être gérés directement depuis le panneau de contrôle de Cloudinary.
Cloudinary est gratuit jusqu'à une certaine limite, qui est assez importante, donc devrait suffire pour un usage normal.

Conclusion

L'utilisation de services gratuit et externe vous permet de largement diminuer la bande passante et la taille des requêtes faite sur votre site : ainsi sa charge reste faible, et il n'est pas crucial d'acheter un serveur très puissant, qui consommera plus, prendra plus de place, etc.

Les deux services Cloudflare et Cloudinary sont complémentaires, les deux peuvent être utilisés.