Forum rendu inutilisable

Bonjour, j’essaie d’activer les sauvegardes S3 sur un serveur Min.IO. Lorsque je modifie app.yml pour refléter ce que je pense être la documentation, puis que je reconstruis, à la fin, tout ce que j’obtiens dans le navigateur, ce sont les 4 points colorés au milieu de l’écran. Lorsque je regarde dans la console, j’obtiens :

Uncaught ReferenceError: I18n is not defined
    at admin?v=103a67b2358b…86c5a58d96d4e91:1:1
wizard?v=ab2295f1774…85b733472935c34a0:1
Uncaught ReferenceError: I18n is not defined
    at wizard?v=ab2295f1774…b733472935c34a0:1:1

Mes modifications apportées à app.yml sont les suivantes :

  DISCOURSE_BACKUP_LOCATION: 's3'
  DISCOURSE_USE_S3: 'true'
  DISCOURSE_S3_REGION: 'off-cloud-backup'
  DISCOURSE_S3_ENDPOINT: 'http://borg....'
  DISCOURSE_S3_ACCESS_KEY_ID: '(mon uid ici)'
  DISCOURSE_S3_SECRET_ACCESS_KEY: '(ma clé ici)'
  DISCOURSE_S3_CDN_URL: 'http://borg....'
  DISCOURSE_S3_BUCKET: 'assets'
  DISCOURSE_S3_BACKUP_BUCKET: 'discourse-data'
  DISCOURSE_S3_INSTALL_CORS_RULE: 'false'

Sur le serveur Min, j’ai configuré la région, puis un bucket public appelé « assets », puis un bucket privé appelé « discourse-data », et évidemment les identifiants correspondants. J’ai essayé sans guillemets autour des variables au cas où, car certains exemples le font - aucun changement.

Si je modifie ces paramètres et redémarre, ils ne semblent pas être pris en compte. Je dois reconstruire pour qu’ils s’activent, ce qui rend le cycle de test assez pénible. Ce serait un peu plus facile si tous ces champs étaient disponibles dans les paramètres d’administration, comme cela semble avoir été le cas historiquement, ou du moins ils apparaissent sur les captures d’écran de certaines personnes (?).

Si je commente toutes les entrées _S3 dans app.yml et que je reconstruis, cela fonctionne bien. (Je n’ai tout simplement pas configuré de sauvegardes) (les URL ENDPOINT et CDN se résolvent localement à la bonne adresse IP)

La configuration de tout le reste, y compris les abonnements, a été relativement facile, mais j’ai atteint un mur avec cela. Quelqu’un a-t-il une idée de ce que je fais mal ?

Voulez-vous uniquement des sauvegardes sur S3 ? Si oui, vous n’avez besoin que des clés et du bucket de sauvegarde.

Vous l’avez configuré pour tous les actifs sur S3, mais vous avez probablement omis la partie en haut des instructions qui contient des tâches rake pour précompiler les actifs et les envoyer sur S3.

Salut, merci pour ça, je vais essayer deux choses alors ;

  • Reconstruire avec ACCESS, SECRET et BACKUP_BUCKET (et je suppose que l’endpoint ?)
  • Essayer d’ajouter les tâches rake et reconstruire

Vous avez raison sur le fait que je ne voulais initialement que les données, mais j’aurais probablement progressé vers les actifs une fois que quelque chose aurait fonctionné.

Cela dit, mon interprétation (très médiocre) de la documentation rendant le site effectivement mort semble potentiellement problématique pour les débutants. Je ne suis pas sûr pourquoi la console signale I18n comme un problème, mais cela ressemble à une modification mineure dans le code, quelque chose comme ;

if (I18n && I18n.xxx) 

plutôt que ;

if (I18n.xxx)

Pourrait protéger les débutants de la destruction de leurs sites… dois-je fouiller et essayer de faire une PR, ou est-ce quelque chose qu’une personne plus expérimentée pourrait examiner ? Je suis prêt à essayer, mais je ne veux pas perdre mon temps si ce n’est pas utile… ?

Mmm, Ok, j’ai fait un peu de progrès, les paramètres simplifiés permettent maintenant à la page de se rendre, cependant, je reçois maintenant une ‘mauvaise requête’ du serveur. Je teste le stockage S3 depuis la machine Discourse en utilisant l’outil “mc” de Min.io et cela semble fonctionner correctement et je peux lister les buckets… cependant dans les logs, j’obtiens ;

Échec de la liste des sauvegardes depuis S3 : Aws::S3::Errors::BadRequest

Et

