Configurer un fournisseur de stockage d'objets compatible S3 pour les téléchargements

Alors ça fonctionne maintenant ?

1 « J'aime »

Parfaitement. Cela m’a pris tellement de temps, mais en plus du fait que cela fonctionne, j’ai aussi beaucoup appris sur la configuration de Discourse !

Merci !

2 « J'aime »

OK. J’ai décidé de publier le guide étape par étape que j’ai créé lorsque j’effectuais cette configuration.

Comment configurer la sauvegarde S3 et le CDN S3 du forum Discourse (Itechguides.com)

Les étapes de ce guide concernent l’utilisation de DigitalOcean Space et de StackPack CDN.

3 « J'aime »

@pfaffman Je me demandais si vous pouviez m’aider avec ce problème de sauvegarde supplémentaire :

Après avoir terminé la sauvegarde S3 et la configuration du clonage, ma sauvegarde automatique ne s’exécute pas. La capture d’écran ci-dessous montre ma configuration.

Je peux exécuter les sauvegardes manuellement. Le problème concerne la sauvegarde automatique planifiée - elles ne s’exécutent pas.

1 « J'aime »

Je ne sais pas. Vous pouvez examiner les tâches sidekiq et vous assurer qu’elles s’exécutent. Cela devrait fonctionner.

1 « J'aime »

4 messages ont été déplacées vers un nouveau sujet : Conseils sur Google Cloud S3

Salut,

Merci d’avoir corrigé mon message. Mais je ne peux pas modifier mon message pour éviter les informations trompeuses.

Salut,

Je suis un peu bloqué et confus et j’espère que quelqu’un pourra m’aider.
J’ai d’abord eu une installation bitnami et j’ai réalisé les problèmes que cela pourrait me causer, j’ai donc réinstallé en utilisant l’installation standard.
J’ai pu restaurer ma sauvegarde et tout allait bien, même si je suis passé de la version 2.8 à la bêta 2.9.

J’ai de nouveau testé ma sauvegarde sur mon bucket Google et cela fonctionnait toujours à merveille.

Notez que toute la configuration S3 a été effectuée via l’interface Web et non via des variables d’environnement.

Pour des raisons de RGPD, j’ai créé un nouveau bucket de sauvegarde en Europe (appelons-le discourse-backup-eu), et maintenant que j’ai pu modifier la variable d’environnement, j’ai défini DISCOURSE_S3_ENDPOINT: https://storage.googleapis.com, reconstruit l’application, modifié le nom du bucket de sauvegarde dans l’interface Web, relancé la sauvegarde et j’ai été très heureux de voir les fichiers de sauvegarde apparaître sur mon nouveau bucket de sauvegarde en Europe.

Maintenant, je voulais que les téléchargements aillent dans un autre bucket et éviter de remplir l’espace disque de ma VM.

