Cloudflare R2: Navegando por la configuración y gestionando errores de configuración

Esa línea no está correctamente indentada. Debería tener 2 espacios exactamente como after_code

¿Es esto un problema? porque algunas configuraciones comienzan sin espacios. y cuando compilo no da ningún error. Ejemplo:

Todo eso parece bien. ¿Cómo es la parte after_assets_precompile sobre la que pregunté?

Necesitas insertar dos espacios delante de “after_assets_precompile”.

2 Me gusta

Lo haré y te avisaré. Muchas gracias por tu tiempo <3

1 me gusta

Al aplicar esto, se produce el siguiente error y no carga, no se puede acceder al sitio:

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.

Ejecuté ./discourse-doctor, luego recompilé, obtuve el mismo error.

Cuando entro al contenedor y ejecuto los siguientes códigos, obtengo un error:

rake uploads:migrate_to_s3

Error:

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

Algunos problemas similares sin resolver:

¿Alguno de los otros temas que mencionaste tiene instrucciones para finalizar las cargas manualmente?

Esa es solo la capa final de fallo, los errores reales de eso estarían más arriba, ya que menciona:

1 me gusta

No, no lo vi. Sin embargo, debe haber una razón por la que no lo agrega después de la compilación y deberíamos poder ver este error. Quizás pueda echar un vistazo si se indica cómo ver esto.

Quise intentarlo de nuevo. Agregué las conexiones S3 necesarias a app.yml y las volví a compilar. Esta vez, eliminé after_assets_precompile. Todas las URL cambiaron a cdn y los archivos de estilo no se cargaron. Cuando ingreso manualmente al contenedor e intento: rake s3:upload_assets, obtengo el siguiente error.

Intentando aplicar el conjunto de reglas CORS ASSETS S3 en el bucket cloudflarebucketname.
rake abortado!
Aws::S3::Errors::AccessDenied: Acceso denegado (Aws::S3::Errors::AccessDenied)

Si intento esto: rake uploads:migrate_to_s3 --trace

El error que obtuve:


Migrando cargas a S3 para 'default'...
Algunas cargas no se migraron al nuevo esquema. Ejecutando la migración, esto puede tardar un tiempo...
rake abortado!
FileStore::ToS3MigrationError: Algunas cargas no pudieron ser migradas al nuevo esquema. Necesitas arreglar esto manualmente. (FileStore::ToS3MigrationError)

Todos los mensajes de error para “rake s3:upload_assets”:

