Configurer BackBlaze S3 avec BunnyCDN

Cela m’a pris une éternité pour comprendre comment faire tout cela, alors j’ai voulu créer ce guide pour faciliter la tâche aux autres. Servir vos images de cette manière est censé accélérer le chargement de votre site. Ma configuration Discourse combine un droplet DigitalOcean, BackBlaze B2 S3, BunnyCDN et la version gratuite de Cloudflare.

J’ai choisi ces services après avoir fait quelques recherches sur la fiabilité, les tarifs et les performances. Ils semblaient être les meilleures options pour moi. Cloudflare aide à la sécurité, mais, d’après ce que je comprends, il ralentit légèrement le site, donc vous devriez vous renseigner là-dessus. Backblaze a des partenariats avec Cloudflare et Bunny qui permettent des transferts de données gratuits.

Bien que Cloudflare soit appelé un CDN, il ne fonctionne pas comme les CDN classiques et il ne fonctionnera probablement pas seul pour configurer S3 avec Discourse. Vous aurez peut-être besoin d’un autre fournisseur de CDN ; BunnyCDN fonctionne bien pour moi. Si quelqu’un a réussi à le faire uniquement avec Cloudflare, faites-le-moi savoir :stuck_out_tongue:

Comment configurer les téléchargements vers S3 :
Tout d’abord, inscrivez-vous chez Backblaze, créez des buckets, puis insérez les détails dans les paramètres de Discourse :

Ensuite, inscrivez-vous chez BunnyCDN et suivez ce guide :

bunny.net - The Global Edge Platform that truly Hops (lien de parrainage, je reçois un crédit de 20 $ sur ma facture)

Une fois votre zone de pull BunnyCDN créée, vous devez obtenir l’URL correcte à insérer dans le paramètre « s3 cdn url » du backend d’administration de Discourse. Accédez à votre tableau de bord BunnyCDN > zones de pull > gérer les zones de pull > cliquez sur votre zone > copiez l’URL à côté de « host name ».

L’URL devrait ressembler à quelque chose comme : example.b-cdn.net, mais vous devrez vous assurer d’ajouter https:// devant, comme ceci : https://example.b-cdn.net

Enregistrez les modifications dans la section des paramètres d’administration de Discourse.

Appuyez deux fois sur Ctrl+F5 dans votre navigateur sur votre site Discourse.

Faites un test en téléchargeant une image dans le compositeur de texte de Discourse. Inspectez l’élément de l’image de test ou affichez la source de l’image pour vérifier que cela a fonctionné. L’URL devrait être différente de votre domaine habituel ; elle devrait ressembler à example.b-cdn.net / nom_du_fichier.

Désormais, chaque fois qu’une personne télécharge une image, elle sera stockée dans votre bucket Backblaze et ne prendra pas de place sur votre droplet DigitalOcean :stuck_out_tongue:

Sauvegarde des téléchargements vers S3
Si vous souhaitez configurer vos sauvegardes Discourse pour qu’elles soient envoyées vers votre bucket Backblaze, voici comment procéder :

Dans le guide que j’ai publié plus haut dans ce fil, faites attention à la façon dont il explique qu’il faut deux buckets séparés. Un bucket est public ; c’est votre bucket de téléchargements pour que les utilisateurs puissent télécharger des images sur votre forum. L’autre bucket est privé ; c’est votre bucket de sauvegardes. Il est important de créer des sauvegardes automatisées de Discourse au cas où quelque chose se briserait, afin que vous puissiez charger votre sauvegarde et réparer le problème.

Sur votre tableau de bord BunnyCDN, vous devez créer une deuxième zone de pull. Votre première zone de pull était destinée aux téléchargements ; cette nouvelle zone de pull sera destinée aux sauvegardes.

tableau de bord bunnycdn > zones de pull > ajouter une zone de pull

Suivez le même guide que j’ai lié précédemment, « Comment accélérer la livraison de vos fichiers Backblaze B2 avec BunnyCDN » de BunnyCDN, mais cette fois, liez la nouvelle zone de pull à votre bucket de sauvegarde au lieu de votre bucket de téléchargements.