J’ai donc configuré un nouveau bucket (appelons-le discourse-uploads), l’ai rendu public, ajouté le rôle Storage Legacy Bucket Owner à mon compte de service sur ce nouveau bucket.
J’ai ensuite ajouté une règle à mon équilibreur de charge existant (appelons-le https://www.example.com) pour utiliser un bucket backend avec Cloud CDN activé, comme indiqué ici. La règle /discourse-uploads/* pointe vers le bucket discourse-uploads.

J’ai testé mon CDN avec un test.jpg à la racine du bucket mais je n’ai pas pu y accéder via https://www.example.com/discourse-uploads/test.jpg et j’ai dû créer un sous-dossier appelé discourse-uploads à l’intérieur du bucket, j’ai déplacé le test.jpg à l’intérieur et maintenant je peux voir mon image de test via https://www.example.com/discourse-uploads/test.jpg.

Dans l’interface utilisateur Web, j’ai modifié le nom du bucket factice sous “s3 upload bucket” (j’ai été obligé de le définir précédemment lors de la configuration de la sauvegarde) en discourse-uploads, j’ai rempli l’URL du CDN avec https://www.example.com/discourse-uploads et j’ai coché “enable s3 uploads”.

À partir de là, si j’essayais de télécharger une image, j’obtiendrais une popup disant “Argument invalide” dans la fenêtre du navigateur (provenant d’une erreur 422 avec un contenu JSON disant essentiellement la même chose).

J’ai essayé de rebaker tous les posts, mais sans effet, j’avais toujours l’erreur.

J’ai donc pensé qu’il fallait essayer d’utiliser les variables d’environnement au lieu de l’interface Web.

et utiliser la configuration suivante :

DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: whatever
DISCOURSE_S3_INSTALL_CORS_RULE: false
FORCE_S3_UPLOADS: 1
DISCOURSE_S3_ENDPOINT: https://storage.googleapis.com
DISCOURSE_S3_ACCESS_KEY_ID: MY_KEY_ID
DISCOURSE_S3_SECRET_ACCESS_KEY: MY_ACCESS_KEY
DISCOURSE_S3_CDN_URL: https://www.example.com/discourse-uploads
DISCOURSE_S3_BUCKET: discourse-uploads/discourse-uploads
DISCOURSE_S3_BACKUP_BUCKET: discourse-backup-eu
DISCOURSE_BACKUP_LOCATION: s3

J’ai reconstruit l’application.
Ensuite, je ne peux plus ouvrir discourse car aucun des actifs n’a été téléchargé dans le bucket et j’obtiens un 404.
https://www.example.com/discourse-uploads/assets/admin-31467dc73634cbfb81799737c43df0e2939307d893ef32713f1d0770bcb3532c.br.js

Je pensais qu’essayer de télécharger directement dans un sous-dossier du bucket était un peu exagéré, même si l’OP suggère que cela fonctionne (du moins pour le bucket de sauvegarde).

j’ai changé la variable d’environnement en
DISCOURSE_S3_BUCKET: discourse-uploads
(Pensant que plus tard je pourrai jouer avec la règle d’hôte au lieu de devoir télécharger dans un sous-dossier)

et j’ai reconstruit pour voir si quelque chose était téléchargé, mais rien n’est téléchargé dans le bucket et discourse ne parvient toujours pas à s’ouvrir en raison de 404.

Mes questions sont donc :

  • L’interface Web et la variable d’environnement entrent-elles en collision ?
  • Quand les actifs sont-ils censés être téléchargés dans le bucket ?
  • Comment puis-je déboguer cela ? Je ne vois aucune erreur dans les logs.
  • Est-il possible de définir un sous-dossier d’un bucket dans la configuration ?
  • Une fois que cela fonctionne, les images précédemment téléchargées sont-elles transférées dans le bucket ? Si je rebake, à quoi ressemblera l’URL des images précédemment téléchargées ?

Merci !

1 « J'aime »

Avez-vous inclus ce bout ?

J’ai soumis une PR avec un modèle pour faire cela il y a un moment, mais je ne pense pas qu’elle ait jamais reçu d’attention.

De plus, changer de bucket est difficile. Vous devez non seulement copier tous les assets de l’ancien vers le nouveau, mais aussi mettre à jour la base de données pour qu’elle utilise le nouveau bucket. Il y a un sujet à ce sujet, je crois.

Si vous utilisez les variables d’environnement (ce que vous devriez faire), ces paramètres ne sont plus visibles dans l’interface utilisateur Web.

1 « J'aime »

Une publication a été fusionnée dans un sujet existant : Conseils sur Google Cloud S3

Oui. Si ma mémoire est bonne, il y a une discussion ci-dessus sur Google qui n’autorise pas quelque chose (l’accès à la liste, peut-être ?), mais il y avait une solution de contournement consistant à utiliser un certain « héritage » quelque chose. C’est ce dont je me souviens. Vous devrez faire défiler les 100 messages ci-dessus pour le trouver. Si cela fonctionne, ce serait formidable si vous pouviez mettre à jour le message initial pour dire comment vous y êtes parvenu afin que la prochaine personne qui a besoin de le savoir puisse le trouver plus facilement.

1 « J'aime »

Merci encore pour votre réponse !

L’avertissement concernant le bucket Google concernait son utilisation pour les sauvegardes car il ne pouvait pas lister les fichiers.
J’ai déjà posté comment résoudre ce problème

Suggérez-vous que je mette à jour le message initial avec cette information ? Je ne pense pas pouvoir le faire.

Encore une fois, la sauvegarde fonctionne, mais le téléchargement des actifs ne fonctionne pas. Selon le message initial, cela était censé fonctionner même sans les droits de Propriétaire du bucket hérité de stockage.

Je pense qu’il pourrait y avoir une régression ici, qu’en pensez-vous @Falco ?

1 « J'aime »

Il pourrait y avoir une régression. Êtes-vous sûr d’avoir ajouté la personnalisation

dont seul Google a besoin ?

2 « J'aime »

Oh. Eh bien, je pensais que quelqu’un l’avait fait. :person_shrugging:

C’est ce que je suggérais. C’est un wiki, donc je suis à peu près sûr que tu peux le faire, bien que je ne sois pas sûr à 100% des niveaux de confiance impliqués.

1 « J'aime »

Merci pour votre réponse, oui je l’ai inclus :

Notez que j’ai essayé avec et sans le sous-dossier
DISCOURSE_S3_BUCKET: discourse-uploads/discourse-uploads
et
DISCOURSE_S3_BUCKET: discourse-uploads

Merci encore

2 « J'aime »

@tuanpembual l’a fait initialement mais a fait référence au propriétaire de l’objet hérité du stockage au lieu du propriétaire du seau hérité du stockage

Je ne suis qu’un « utilisateur de base », c’est peut-être pour ça que je ne peux pas le modifier.

3 « J'aime »

Je vais essayer de résumer les réponses à mes questions :

  • Les variables d’interface Web et d’environnement entrent-elles en collision ?
  • Quand les ressources sont-elles censées être téléchargées dans le bucket ?
    En ajoutant cet extrait à app.yml dans la section hook, il sera téléchargé après after_assets_precompile (lors de la reconstruction de l’application).
  • Comment puis-je déboguer cela ? Je ne vois aucune erreur dans les journaux.
    En exécutant :
cd /var/discourse
sudo ./launcher enter app
sudo -E -u discourse bundle exec rake s3:upload_assets --trace
  • Est-il possible de définir un sous-dossier d’un bucket dans la configuration ?

Vous pouvez utiliser des préfixes pour organiser les données que vous stockez dans les buckets Amazon S3. Un préfixe est une chaîne de caractères au début du nom de la clé de l’objet. Un préfixe peut avoir n’importe quelle longueur, sous réserve de la longueur maximale du nom de la clé de l’objet (1 024 octets). Vous pouvez considérer les préfixes comme un moyen d’organiser vos données de manière similaire aux répertoires. Cependant, les préfixes ne sont pas des répertoires.

  • Une fois que cela fonctionne, les images précédemment téléchargées sont-elles transférées dans le bucket ? Si je fais un rebake, à quoi ressemblera l’URL des images précédemment téléchargées ?
3 « J'aime »

Salut, je cherchais des fournisseurs de stockage d’objets, et j’ai vu sur le fil que pour certains d’entre eux, il fallait « ignorer CORS et le configurer manuellement ». Je ne connais pas CORS ni comment le configurer, alors devrais-je éviter ceux qui nécessitent ce réglage, ou est-il simple à mettre en place ?

1 « J'aime »

Si vous avez besoin de demander (comme je le ferais), j’en choisirais un autre.

1 « J'aime »

Confirmez-moi simplement qu’une fois les étapes

rake uploads:migrate_to_s3
rake posts:rebake

terminées, je peux supprimer entièrement le dossier des uploads locaux, oui ?

1 « J'aime »