Cette ligne n’est pas correctement indentée. Elle devrait avoir 2 espaces, tout comme after_code.
Est-ce un problème ? car certains paramètres commencent sans espaces. et quand je compile, il n’y a pas d’erreur. Exemple :
Tout cela semble correct. À quoi ressemble la partie after_assets_precompile dont j’ai parlé ?
Vous devez insérer deux espaces devant « after_assets_precompile ».
Je vais faire ça et je vous tiendrai au courant. Merci beaucoup pour votre temps ![]()
Lorsque j’applique cela, une erreur se produit et le site ne se charge pas, le site n’est pas accessible :
FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && sudo -E -u discourse bundle exec rake s3:upload_assets failed with return #<Process::Status: pid 4803 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec failed with the params {"cd"=>"$home", "cmd"=>["sudo -E -u discourse bundle exec rake s3:upload_assets", "sudo -E -u discourse bundle exec rake s3:expire_missing_assets"]}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
J’ai exécuté ./discourse-doctor, puis recompilé, et j’ai obtenu la même erreur.
Lorsque j’entre dans le conteneur et que j’exécute les codes suivants, j’obtiens une erreur :
rake uploads:migrate_to_s3
Erreur :
rake uploads:migrate_to_s3 --trace
Plugin name is 'DiscourseMatheditor', but plugin directory is named 'discourse-matheditor'
Plugin name is 'discourse-post-voting', but plugin directory is named 'discourse-question-answer'
Plugin name is 'discourse-topic-voting', but plugin directory is named 'discourse-voting'
** Invoke uploads:migrate_to_s3 (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute uploads:migrate_to_s3
Please note that migrating to S3 is currently not reversible!
[CTRL+c] to cancel, [ENTER] to continue
Migrating uploads to S3 for 'default'...
Some uploads were not migrated to the new scheme. Running the migration, this may take a while...
rake aborted!
FileStore::ToS3MigrationError: Some uploads could not be migrated to the new scheme. You need to fix this manually. (FileStore::ToS3MigrationError)
/var/www/discourse/lib/file_store/to_s3_migration.rb:156:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:59:in `migrate'
/var/www/discourse/lib/tasks/uploads.rake:126:in `migrate_to_s3'
/var/www/discourse/lib/tasks/uploads.rake:106:in `block in migrate_to_s3_all_sites'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rails_multisite-6.0.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rails_multisite-6.0.0/lib/rails_multisite/connection_management/null_instance.rb:36:in `each_connection'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rails_multisite-6.0.0/lib/rails_multisite/connection_management.rb:21:in `each_connection'
/var/www/discourse/lib/tasks/uploads.rake:104:in `migrate_to_s3_all_sites'
/var/www/discourse/lib/tasks/uploads.rake:100:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:281:in `block in execute'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:281:in `each'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:281:in `execute'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:219:in `block in invoke_with_call_chain'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:199:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:199:in `invoke_with_call_chain'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:188:in `invoke'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:188:in `invoke_task'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:138:in `block (2 levels) in top_level'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:138:in `each'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:138:in `block in top_level'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:147:in `run_with_threads'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:132:in `top_level'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:83:in `block in run'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:214:in `standard_exception_handling'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:80:in `run'
bin/rake:13:in `<top (required)>'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `load'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `kernel_load'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:23:in `run'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli.rb:451:in `exec'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/command.rb:28:in `run'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor.rb:527:in `dispatch'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli.rb:34:in `dispatch'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/base.rb:584:in `start'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli.rb:28:in `start'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/exe/bundle:28:in `block in <top (required)>'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/exe/bundle:20:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => uploads:migrate_to_s3
Quelques problèmes similaires non résolus :
Est-ce que d’autres sujets que vous avez mentionnés contiennent des instructions pour terminer les téléversements manuellement ?
C’est juste la dernière couche d’échec, les erreurs réelles de celle-ci se trouveraient plus haut car il est mentionné :
Non, je ne l’ai pas vu. Cependant, il doit y avoir une raison pour laquelle il ne l’ajoute pas après la compilation et nous devrions pouvoir voir cette erreur. Peut-être que je peux regarder s’il est indiqué comment voir cela.
Je voulais réessayer. J’ai ajouté les connexions S3 nécessaires à app.yml et les ai recompilées. cette fois, j’ai supprimé after_assets_precompile. Toutes les URL ont été changées en cdn et les fichiers de style n’ont pas été chargés. Lorsque j’entre manuellement dans le conteneur et que j’essaie : rake s3:upload_assets, j’obtiens l’erreur suivante.
Tentative d'application de la règle CORS ASSETS S3 dans le bucket cloudflarebucketname.
rake aborted!
Aws::S3::Errors::AccessDenied: Access Denied (Aws::S3::Errors::AccessDenied)
Si j’essaie ceci : rake uploads:migrate_to_s3 --trace
L’erreur que j’ai obtenue :
Migration des téléchargements vers S3 pour 'default'...
Certains téléchargements n'ont pas été migrés vers le nouveau schéma. L'exécution de la migration peut prendre un certain temps...
rake aborted!
FileStore::ToS3MigrationError: Certains téléchargements n'ont pas pu être migrés vers le nouveau schéma. Vous devez corriger cela manuellement. (FileStore::ToS3MigrationError)
Tous les messages d’erreur pour “rake s3:upload_assets” :
root@domain-app:/var/www/discourse# rake s3:upload_assets --trace
Plugin name is 'DiscourseMatheditor', but plugin directory is named 'discourse-matheditor'
Plugin name is 'discourse-post-voting', but plugin directory is named 'discourse-question-answer'
Plugin name is 'discourse-topic-voting', but plugin directory is named 'discourse-voting'
** Invoke s3:upload_assets (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke s3:ensure_cors_rules (first_time)
** Invoke environment
** Execute s3:ensure_cors_rules
Installing CORS rules...
Attempting to apply ASSETS S3 CORS ruleset in bucket cloudflarebucketname.
rake aborted!
Aws::S3::Errors::AccessDenied: Access Denied (Aws::S3::Errors::AccessDenied)
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.191.3/lib/seahorse/client/plugins/raise_response_errors.rb:17:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-s3-1.143.0/lib/aws-sdk-s3/plugins/sse_cpk.rb:24:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-s3-1.143.0/lib/aws-sdk-s3/plugins/dualstack.rb:21:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-s3-1.143.0/lib/aws-sdk-s3/plugins/accelerate.rb:43:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.191.3/lib/aws-sdk-core/plugins/checksum_algorithm.rb:111:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.191.3/lib/aws-sdk-core/plugins/jsonvalue_converter.rb:16:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.191.3/lib/aws-sdk-core/plugins/idempotency_token.rb:19:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.191.3/lib/aws-sdk-core/plugins/param_converter.rb:26:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.191.3/lib/seahorse/client/plugins/request_callback.rb:89:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.191.3/lib/aws-sdk-core/plugins/response_paging.rb:12:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.191.3/lib/seahorse/client/plugins/response_target.rb:24:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-core-3.191.3/lib/seahorse/client/request.rb:72:in `send_request'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-s3-1.143.0/lib/aws-sdk-s3/client.rb:5424:in `get_bucket_cors'
/var/www/discourse/lib/s3_helper.rb:385:in `fetch_bucket_cors_rules'
/var/www/discourse/lib/s3_helper.rb:166:in `ensure_cors!'
/var/www/discourse/lib/tasks/s3.rake:184:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:281:in `block in execute'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:281:in `each'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:281:in `execute'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:219:in `block in invoke_with_call_chain'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:199:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:199:in `invoke_with_call_chain'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:243:in `block in invoke_prerequisites'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:241:in `each'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:241:in `invoke_prerequisites'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:218:in `block in invoke_with_call_chain'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:199:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:199:in `invoke_with_call_chain'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/task.rb:188:in `invoke'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:188:in `invoke_task'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:138:in `block (2 levels) in top_level'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:138:in `each'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:138:in `block in top_level'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:147:in `run_with_threads'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:132:in `top_level'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:83:in `block in run'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:214:in `standard_exception_handling'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:80:in `run'
bin/rake:13:in `<top (required)>'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `load'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `kernel_load'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:23:in `run'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli.rb:451:in `exec'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/command.rb:28:in `run'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor.rb:527:in `dispatch'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli.rb:34:in `dispatch'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/base.rb:584:in `start'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli.rb:28:in `start'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/exe/bundle:28:in `block in <top (required)>'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/exe/bundle:20:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => s3:upload_assets => s3:ensure_cors_rules
Il est difficile de sortir de cette situation.
Quelque chose me dit que les codes S3 ne s’exécutent qu’après la compilation et ne prennent en charge qu’Amazon S3. Qu’en pensez-vous ?
Ça fonctionne pour moi. Il y a un réglage pour ignorer les règles CORS, je crois. Vous pourriez regarder Configurer un fournisseur de stockage d’objets compatible S3 pour les téléchargements pour voir ce que c’est.
this?: DISCOURSE_S3_INSTALL_CORS_RULE: false
Cela a très bien fonctionné, mais il y a un problème. Les fichiers theme-javascripts ne sont pas téléchargés sur S3. Naturellement, la conception du site est endommagée. Seul le dossier assets est téléchargé. Que pouvons-nous faire pour télécharger d’autres fichiers de conception ?
C’est la dernière fois que je vous dirai que vous incluez la partie qui appelle la tâche rake pour télécharger sur s3.
Bonne chance.
Qu’est-ce qui me manque ? Le code ci-dessous est joint et lorsque je le reconstruis, il charge les fichiers d’assets mais pas les fichiers de thème.
Lorsque j’exécute ceci en entrant dans le conteneur : rake uploads:migrate_to_s3, j’obtiens l’erreur suivante :
Updating the URLs in the database...
Removing old optimized images...
Flagging all posts containing lightboxes for rebake...
1001 posts were flagged for a rebake
rake aborted!
FileStore::ToS3MigrationError: 9 of 3769 uploads are not migrated to S3. S3 migration failed for db 'default'. (FileStore::ToS3MigrationError)
Mon fichier app.yml est le suivant. J’ai désactivé ce paramètre car il ne téléchargeait pas les thèmes-javascripts et les feuilles de style : DISCOURSE_CDN_URL.
J’essaierai de le rouvrir à minuit et de le compiler, mais je ne sais pas ce que j’ai manqué. J’ai cherché pour voir ce que vous pourriez entendre par là, mais je n’ai rien trouvé de différent : “la tâche rake pour télécharger vers s3”
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: 'auto'
DISCOURSE_S3_ENDPOINT: 'https://xxxxx.eu.r2.cloudflarestorage.com'
DISCOURSE_S3_ACCESS_KEY_ID: 'xxxxx'
DISCOURSE_S3_SECRET_ACCESS_KEY: 'xxxxx'
DISCOURSE_S3_CDN_URL: 'https://cdn.xxxxx.com'
#DISCOURSE_CDN_URL: 'https://cdn.xxxxx.com'
DISCOURSE_S3_BUCKET: 'cloudflarer2xxxxx'
#DISCOURSE_S3_BACKUP_BUCKET: 'cloudflarer2xxxxxbackups'
#DISCOURSE_BACKUP_LOCATION: 's3'
DISCOURSE_INCLUDE_S3_UPLOADS_IN_BACKUPS: true
DISCOURSE_S3_INSTALL_CORS_RULE: false
Je suis désolé d’avoir perdu votre temps, mais ce serait bien si la documentation utilisateur incluait ces problèmes. Maintenant, nous savons que r2 fonctionne. Il suffit d’ajouter les deux paramètres suivants :
DISCOURSE_S3_REGION: 'auto'
DISCOURSE_S3_INSTALL_CORS_RULE: false
Nous pouvons déplacer les dossiers images et assets du site vers la zone S3. Il n’y a que le problème que les fichiers de thème et les fichiers de style ne sont pas transférés et je vais réessayer à minuit. J’espère que j’aurai du succès et je marquerai ce problème comme résolu, bien sûr, après avoir expliqué la solution.
Remarque : Le serveur Postgresql est séparé, je n’utilise pas celui de localhost. Je suppose qu’il n’y a pas de problème avec cela.
Merci à tous ceux qui ont pris le temps.
C’est la commande à exécuter pour téléverser les actifs. Je suppose que vous avez toujours quelque chose qui empêche les actifs d’être téléversés par grin.
Bien, si je ne fais rien de mal, alors je dois trouver le problème. Lorsque j’entre dans le conteneur et exécute le code « rake s3:upload_assets », tout semble bien se passer. Même si j’active ou désactive ce paramètre, il ne charge pas les fichiers de style (theme-javascripts et stylesheets) : « DISCOURSE_CDN_URL: ‘https://cdn.xxxxx.com’ ».
rake s3:upload_assets --trace
Plugin name is 'DiscourseMatheditor', but plugin directory is named 'discourse-matheditor'
Plugin name is 'discourse-post-voting', but plugin directory is named 'discourse-question-answer'
Plugin name is 'discourse-topic-voting', but plugin directory is named 'discourse-voting'
** Invoke s3:upload_assets (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke s3:ensure_cors_rules (first_time)
** Invoke environment
** Execute s3:ensure_cors_rules
Installing CORS rules...
skipping
** Execute s3:upload_assets Skipping: assets/break_string-cc617154cd04790e.js
....
....
....
Comme je l’ai dit, si je ne fais pas quelque chose de mal, j’essaie de trouver l’erreur et comment la corriger. S’il y a une amélioration, je l’ajouterai ici, merci.
Salut tout le monde,
Je voulais partager mon expérience et les étapes sur la façon dont j’ai configuré avec succès Cloudflare R2 pour les téléchargements et les sauvegardes sur mon forum Discourse. J’espère que cela aidera ceux qui cherchent à utiliser Cloudflare R2 avec Discourse.
Aperçu de la configuration :
- Plateforme : Discourse (installation Bitnami)
- Bucket : Cloudflare R2
- Domaine personnalisé : Configuré pour servir les fichiers publiquement
- Configuration : Entièrement réalisée via les paramètres du site Discourse (aucune variable d’environnement n’a été modifiée)
Guide étape par étape :
- Créer un bucket Cloudflare R2 :
- Connectez-vous à votre compte Cloudflare et accédez au stockage R2.
- Créez un nouveau bucket pour vos téléchargements Discourse (par exemple,
forum-uploads). - Notez l’URL de l’API S3 du bucket, l’ID de clé d’accès et la Clé d’accès secrète.
- Configurer un domaine personnalisé pour le CDN :
- Pour servir le contenu de votre bucket R2 publiquement, créez un domaine personnalisé dans Cloudflare.
- Par exemple, j’ai utilisé
forumfiles.example.in. - Assurez-vous de configurer les paramètres DNS pour qu’ils pointent vers le CNAME fourni par Cloudflare. Comme j’ai un domaine sur Cloudflare, cela a été fait automatiquement pour moi.
- Configurer les paramètres du site Discourse :
- s3_bucket : Le nom de votre bucket R2 (par exemple,
forum-uploads). - s3_region : Défini sur US East (N. Virginia). Il n’y avait pas d’option automatique.
- s3_endpoint : Utilisez l’URL de l’API S3 de votre bucket fournie par Cloudflare (par exemple,
https://\u003cyour-bucket-unique-id\u003e.r2.cloudflarestorage.com). - s3_access_key_id : Votre ID de clé d’accès R2.
- s3_secret_access_key : Votre Clé d’accès secrète R2.
- s3_cdn_url : Votre domaine personnalisé pour le CDN (par exemple,
https://forumfiles.example.in). - Assurez-vous que enable s3 backups et enable s3 uploads sont cochés.
- s3_bucket : Le nom de votre bucket R2 (par exemple,
- Ajuster les autorisations et CORS :
- Définissez votre bucket R2 sur privé et configurez une politique CORS :
[
{
"AllowedHeaders": ["*"],
"AllowedMethods": ["GET", "POST", "PUT", "HEAD"],
"AllowedOrigins": ["*"],
"ExposeHeaders": ["ETag"],
"MaxAgeSeconds": 3000
}
]
- Cela garantit que les téléchargements fonctionnent correctement sans problèmes CORS.
- Tester la configuration :
- Téléchargez un fichier ou une image de test via votre forum Discourse pour vérifier que les téléchargements fonctionnent correctement.
- Vérifiez si les fichiers sont accessibles via votre domaine personnalisé (par exemple,
https://forumfiles.example.in/original/1X/...). - Vérifiez les sauvegardes, j’ai pu exécuter des sauvegardes avec succès. J’ai vérifié dans le bucket R2 et elles sont également listées dans les paramètres du site.
Conclusion :
En suivant ces étapes, j’ai pu intégrer Cloudflare R2 avec Discourse de manière transparente, en gérant efficacement les téléchargements et les sauvegardes. Si vous avez des questions ou rencontrez des problèmes, n’hésitez pas à demander !
Avez-vous testé si Discourse peut télécharger des fichiers depuis Cloudflare R2 ? par exemple pour inclure les téléchargements S3 dans une sauvegarde complète de l’instance.
Cela ne semble pas fonctionner car Cloudflare manque quelque chose dans l’API R2 S3, et migrate_to_s3 ne fonctionne pas non plus.

