Comment désactiver le stockage S3 ?

Bonjour à tous,

Comment puis-je désactiver complètement le stockage AWS S3 et restaurer tous les fichiers et sauvegardes du stockage S3 sur mon serveur EC2 ?

Je pense que cela fera l’affaire :

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

Cela migre les fichiers uploadés DE S3 vers votre serveur web. Ensuite, vous pouvez revenir à votre fichier app.yml et modifier DISCOURSE_USE_S3: false. Puis reconstruisez.

Je vous conseille également d’accéder à la zone d’administration de Discourse et de décocher toutes les cases activant le mode S3.

J’ai suivi les instructions de @AntiMetaman, mais cela me donne une erreur : « rake aborted ». D’abord, on me demande de désactiver le téléchargement S3. J’ai désactivé le téléchargement S3 et j’ai relancé rake, puis cette erreur est apparue.

root@ip-172-31-7-247-app:/var/www/discourse# rake uploads:migrate_from_s3 --trace
** Invoke uploads:migrate_from_s3 (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute uploads:migrate_from_s3
Migrating uploads from S3 to local storage for 'default'...
rake aborted!
NoMethodError: undefined method `downcase' for nil:NilClass
/var/www/discourse/app/models/global_setting.rb:107:in `s3_bucket_name'
/var/www/discourse/app/models/site_setting.rb:157:in `absolute_base_url'
/var/www/discourse/lib/tasks/uploads.rake:138:in `migrate_from_s3'
/var/www/discourse/lib/tasks/uploads.rake:118:in `block in migrate_all_from_s3'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rails_multisite-2.3.0/lib/rails_multisite/connection_management.rb:68:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rails_multisite-2.3.0/lib/rails_multisite/connection_management.rb:78:in `each_connection'
/var/www/discourse/lib/tasks/uploads.rake:118:in `migrate_all_from_s3'
/var/www/discourse/lib/tasks/uploads.rake:93:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:281:in `block in execute'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:281:in `each'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:281:in `execute'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:219:in `block in invoke_with_call_chain'
/usr/local/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:199:in `invoke_with_call_chain'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:188:in `invoke'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:160:in `invoke_task'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:116:in `block (2 levels) in top_level'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:116:in `each'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:116:in `block in top_level'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:125:in `run_with_threads'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:110:in `top_level'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:83:in `block in run'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:186:in `standard_exception_handling'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:80:in `run'
bin/rake:13:in `<top (required)>'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:63:in `load'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:63:in `kernel_load'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:28:in `run'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:476:in `exec'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor.rb:399:in `dispatch'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:30:in `dispatch'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/base.rb:476:in `start'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:24:in `start'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/exe/bundle:46:in `block in <top (required)>'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/friendly_errors.rb:123:in `with_friendly_errors'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/exe/bundle:34:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
Tasks: TOP => uploads:migrate_from_s3

C’est bien celle-ci, non ?

s3

Je suis tombé sur ce sujet aujourd’hui. Cela pourrait valoir le coup d’attendre un peu si vous le pouvez.

Si vous désactivez S3 uniquement depuis le panneau d’administration, cela ne le désactive qu’au niveau du site. Vous souhaitez le désactiver globalement, c’est pourquoi vous devez modifier la valeur de true à false dans app.yml, puis reconstruire.

Cela devrait fonctionner si vous avez configuré votre S3. Je viens de tester un migrate_from_s3 et un migrate_to_s3. Cela fonctionne pour moi. Je n’ai rencontré aucune erreur. Je ne sais pas ce que signifie cette erreur, donc un développeur Discourse devrait vous aider à ce stade :

NoMethodError: undefined method 'downcase' for nil:NilClass

Étrange, ma réponse ci-dessous a été supprimée ; je la publie donc à nouveau.

Cette erreur se produit lorsqu’une méthode de chaîne est appelée sur un objet qui est nil ; elle se produit généralement en Ruby lorsqu’un objet de type chaîne est attendu, mais qu’il est nil.

C’est pourquoi cette erreur se produit.

J’ai ajouté DISCOURSE_USE_S3: false dans app.yml, mais l’erreur persiste. Quelle version de Discourse utilisez-vous ? J’utilise la dernière version.

Je suis aussi sur la dernière version. As-tu rencontré des erreurs lors de la reconstruction ? Si oui, peux-tu les partager ?

Non, pas d’erreur de ce type.

Si l’erreur n’apparaît qu’après votre commande rake, pouvez-vous indiquer exactement ce que vous avez tapé ? Lors de la configuration initiale de S3, n’avez-vous pas dû migrer des fichiers vers S3 ?

Voici mon fichier app.yml complet

## Ceci est le modèle de conteneur Docker Discourse autonome tout-en-un
##
## Après avoir apporté des modifications à ce fichier, vous DEVEZ reconstruire
## /var/discourse/launcher rebuild app
##
## SOYEZ *TRÈS* PRUDENT EN ÉDITANT !
## LES FICHIERS YAML SONT EXTRÊMEMENT SENSIBLES AUX ERREURS D'ESPACEMENT OU D'ALIGNEMENT !
## visitez http://www.yamllint.com/ pour valider ce fichier si nécessaire

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Décommentez ces deux lignes si vous souhaitez ajouter Lets Encrypt (https)
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"
##  - "templates/cloudflare.template.yml"

## Quels ports TCP/IP ce conteneur doit-il exposer ?
## Si vous souhaitez que Discourse partage un port avec un autre serveur web comme Apache ou nginx,
## consultez https://meta.discourse.org/t/17247 pour plus de détails
expose:
  - "80:80"   # http
  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Définissez db_shared_buffers à un maximum de 25 % de la mémoire totale.
  ## Sera défini automatiquement par bootstrap en fonction de la RAM détectée, ou vous pouvez le remplacer
  db_shared_buffers: "128MB"

  ## Peut améliorer les performances de tri, mais augmente l'utilisation de la mémoire par connexion
  #db_work_mem: "40MB"

  ## Quelle révision Git ce conteneur doit-il utiliser ? (par défaut : tests-passed)
  #version: tests-passed

env:
  LANG: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  ## Combien de requêtes web simultanées sont prises en charge ? Dépend de la mémoire et des cœurs CPU.
  ## Sera défini automatiquement par bootstrap en fonction des CPU détectés, ou vous pouvez le remplacer
  UNICORN_WORKERS: 2

  ## TODO : Le nom de domaine auquel cette instance Discourse répondra
  DISCOURSE_HOSTNAME: engineersasylum.com

  ## Décommentez si vous souhaitez que le conteneur soit démarré avec le même
  ## nom d'hôte (option -h) que spécifié ci-dessus (par défaut "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO : Liste d'e-mails séparés par des virgules qui seront administrateurs et développeurs
  ## lors de l'inscription initiale, exemple 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'praveen369gen@gmail.com'

  ## TODO : Le serveur de messagerie SMTP utilisé pour valider les nouveaux comptes et envoyer des notifications
  DISCOURSE_SMTP_ADDRESS: email-smtp.us-east-1.amazonaws.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: AXXXXXXXXXXXXXXX
  DISCOURSE_SMTP_PASSWORD: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (optionnel, par défaut true)

  ## Si vous avez ajouté le modèle Lets Encrypt, décommentez ci-dessous pour obtenir un certificat SSL gratuit
  LETSENCRYPT_ACCOUNT_EMAIL: praxxxxxx@gmail.com

  ## L'adresse CDN pour cette instance Discourse (configurée pour récupérer)
  ## voir https://meta.discourse.org/t/14857 pour plus de détails
  #DISCOURSE_CDN_URL: //discourse-cdn.example.com
  DISCOURSE_USE_S3: false

## Le conteneur Docker est sans état ; toutes les données sont stockées dans /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Les plugins vont ici
## voir https://meta.discourse.org/t/19157 pour plus de détails
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-solved.git
          - git clone https://github.com/discourse/discourse-adplugin.git
          - git clone https://github.com/communiteq/discourse-sitemap.git
          - git clone https://github.com/discourse/discourse-whos-online.git
          - git clone https://github.com/discourse/discourse-push-notifications.git
          - git clone https://github.com/discourse/discourse-chat-integration.git
          - git clone https://github.com/davidtaylorhq/discourse-telegram-notifications.git
          - git clone https://github.com/discourse/discourse-knowledge-explorer.git
          - git clone https://github.com/discourse/discourse-math.git

## Toutes les commandes personnalisées à exécuter après la construction
run:
  - exec: echo "Début des commandes personnalisées"
  ## Si vous souhaitez définir l'adresse e-mail 'From' pour votre première inscription, décommentez et modifiez :
  ## Après avoir reçu le premier e-mail d'inscription, re-commentez la ligne. Elle ne doit être exécutée qu'une seule fois.
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "Fin des commandes personnalisées"

Je ne m’en souviens pas exactement, mais je pense avoir migré vers S3 en utilisant rake uploads:migrate_to_s3

Je n’en ai aucune idée, mais voici un fil de discussion similaire qui présente exactement la même erreur que la vôtre :

Il serait peut-être préférable de vérifier avec un membre de l’équipe.

Bonjour @Pravi,

Question sur la barre latérale :

Dans votre publication concernant votre fichier yml, vous indiquez :

DISCOURSE_SMTP_PASSWORD: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Est-ce correct ? Le mot de passe est-il entre guillemets doubles dans votre fichier yml ?

Oui, il est entre guillemets doubles. Je ne l’ai pas modifié depuis que je l’ai ajouté il y a deux ans.

J’ai supprimé les guillemets doubles, puis reconstruit l’application à nouveau. Ensuite, j’ai essayé rake uploads:migrate_from_s3 à nouveau, mais toujours sans succès. Même erreur

Salut @Pravi,

Pour être honnête, je suis un anti-fan d’AWS et de S3, donc je ne les utilise pas.

As-tu envisagé d’examiner la tâche Rake, de faire de l’ingénierie inverse sur ce script et d’exécuter la tâche manuellement, étape par étape ?

Je ne connais pas très bien les scripts internes de Discourse et j’ai un peu peur de modifier le script. Je ne veux pas tout gâcher.

Pourriez-vous me dire où se trouve le fichier de configuration de Discourse ? Je ne le trouve nulle part sur mon serveur. La commande find ne renvoie rien.

root@ip-172-31-7-247:/var/discourse# find . -name "*.config"
root@ip-172-31-7-247:/var/discourse# find . -name "*.conf"
./shared/standalone/letsencrypt/engineersasylum.com/engineersasylum.com.conf
./shared/standalone/letsencrypt/engineersasylum.com/engineersasylum.com.csr.conf
./shared/standalone/letsencrypt/engineersasylum.com_ecc/engineersasylum.com.conf
./shared/standalone/letsencrypt/engineersasylum.com_ecc/engineersasylum.com.csr.conf
./shared/standalone/letsencrypt/ca/acme-v01.api.letsencrypt.org/ca.conf
./shared/standalone/letsencrypt/ca/acme-v02.api.letsencrypt.org/ca.conf
./shared/standalone/letsencrypt/account.conf
./shared/standalone/postgres_data/pg_hba.conf
./shared/standalone/postgres_data/postgresql.auto.conf
./shared/standalone/postgres_data/pg_ident.conf
./shared/standalone/postgres_data/postgresql.conf
root@ip-172-31-7-247:/var/discourse#

Bonjour @Pravi,

Désolé que vous ayez mal compris mon message.

Je ne vous ai pas demandé de modifier ce fichier ou un autre.

Pour moi, « rétro-ingénierie » d’un script signifie l’étudier pour comprendre son fonctionnement ; cela n’a rien à voir avec la modification du fichier. Cela signifie le lire et le comprendre.

Habituellement, si nous lisons et comprenons un script ou un fichier qui génère une erreur, nous pouvons généralement saisir comment résoudre le problème.

Vous publiez des messages d’erreur provenant d’un fichier que vous n’avez apparemment pas lu.

J’espère que cela vous aidera.

Je comprends votre point de vue. Je vais essayer de le faire.

Pourriez-vous indiquer l’emplacement du fichier ‘discourse.config’ ? Où sont stockées les configurations S3 ?