root@domain-app:/var/www/discourse# rake s3:upload_assets --trace
El nombre del plugin es 'DiscourseMatheditor', pero el directorio del plugin se llama 'discourse-matheditor'
El nombre del plugin es 'discourse-post-voting', pero el directorio del plugin se llama 'discourse-question-answer'
El nombre del plugin es 'discourse-topic-voting', pero el directorio del plugin se llama 'discourse-voting'
** Invocar s3:upload_assets (primera_vez)
** Invocar environment (primera_vez)
** Ejecutar environment
** Invocar s3:ensure_cors_rules (primera_vez)
** Invocar environment
** Ejecutar s3:ensure_cors_rules
Instalando reglas CORS...
Intentando aplicar el conjunto de reglas CORS ASSETS S3 en el bucket cloudflarebucketname.
rake abortado!
Aws::S3::Errors::AccessDenied: Acceso denegado (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:60:in `sync'
/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

Es difícil salir de esta situación.

Algo me dice que los códigos S3 se ejecutan solo después de la compilación y admiten Amazon S3. ¿Qué piensas?

Me funciona. Creo que hay una configuración para omitir las reglas de CORS. Podrías consultar Configurar un proveedor de almacenamiento de objetos compatible con S3 para subidas para ver qué es.

esto?: DISCOURSE_S3_INSTALL_CORS_RULE: false

Esto funcionó muy bien, pero hay un problema. Los archivos theme-javascripts no se suben a S3. Naturalmente, el diseño del sitio está dañado. Solo se carga la carpeta de activos. ¿Qué podemos hacer para subir otros archivos de diseño?

Esta es la última vez que te diré que incluyas la parte que llama a la tarea de rake para subir a s3.

Buena suerte.

1 me gusta

¿Qué me falta? El código a continuación está adjunto y cuando lo reconstruyo carga los archivos de assets pero no los archivos de tema.


Cuando ejecuto esto entrando al contenedor: rake uploads:migrate_to_s3 obtengo el siguiente error:

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)

Mi archivo app.yml es el siguiente. Desactivé esta configuración porque no subía los theme-javascripts y stylesheets: DISCOURSE_CDN_URL.

Intentaré abrirlo de nuevo a medianoche y compilarlo, pero no sé qué me perdí. Busqué para ver a qué más te referías con esto, pero no pude encontrar nada diferente: “la tarea rake para subir a 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

Lamento haberte hecho perder el tiempo, pero sería bueno que la documentación del usuario incluyera estos problemas. Ahora sabemos que r2 funciona. Solo agrega las siguientes dos configuraciones:


DISCOURSE_S3_REGION: 'auto'
DISCOURSE_S3_INSTALL_CORS_RULE: false

Podemos mover las carpetas de imágenes y assets del sitio al área S3. Solo está el problema de que los archivos de tema y los archivos de estilo no se transfieren y lo intentaré de nuevo a medianoche. Espero tener éxito y marcaré este problema como resuelto, por supuesto, después de explicar la solución.

Nota: El servidor Postgresql está separado, no uso el de localhost. Supongo que no hay problema con esto.
Gracias a todos los que se tomaron el tiempo.

Ese es el comando que debes ejecutar para subir los activos. Mi suposición es que todavía tienes algo mal que impide que los activos se suban a grin.

1 me gusta

Bien, si no estoy haciendo nada mal, entonces necesito encontrar el problema. Cuando entro al contenedor y ejecuto el código “rake s3:upload_assets”, todo parece estar bien. Incluso si activo o desactivo esta configuración, no carga los archivos de estilo (theme-javascripts y 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
....
....
....

Como dije, si no estoy haciendo algo mal, intento encontrar el error y cómo solucionarlo. Si hay alguna mejora, la agregaré aquí, gracias.

Hola a todos,

Quería compartir mi experiencia y los pasos sobre cómo configuré con éxito Cloudflare R2 tanto para cargas como para copias de seguridad en mi foro de Discourse. Espero que esto ayude a otros que buscan usar Cloudflare R2 con Discourse.

Resumen de la configuración:

  • Plataforma: Discourse (instalación de Bitnami)
  • Bucket: Cloudflare R2
  • Dominio personalizado: Configurado para servir archivos públicamente
  • Configuración: Realizada completamente a través de la configuración del sitio de Discourse (no se tocaron variables de entorno)

Guía paso a paso:

  1. Crear un bucket de Cloudflare R2:
    • Inicia sesión en tu cuenta de Cloudflare y navega a Almacenamiento R2.
    • Crea un nuevo bucket para las cargas de tu Discourse (por ejemplo, forum-uploads).
    • Anota la URL de la API S3 del bucket, el ID de clave de acceso y la Clave de acceso secreta.
  2. Configurar dominio personalizado para CDN:
    • Para servir el contenido de tu bucket R2 públicamente, crea un dominio personalizado en Cloudflare.
    • Por ejemplo, usé forumfiles.example.in.
    • Asegúrate de configurar los ajustes de DNS para que apunten al CNAME proporcionado por Cloudflare. Como tengo un dominio en Cloudflare, lo hizo por mí.
  3. Configurar los ajustes del sitio de Discourse:
    • s3_bucket: El nombre de tu bucket R2 (por ejemplo, forum-uploads).
    • s3_region: Establecer como Este de EE. UU. (N. Virginia). No había opción de automático.
    • s3_endpoint: Usa la URL de la API S3 del bucket proporcionada por Cloudflare (por ejemplo, https://<tu-id-único-de-bucket>.r2.cloudflarestorage.com).
    • s3_access_key_id: Tu ID de clave de acceso de R2.
    • s3_secret_access_key: Tu Clave de acceso secreta de R2.
    • s3_cdn_url: Tu dominio personalizado para CDN (por ejemplo, https://forumfiles.example.in).
    • Asegúrate de que las casillas habilitar copias de seguridad s3 y habilitar cargas s3 estén marcadas.
  4. Ajustar permisos y CORS:
    • Establece tu bucket R2 como privado y configura una política CORS:
[
  {
      "AllowedHeaders": ["*"],
      "AllowedMethods": ["GET", "POST", "PUT", "HEAD"],
      "AllowedOrigins": ["*"],
      "ExposeHeaders": ["ETag"],
      "MaxAgeSeconds": 3000
  }
]
*   Esto asegura que las cargas funcionen correctamente sin problemas de CORS.
  1. Probar la configuración:
    • Sube un archivo o imagen de prueba a través de tu foro de Discourse para verificar que las cargas funcionen correctamente.
    • Comprueba si los archivos son accesibles a través de tu dominio personalizado (por ejemplo, https://forumfiles.example.in/original/1X/...).
    • Verifica las copias de seguridad, pude ejecutar copias de seguridad con éxito. Verifiqué en el bucket R2 y también aparece en la configuración del sitio.

Conclusión:

Siguiendo estos pasos, pude integrar Cloudflare R2 con Discourse sin problemas, gestionando tanto las cargas como las copias de seguridad de manera eficiente. Si tienes alguna pregunta o encuentras algún problema, ¡no dudes en preguntar!

6 Me gusta

¿Probaste si Discourse puede descargar archivos de Cloudflare R2? por ejemplo, para incluir cargas de S3 en una copia de seguridad completa de la instancia.

No parece funcionar porque a Cloudflare le falta algo en la API S3 de R2, tampoco funciona migrate_to_s3.

1 me gusta