J’envisage d’essayer de réduire la consommation mémoire des instances Unicorn en configurant mon nginx externe (que j’utilise déjà pour afficher la page de maintenance 502 et pour attribuer correctement les adresses IPv6) afin qu’il serve également les requêtes pour les images. L’objectif est de bénéficier d’une grande partie des avantages du déplacement de ces images vers S3 (ou un service objet compatible), tout en maintenant le site autonome sur mon serveur. (Cela ne déplacerait pas les autres ressources du site hors des instances Unicorn, mais celles-ci sont bien mises en cache d’une page à l’autre, ce qui représente donc un coût global bien moindre pour Unicorn.)
Tout comme on pointe nginx externe vers un socket dans /var/discourse/shared, je servira /uploads depuis /var/discourse/shared/$container/uploads.
Je n’ai pas vu de mention sur Meta indiquant que quelqu’un a déjà fait cela, bien que mes compétences en recherche puissent être faibles. Manquerais-je des raisons pour lesquelles cela ne fonctionnerait pas ou fonctionnerait mal en pratique ?
Si vous souhaitez aider vos licornes, une solution efficace consiste à activer un CDN pour votre Discourse, car cela permettra de mettre en cache les quelques ressources servies sur les licornes, telles que les feuilles de style.
Je suppose que l’activation de la mise en cache sur le serveur nginx externe offrirait le même avantage en ce qui concerne le chargement des processus Unicorn, sans avoir à configurer un CDN. Je remarque que des en-têtes de contrôle du cache sont présents sur tous les fichiers JavaScript, je vais donc peut-être essayer cette solution…
… eh bien, je vois que le serveur nginx interne utilise déjà proxy_cache avec une validité de 7 jours pour les requêtes sans erreur :
location ~ ^/(svg-sprite/|letter_avatar/|letter_avatar_proxy/|user_avatar|highlight-js|stylesheets|theme-javascripts|favicon/proxied|service-worker) {
...
# note x-accel-redirect ne peut pas être utilisé avec proxy_cache
proxy_cache one;
proxy_cache_key "$scheme,$host,$request_uri";
proxy_cache_valid 200 301 302 7d;
proxy_cache_valid any 1m;
proxy_pass http://discourse;
break;
}
Dans ce cas, comment un CDN peut-il aider avec les processus Unicorn ? Je vois stylesheets dans cette liste.