Je recommande d’utiliser le « niveau à fort volume 5 /To » sur la page de création de zone de pull de BunnyCDN. Je pense que les sauvegardes n'ont pas besoin du niveau plus cher et plus rapide « niveau standard 10 /To » que j’ai utilisé pour mon bucket de téléchargements.

Configurez vos paramètres de sauvegarde dans la section des paramètres d’administration de Discourse. « backup location » doit être défini sur S3 et « s3 endpoint » doit pointer vers ce que vous avez chez Backblaze, quelque chose comme ceci :
s3.us-west-002.backblazeb2.com

Appuyez deux fois sur Ctrl+F5 sur votre site pour vider le cache.

Démarrez une sauvegarde et laissez-la se terminer. Attendez ensuite 5 minutes et vérifiez votre dossier de sauvegardes Backblaze ; vous devriez voir la nouvelle sauvegarde apparaître.

Migration des images plus anciennes :
Cette étape est optionnelle mais recommandée, surtout si vous manquez d’espace de stockage sur votre serveur. Vous avez donc tout configuré pour les nouveaux téléchargements d’images, mais les images plus anciennes peuvent également être transférées vers vos buckets. Pour que ce processus fonctionne, suivez ces étapes :

Configuration du CDN Cloudflare
Cette étape est optionnelle puisque Backblaze a obtenu un partenariat qui rend le transfert de données vers Bunny gratuit également, mais pour une sécurité supplémentaire et d’autres fonctionnalités, vous pouvez faire passer les données d’abord par Cloudflare, puis faire en sorte que Bunny récupère les données à l’endroit où Cloudflare les dépose.

https://help.backblaze.com/hc/en-us/articles/217666928-Using-Backblaze-B2-with-the-Cloudflare-CDN

8 « J'aime »

Je voulais juste dire que j’ai fait la même chose que Bill et que je confirme que cela fonctionne ! Le seul hic, c’est que cela fonctionne pour les nouveaux fichiers et pas pour les anciens. Ce qui est génial avec la méthode de Bill, c’est qu’elle n’a même pas nécessité de reconstruction. Cependant, j’espère que quelqu’un trouvera un moyen de faire fonctionner les anciens fichiers avec S3 également.

Les sauvegardes ne fonctionnent pas non plus, au passage. Du moins pas pour moi, alors que j’ai fait exactement la même chose que Bill.

5 « J'aime »

Vous pouvez migrer d’anciens fichiers à l’aide de la tâche Rake.

1 « J'aime »

Si vous faites référence à cette commande, je l’ai déjà essayée et elle n’a pas chargé les anciens assets :

sudo -E -u discourse bundle exec rake s3:upload_assets

J’ai aussi régénéré mes publications, mais rien n’y fait.

La tâche est :

cd /var/discourse
./launcher enter app
rails c
rake uploads:migrate_to_s3
cd /var/discourse
./launcher enter app
rails c
rake uploads:migrate_from_s3

Ça fonctionne pour toi, @AntiMetaman ?
Je l’ajouterai au guide si c’est le cas.

Je vais essayer de trouver comment faire en sorte que les sauvegardes fonctionnent correctement, et je mettrai également à jour le guide avec cela. Je suis certain de devoir créer une deuxième zone de tir (pull zone).

Mes sauvegardes fonctionnent bien avec Backblaze… Quel problème rencontrez-vous ?

1 « J'aime »

Mes sauvegardes fonctionnent parfaitement avec cette méthode également. Vous devez avoir quelque chose configuré incorrectement. Je vais mettre à jour le guide dès maintenant pour expliquer comment j’ai configuré les sauvegardes. @AntiMetaman

Je suis désolé, je ne comprends pas. Pourquoi dites-vous que j’ai quelque chose de mal configuré alors que tout fonctionne parfaitement de mon côté ?

Il me parle @itsbhanusharma. Mes sauvegardes ne fonctionnent pas. Ma configuration est identique à celle de Bill. Cependant, je n’ai pas utilisé de zone de tir séparée pour le bac de sauvegarde, alors c’est peut-être pour cela. J’ai simplement le nom du bac de sauvegarde dans les variables d’environnement.

Je vais essayer la suggestion de Bhanu de migrer les actifs S3 plus tard.

