La plupart des plugins contiennent tout le code dont ils ont besoin et s’installent facilement. Les deux que vous avez essayés doivent récupérer des gems (bibliothèques) sur Internet pour pouvoir fonctionner.
Savez-vous où dans le code s’effectuent les récupérations de gems Ruby pour les plugins ? J’ai essayé de chercher, mais je n’ai pas encore trouvé le bon endroit.
Je me disais que, plutôt que d’utiliser des gems mises en cache, il serait peut-être plus élégant d’exécuter un miroir Rubygems sur l’hôte isolé. J’ai trouvé un tutoriel ici, et il semble que vous puissiez configurer des sources de gems supplémentaires au niveau du système :
Notre Discourse interne tourne heureusement depuis longtemps sur la même ancienne version, mais nous nous débarrassons enfin d’IE9, ce qui rend une mise à jour plus que nécessaire.
Je peux confirmer que ce guide fonctionne toujours avec les dernières versions de Discourse, même avec RHEL 8 au lieu de 7 ![]()
Lors de mes expérimentations, j’ai trouvé un moyen de faire fonctionner les plugins discourse-prometheus et discourse-calendar hors ligne également, malgré les dépendances supplémentaires. L’astuce consistait à extraire les gems Ruby du répertoire des plugins du serveur de build, ainsi que celles situées dans /var/www/discourse/vendor/bundle/ruby.
docker run -it -v ~/local/rubygems.org:/local-rubygems local_discourse/app /bin/bash -c "cp -rv /var/www/discourse/vendor/bundle/ruby /local-rubygems"
docker run -it -v ~/local/rubygems.org/plugin-gems/discourse-calendar:/local-rubygems local_discourse/app /bin/bash -c "cp -rv /var/www/discourse/plugins/discourse-calendar/gems /local-rubygems"
docker run -it -v ~/local/rubygems.org/plugin-gems/discourse-prometheus:/local-rubygems local_discourse/app /bin/bash -c "cp -rv /var/www/discourse/plugins/discourse-prometheus/gems /local-rubygems"
Ensuite, dans /templates/web.template.yml :
- exec:
cd: $home
hook: bundle_exec
cmd:
# copier le cache Ruby local
- cp -rv /local-rubygems.org/ruby/* $home/vendor/bundle/ruby/
- cp -rv /local-rubygems.org/plugin-gems/* $home/plugins/
- su discourse -c 'bundle install --local --deployment --retry 3 --jobs 4 --verbose --without test development'
D’ailleurs, il semble que le sujet concernant l’authentification unique (SSO) Active Directory IIS ait été perdu à un moment donné, mais le code est toujours disponible sur GitHub - laktak/discourse-sso: Single Sign On for Discourse with Active Directory · GitHub et fonctionne toujours avec DiscourseConnect SSO, désormais renommé.
J’ai essayé une autre mise à niveau et il semble qu’à un moment donné, une nouvelle section « yarn install » ait été ajoutée à web.template.yml, ce qui pose problème dans l’environnement isolé.
- exec:
cd: $home
cmd:
- "[ ! -d 'node_modules' ] || su discourse -c 'yarn install --production && yarn cache list'"
En comparant le contenu de l’ancien et du nouveau conteneur, il semble qu’il y ait un tas de paquets yarn mis en cache dans le nouveau, dans /usr/local/share/.cache/yarn/v6, mais rien dans l’ancien. Je suppose que tous les node.js requis étaient inclus dans l’image de base, mais qu’ils sont maintenant mis à jour lors d’une reconstruction ?
Je vais expérimenter en copiant le cache yarn de la même manière que le cache ruby et voir si je peux amener yarn à utiliser les paquets mis en cache depuis la boîte de build.