Erreurs lors de l'utilisation du stockage S3 personnalisé

Comme je suis constamment frustré par les dysfonctionnements du plugin Azure Blob Storage, j’ai déployé un serveur Flexify.IO pour traduire le protocole Azure en protocole S3.

Cependant, après l’avoir configuré dans Discourse, cela ne fonctionne pas. L’erreur est la suivante :

Échec de l'ouverture de la connexion TCP vers support.xxx.xxx.xxx.xxx:443 (getaddrinfo : nom ou service inconnu)

xx.xx.xx.xx est l’adresse IP de la passerelle S3 et support le nom du bucket…

Ce qui est étrange, c’est que j’ai utilisé S3 Browser pour tester le point de terminaison et cela fonctionne parfaitement.

Alors, une âme charitable pourrait-elle m’indiquer ce que j’ai fait de mal ?

Je ne vois qu’une cause potentielle liée à la région, car la région exposée par le point de terminaison est eastasia (une région Azure valide), mais je ne peux choisir que parmi les régions AWS standard dans une liste. Néanmoins, cela reste étrange, car l’erreur semble indiquer un échec de connexion au point de terminaison lui-même, et non une incompatibilité de région.

J’ai l’impression que mon paramètre s3_bucket est incorrect, car il ajoute le nom du bucket à l’URL du point de terminaison lui-même.

Devrais-je utiliser plutôt le format bucket/dossier ? Que dois-je mettre dans l’un ou l’autre ?

EDIT : En examinant le code source, cela semble être codé en dur. Que se passe-t-il si mon fournisseur de stockage n’utilise pas le nom du bucket comme préfixe ?

Vous devriez consulter la documentation sur l’utilisation du stockage objet pour les uploads (S3 et clones) adaptée à votre cas d’usage. C’est beaucoup plus flexible. Une fois que vous l’aurez fait fonctionner, vous pourrez l’ajouter au wiki !

2 « J'aime »

Étant donné ceci :

Alors ceci est définitivement incorrect :

Le message d’erreur le confirme. getaddrinfo: Name or service not known indique un échec de la résolution DNS ; il n’existera jamais de nom d’hôte du type « support.303.303.303.303 ».

D’où t’es venu la partie « support » ?

La documentation de Flexify indique :

Modifiez le point de terminaison S3 que votre application utilise pour s3.flexify.io (ou un autre nom d’hôte affiché dans les paramètres).

Vous ne pouvez donc pas le modifier via la console d’administration. Lisez plutôt le sujet mentionné par @falco :arrow_double_up: et commencez par :

  DISCOURSE_S3_ENDPOINT: https://s3.flexify.io
2 « J'aime »

Oh, désolé. support est le nom du bucket. Je vois que S3 préfixe simplement le nom du bucket au nom de domaine, et Discourse le suppose.

Oui, j’avais compris cela. Donc je dois coder en dur les points de terminaison dans app.yaml, c’est bien cela ?

@Falco @schleifer D’accord, je l’ai essayé, mais malheureusement, cela me donne toujours exactement la même erreur.

Par conséquent, je ne pense pas que cela fonctionne même lorsqu’il est codé en dur dans app.yaml. Ils semblent aller dans le même flux de code.

Voici mon paramétrage app.yaml :

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: eastasia
  DISCOURSE_S3_ENDPOINT: https://??.??.??.??
  DISCOURSE_S3_ACCESS_KEY_ID: ???
  DISCOURSE_S3_SECRET_ACCESS_KEY: ???
  DISCOURSE_S3_BUCKET: support

Il tente toujours d’accéder à support.??.??.??.??:443.

Donc, je suppose que dans Discourse, le bucket doit former un sous-domaine ?

ÉDIT 1

D’accord, j’ai supprimé les paramètres app.yaml et créé un sous-domaine avec support qui pointe vers xx.xx.xx.xx. Maintenant, lorsque j’essaie de télécharger, cela tourne pendant longtemps, puis renvoie une erreur générique :

Aws::S3::Errors::BadRequest

Y a-t-il un moyen d’obtenir le message d’erreur exact ?

Avez-vous essayé de consulter la page /logs ?

Oui, mais il n’y a rien là-bas…

Quelle est la valeur exacte que vous utilisez pour la variable d’environnement de l’endpoint ?

OK, j’ai trouvé un paramètre dans Flexify.IO pour activer le mode sous-domaine. Cela fonctionne maintenant. :champagne:

Je vais mettre à jour le wiki !

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.