J’ai créé deux zones de tir, une pour chaque bac (upload et backup). J’ai lancé une sauvegarde depuis mon panneau d’administration, mais elle a échoué. La seule information dont Discourse dispose est le nom du bac de sauvegarde.

DISCOURSE_S3_CDN_URL: https://duelistsunite.b-cdn.net
DISCOURSE_S3_BUCKET: s3omega
DISCOURSE_S3_BACKUP_BUCKET: s3omegabackup
DISCOURSE_BACKUP_LOCATION: s3

Je ne sais pas ce qui me manque ici. Existe-t-il une variable S3_CDN_BACKUP_URL ? Étant donné que l’URL est différente pour la sauvegarde.

@itsbhanusharma De plus, j’ai essayé ta méthode, mais migrate_from_S3 est indéfini.

En outre, je n’étais pas sûr que tu parles de migrate_to_s3, alors j’ai essayé cela aussi, mais cela était également indéfini.

Je suis désolé pour la confusion, je voulais dire rake uploads:migrate_to_s3

1 « J'aime »

Il semble que cela annule la tâche rake car elle ajoute amazonaws.com à l’URL, ce qui est incorrect. C’est là le problème. Si vous utilisez un service S3 qui n’est pas Amazon, la tâche rake ne fonctionnera pas car l’URL est codée en dur pour être modifiée.

1 « J'aime »

Pouvez-vous confirmer ou infirmer si vous avez ajouté des paramètres dans la section env du fichier app.yml, ou si vous les avez ajoutés via la page Administration > Paramètres ?

Mes sauvegardes fonctionnent également avec S3. Ainsi, les anciennes et les nouvelles uploads sont prises en charge par S3. J’utilise Cloudflare pour SSL et la protection DDoS, BunnyCDN pour les zones de téléchargement et de récupération des sauvegardes, et BackBlaze pour le stockage S3. Tout est en ordre maintenant !

Notez qu’il est préférable de définir les variables d’environnement dans app.yml comme indiqué ici : Configure an S3 compatible object storage provider for uploads

Ensuite, reconstruisez l’application afin que la configuration S3 soit définie globalement et non uniquement dans le panneau d’administration. De cette façon, lorsque vous migrez les anciens fichiers vers S3, vous pouvez le faire plus facilement avec trois commandes :

./launcher enter app
rake uploads:migrate_to_s3
rake posts:rebake

3 « J'aime »

Je ne suis pas sûr de ce qui m’échappe ici. Existe-t-il une variable S3_CDN_BACKUP_URL ? Étant donné que l’URL est différente pour la sauvegarde.

Avez-vous résolu cette question ? Je ne suis pas non plus clair sur l’endroit où placer l’URL de la zone de tir (pull zone) qui pointe vers le bac de sauvegarde.

Édition : Ai-je raison de penser que le CDN n’est nécessaire que pour le bac d’uploads ? Le guide sur ce sujet suggère qu’une deuxième zone de tir CDN devrait être créée pour le bac de sauvegarde. Si c’est faux, peut-être que le guide devrait être mis à jour @Bill

Apparemment, il suffit de fournir le nom du bac de sauvegarde. À partir de ce nom, l’URL S3 de sauvegarde peut être déduite, car elle sera identique à celle du téléversement, à l’exception de la différence de nom. C’est pourquoi vous n’avez pas besoin de définir une URL de sauvegarde S3 distincte. Cela suppose bien entendu que les deux bacs se trouvent dans le même service S3.

Mais si le bucket de sauvegarde est privé, comment le CDN pourrait-il y accéder ? Je débute avec les CDN et il se peut que j’oublie quelque chose, mais je soupçonne que Discourse n’utilise pas du tout le CDN pour les sauvegardes.

Oui. Je suis allé dans mon bac de sauvegarde et j’ai constaté que la sauvegarde y a été téléchargée. Elle est privée, mais Discourse peut y accéder. Vous pouvez configurer les autorisations si l’URL est disponible. Vous pouvez également restreindre l’accès au bac à votre site uniquement ou à toute source HTTPS.

Pouvez-vous vérifier que la sauvegarde a transité par le CDN, plutôt que directement depuis votre installation Discourse vers BackBlaze B2 ?