Voici les variables que nous définissons concernant S3/CDN :
DISCOURSE_CDN_URL
DISCOURSE_S3_ACCESS_KEY_ID
DISCOURSE_S3_BACKUP_BUCKET
DISCOURSE_S3_CDN_URL
DISCOURSE_S3_REGION
DISCOURSE_S3_SECRET_ACCESS_KEY
DISCOURSE_S3_UPLOAD_BUCKET
USE_DB_S3_CONFIG: true
Je pense que DISCOURSE_S3_BUCKET a été déprécié au profit de DISCOURSE_S3_UPLOAD_BUCKET et DISCOURSE_S3_BACKUP_BUCKET. Vous devriez définir ces derniers à la place.
C’est ce que j’ai supposé, mais je n’avance pas tant que je ne définis pas à la fois DISCOURSE_S3_UPLOAD_BUCKET et DISCOURSE_S3_BUCKET. Comme vous pouvez le constater dans l’extrait de code ci-dessus, use_s3? cherche toujours s3_bucket et non s3_upload_bucket.
La définition de DISCOURSE_BACKUP_BUCKET ne résout pas le problème, autant que je puisse en juger.
Si je définis les deux variables d’environnement de bucket, je progresse d’un cran, mais je me heurte alors à un nouveau problème : Discourse ignore mon URL CDN S3 et tente de charger les ressources depuis mon chemin de base. Cela provoque des erreurs CSP, car la Politique de Sécurité du Contenu n’inclut que le chemin des ressources de mon CDN S3.
Il devrait s’agir de DISCOURSE_S3_BACKUP_BUCKET et non de DISCOURSE_BACKUP_BUCKET. À part cela, si vous définissez toutes les variables avec les deux distributions CloudFront, cela devrait fonctionner. Si vous consultez nos paramètres, vous verrez que nous ne définissons pas DISCOURSE_S3_BUCKET.
Je ne sais pas si un rebake est également nécessaire.
@Falco, pour autant que je m’en souvienne, ce qui rendait cela très contre-intuitif, c’est qu’il y a une différence de comportement entre la définition de DISCOURSE_S3_CDN_URL en tant que variable d’environnement ou paramètre global et sa configuration en tant que paramètre du site. Peut-être que c’est quelque chose sur lequel tu veux prêter attention dans ton howto.
Oui, désolé, c’était une faute de frappe dans mon message précédent. DISCOURSE_S3_BACKUP_BUCKET ne définit pas s3_bucket dans GlobalSetting pour moi. Je ne sais pas comment tu exécutes cette tâche Rake sans définir DISCOURSE_S3_BUCKET.
Je te remercie vraiment pour ton aide, au fait, et je comprends que ce n’est pas à toi de résoudre ce problème, alors merci.
def ensure_s3_configured!
unless GlobalSetting.use_s3? || use_db_s3_config
STDERR.puts "ERREUR : Assurez-vous que S3 est configuré dans config/discourse.conf ou dans les variables d'environnement"
exit 1
end
end
use_db_s3_config vous évite d’avoir à définir cette variable supplémentaire. Cela doit être un bug dans global_setting.rb, car je devrais pouvoir simplement définir DISCOURSE_S3_UPLOAD_BUCKET, sauf s’il existe une différence entre cela et DISCOURSE_S3_BUCKET. Cependant, je pense que vous avez raison : ce dernier devrait être déprécié.
Indépendamment d’un bug dans global_setting.rb, je constate toujours un problème où Discourse recherche les assets à leur emplacement habituel et non sur mon CDN S3, même si j’ai déclaré toutes mes variables et que DISCOURSE_ENABLE_S3_UPLOADS est défini sur true.
Il y a une tâche pour cela : bundle exec rake uploads:migrate_to_s3. Une fois vos buckets configurés, exécutez cette tâche pour déplacer les fichiers vers S3. S3/CDN a changé ces derniers mois et la documentation n’est pas à jour, alors assurez-vous de faire une sauvegarde et de vous préparer au cas où quelque chose tournerait mal.
Lorsque j’ai activé cela pour la première fois, nous avons connu une interruption de service pendant que nous résolions tous les problèmes.
Je suppose que c’est parce que vous n’avez pas défini DISCOURSE_CDN_URL. Nous l’avons configuré comme ceci dans notre fichier de configuration :
DISCOURSE_CDN_URL: 'https://d16zv78c963s69.cloudfront.net' # cela pointe vers le serveur
DISCOURSE_S3_CDN_URL: 'https://community-cdn-prod.debtcollective.org' # cela pointe vers le bucket S3
Les feuilles de style sont récupérées depuis le serveur, elles utilisent donc DISCOURSE_CDN_URL. Les fichiers JavaScript sont téléchargés dans le bucket S3 et utilisent DISCOURSE_S3_CDN_URL. @Falco m’a expliqué cela ici.
Oui, je l’ai vu. J’ai défini DISCOURSE_CDN_URL, mais je rencontre toujours le même problème. Cependant, je suis fatigué, alors peut-être que j’ai raté quelque chose en raison de toutes les manipulations. Je reprendrai cela demain. Merci pour votre aide.
Cet outil va-t-il télécharger les fichiers d’images et les ressources en tant que fichiers JS vers S3 ? Et dois-je utiliser une URL CloudFront ou S3 suffit-il ? Merci pour votre aide.
bundle exec rake uploads:migrate_to_s3 ne transférera que les pièces jointes vers S3 ; cette tâche doit être exécutée une seule fois. Une fois S3 activé, les nouveaux fichiers seront automatiquement enregistrés dans les buckets S3.
Pour transférer les ressources, vous devez utiliser bundle exec rake s3:upload_assets. Cette commande doit être exécutée après chaque reconstruction ou mise à niveau.
J’ai fait ce que vous avez mentionné et les téléchargements vers S3 (images, etc.) ont réussi, mais pour les assets, je reçois l’erreur suivante :
ERROR: Ensure S3 is configured in config/discourse.conf or environment vars
J’ai défini les deux :
DISCOURSE_CDN_URL: 'https://d16zv78c963s69.cloudfront.net' # cela pointe vers le serveur
DISCOURSE_S3_CDN_URL: 'https://community-cdn-prod.debtcollective.org' # cela pointe vers le bucket S3
Il y a un problème intéressant : Discourse tente d’accéder aux fichiers d’actifs depuis un mauvais chemin. Il essaie d’accéder via le chemin brotli_asset, mais ce chemin n’existe pas dans le bucket S3.
De plus, il tente d’accéder aux fichiers JavaScript et aux feuilles de style depuis l’URL du CDN. Mais ces fichiers ne sont pas non plus dans le bucket.
@ufukayyildiz Je pense que toutes les réponses à vos problèmes se trouvent dans ce fil de discussion. Je viens littéralement de faire la même configuration.
En bref, vous devez vous assurer d’avoir téléchargé vos ressources une fois qu’elles ont été précompilées.
Pourquoi configurer ces données dans les variables d’environnement (ENV) ?
Je vais donner mon exemple.
En configurant les données dans le panneau d’administration vers S3, tout fonctionne correctement et tout est chargé sur S3. Je n’ai aucune configuration dans les variables d’environnement. Est-ce mauvais ? Est-ce nécessaire si tout fonctionne ?
Le deuxième exemple est différent car je ne peux pas migrer les anciennes données vers S3 (seules les nouvelles fonctionnent). Mais ici, entrer ces données dans le fichier app.yml (DISCOURSE_S3_ACCESS_KEY_ID: ‘key’, etc.) ne change rien et cela ne fonctionne toujours pas (c’est-à-dire
Non, les variables d’environnement offrent un moyen supplémentaire de configurer ces éléments, par exemple avant d’avoir accès au panneau d’administration.