/var/www/discourse/lib/backup_restore/s3_backup_store.rb:140:in `rescue in unsorted_files' 
/var/www/discourse/lib/backup_restore/s3_backup_store.rb:131:in `unsorted_files' 
/var/www/discourse/lib/backup_restore/backup_store.rb:23:in `files' 

J’ai pris soin de copier/coller les paramètres de app.yml dans la configuration “mc” pour m’assurer qu’il n’y avait pas de fautes de frappe… donc je suis un peu perdu pour le moment. Je vais peut-être réessayer demain…

Il essaie de lister le contenu du bucket.

Vous n’avez pas besoin de la tâche rake qui concerne les actifs.

Il essaie de lister le contenu du bucket.
Vous n’avez pas besoin de la tâche rake qui concerne les assets.

Ok, merci pour votre aide, je l’avais bien remarqué, cependant cela ne m’aide pas vraiment. J’ai essayé Min.io et SeaweedFS, j’ai configuré les deux localement au point de pouvoir écrire un fichier sur S3 à l’aide d’un outil en ligne de commande depuis la machine Discourse, mais aucune des deux options ne semble vouloir coopérer depuis Discourse. Après avoir revu le temps passé, je suppose que si les sauvegardes sont en ligne et sur S3, je peux comprendre à quel point l’option de sauvegarde directe sur S3 est géniale, cependant si vos sauvegardes sont « hors cloud » et que vous avez besoin d’émuler un stockage S3 juste pour utiliser l’option, pour moi cela devient un peu trop cher en termes de temps.

Soit dit en passant, j’ai remarqué que quelqu’un disait que CloudFlare S3 fonctionnait maintenant, ce qui pourrait être bien pour certaines personnes. CloudFlare semble avoir ajouté 10 Go de S3 à son niveau gratuit, cependant pour moi mes sauvegardes sont généralement hors cloud sur un serveur de sauvegarde Borg.

Ce que j’ai fait à la place, c’est d’ajouter la machine hôte Discourse à mon VPN de sauvegarde, d’installer borg et borgmatic couvrant /var/discourse/shared/standalone/backups et /var/discourse/shared/standalone/log sur l’hôte, puis d’ajouter cela à cron 30 minutes après la planification de la sauvegarde locale.

Q : Pouvez-vous clarifier si les sauvegardes locales couvrent tout, ou ai-je besoin de plus pour couvrir les téléchargements ? (les tâches rake supplémentaires sont-elles uniquement pour S3 ?)

Mon moi paranoïaque ne fait tout simplement pas confiance aux fournisseurs de cloud pour les systèmes en direct ET les sauvegardes. Chaque fois que je pense que je m’inquiète peut-être trop, je me rappelle la fois où je suis arrivé sur le site d’un client en réponse à mon serveur ne fonctionne pas pour découvrir qu’il avait été frappé par la foudre - à l’intérieur de la salle des serveurs.

Avez-vous suivi les instructions spécifiques à Minio ici ? Configure an S3 compatible object storage provider for uploads

Si vous modifiez uniquement ces variables d’environnement, vous pouvez faire un

  ./launcher destroy app;./launcher start app

Si vous y mettez des actifs et pas seulement des sauvegardes, alors ne manquez pas la tâche rake qui y pousse les actifs.

1 « J'aime »

Avez-vous suivi les instructions spécifiques à Minio ici ?

Oui, je l’ai fait. Je suis tout à fait prêt à admettre que j’ai pu faire des erreurs et ne pas tout lire / retenir, mais chercher sur Google la documentation appropriée n’en faisait pas partie… :wink:

./launcher destroy app;./launcher start app

Ok, c’est utile pour référence future, j’essayais d’arrêter / démarrer, je ne suis pas très familier avec la façon dont Docker crée les variables d’environnement au démarrage.

Si vous allez y mettre des actifs et pas seulement des sauvegardes, alors ne manquez pas la tâche rake qui y pousse les actifs.

Bien sûr, c’est le point qui m’a un peu confus, je vais les ajouter. Je me demandais juste pourquoi ceux-ci ne feraient pas partie de la sauvegarde par défaut, je sais qu’il y a un problème d’espace, mais je m’attendrais à ce qu’en général les gens veuillent une sauvegarde de tout leur contenu ? (et comme la plupart des gens ne semblent pas vérifier leur contenu, il est peut-être plus sûr de pencher pour tout ?)

Hmm, j’ai d’abord essayé sur mon instance de test (!) .. J’ai copié et collé deux lignes de la documentation .. quelque chose est-il obsolète quelque part ?

I, [2023-09-04T18:39:51.544973 #1]  INFO -- : cd /var/www/discourse/plugins & sudo -E -u discourse bundle exec rake s3:upload_assets
bundler: échec du chargement de la commande : rake (/var/www/discourse/vendor/bundle/ruby/3.2.0/bin/rake)
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/definition.rb:524:in `materialize': Could not find css_parser-1.16.0, oj-3.16.1, rotp-6.3.0, globalid-1.2.0, google-protobuf-3.24.2-x86_64-linux in locally installed gems (Bundler::GemNotFound)
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/definition.rb:197:in `specs'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/definition.rb:254:in `specs_for'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/runtime.rb:18:in `setup'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler.rb:162:in `setup'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/setup.rb:23:in `block in <top (required)>'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/ui/shell.rb:159:in `with_level'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/ui/shell.rb:111:in `silence'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/setup.rb:23:in `<top (required)>'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/cli/exec.rb:56:in `require_relative'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/cli/exec.rb:56:in `kernel_load'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/cli/exec.rb:23:in `run'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/cli.rb:492:in `exec'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/cli.rb:34:in `dispatch'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/cli.rb:28:in `start'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/exe/bundle:45:in `block in <top (required)>'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
        from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/exe/bundle:33:in `<top (required)>'
        from /usr/local/bin/bundle:25:in `load'
        from /usr/local/bin/bundle:25:in `<main>'
I, [2023-09-04T18:39:52.163459 #1]  INFO -- : 
I, [2023-09-04T18:39:52.164462 #1]  INFO -- : Terminating async processes

Mes hooks ressemblent à ceci ;

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets
          - sudo -E -u discourse bundle exec rake s3:expire_missing_assets
          - sudo -E -u discourse git clone https://github.com/discourse/docker_manager.git
          - sudo -E -u discourse git clone https://github.com/discourse/discourse-whos-online
          - sudo -E -u discourse git clone https://github.com/discourse/discourse-solved.git
          - sudo -E -u discourse git clone https://github.com/discourse/discourse-reactions.git
          - sudo -E -u discourse git clone https://github.com/discourse/discourse-subscriptions.git
          - sudo -E -u discourse git clone https://github.com/discourse/discourse-topic-voting.git
          - sudo -E -u discourse git clone https://github.com/discourse/discourse-calendar.git
          - sudo -E -u discourse git clone https://github.com/sylque/discourse-home-page.git
          - sudo -E -u discourse git clone https://github.com/sylque/discpage.git
          - sudo -E -u discourse git clone https://github.com/discourse/discourse-onboarding-banner.git

Ces tâches rake ne vont pas là.

Si vos téléchargements sont sur S3, vous comptez sur le gestionnaire S3 pour que cela fonctionne, vous n’avez donc pas besoin de sauvegardes. Il existe un paramètre caché pour télécharger les actifs depuis S3 et les inclure dans la sauvegarde, mais vous ne voudrez presque certainement pas le faire.

Mmm, j’avais déjà noté que quelqu’un d’autre avait parlé de mettre des choses dans la mauvaise section, puis j’ai fait la même chose quand même, oups (!)\n\nDonc, après avoir lu plus attentivement, j’ai toujours un problème, j’ai ;\nyaml\nhooks:\n after_code:\n - exec:\n cd: $home/plugins\n cmd:\n - git clone https://github.com/discourse/docker_manager.git\n - git clone https://github.com/discourse/discourse-whos-online\n - git clone https://github.com/discourse/discourse-solved.git\n - git clone https://github.com/discourse/discourse-reactions.git\n - git clone https://github.com/discourse/discourse-subscriptions.git\n - git clone https://github.com/discourse/discourse-topic-voting.git\n - git clone https://github.com/discourse/discourse-calendar.git\n - git clone https://github.com/sylque/discourse-home-page.git\n - git clone https://github.com/sylque/discpage.git\n - git clone https://github.com/discourse/discourse-onboarding-banner.git\n\n after_assets_precompile:\n - exec:\n cd: $home\n cmd:\n - sudo -E -u discourse bundle exec rake s3:upload_assets\n - sudo -E -u discourse bundle exec rake s3:expire_missing_assets\n\nIl est dit de coller dans app.yml dans la section hooks… Est-ce que cela semble correct ou suis-je toujours au mauvais endroit ? L’erreur que j’obtiens maintenant est ;\n\nFAILED\n--------------------\nPups::ExecError: cd /var/www/discourse &amp;&amp; sudo -E -u discourse bundle exec rake s3:upload_assets failed with return #&lt;Process::Status: pid 1845 exit 1&gt;\nLocation of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'\nexec failed with the params {\"cd\"=&gt;\"$home\", \"cmd\"=&gt;[\"sudo -E -u discourse bundle exec rake s3:upload_assets\", \"sudo -E -u discourse bundle exec rake s3:expire_missing_assets\"]}\nbootstrap failed with exit code 1\n\nJe regarde à nouveau dans les journaux pour plus de détails mais je ne vois rien. Malheureusement, je n’ai jamais codé en Ruby donc je ne sais pas vraiment ce que je regarde / cherche, des idées ?\n\nNote : il a été conseillé d’exécuter ./discourse-doctor, ce que j’ai fait, mais cela ne m’a pas semblé dire quoi que ce soit de différent…",“target_locale”:“fr”}