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

¿Todavía no hay novedades sobre Cloudflare R2? Me pareció prometedor.

¿Leíste la nota al respecto arriba? Es incompatible con archivos gzip, y no hubo indicación de que hubiera un plan para cambiarlos. ¿Quizás funciona con todo excepto con las cargas?

¿Lo probaste? ¿Funcionó?

1 me gusta

Sí, lo leí, pero fue hace 2 años y algunas cosas pueden haber cambiado.

Quería probarlo hoy, activé R2 y agregué el sitio. Simplemente no estoy seguro de cómo configurar esto en el paso de discourse. Porque todavía no he podido encontrar dónde obtener las claves o los códigos secretos de Cloudflare. Estoy experimentando, ¡tal vez un pequeño detalle pueda ayudarme! :slight_smile:

3 Me gusta

Igual :thinking: mi bucket está activo pero quizás discourse aún no tiene soporte, pero espero que sí.

1 me gusta

Esta página describe cómo obtener las claves: Authentication · Cloudflare R2 docs

2 Me gusta

Intenté todo pero siempre obtengo este error:

Aws::S3::Errors::BadRequest

¿Me pregunto qué me estoy perdiendo?

Cuando subo una imagen desde el panel de R2, esta imagen se abre con la URL especial de CDN. El problema es que la imagen no se puede cargar en el sitio. Creé CORS y abrí todos los métodos.

[
  {
    "AllowedOrigins": [
      "https://SITENAME.com"
    ],
    "AllowedMethods": [
      "GET",
      "POST",
      "HEAD",
      "DELETE",
      "PUT"
    ]
  }
]

¿Alguna idea?

1 me gusta

Es posible, pero la palabra de Cloudflare de hace 2 años fue que no era probable que cambiara, por lo que alguien que esté realmente entusiasmado con R2 tendrá que averiguarlo. Dicho esto, parece posible que funcione para todo excepto los archivos gz, que creo que significa solo copias de seguridad.

Pero no tener copias de seguridad de s3 parece mucho que renunciar.

Eso suena a que no tienes la clave correcta o el punto final correcto.

2 Me gusta

Francamente, actualmente estoy usando Cloudflare en mi sitio de Discourse y, en general, es bueno tener todo en un solo lugar. Por lo tanto, lidiar con Amazon puede ser un poco agotador cuando tienes R2. Intenté instalar Amazon S3 durante un tiempo y, por alguna razón, no pude cargar los archivos de estilo. (Está bien, lo intentaré de nuevo) pero sería bueno no ignorar Cloudflare, y más aún cuando se usa el foro de soporte de Discourse de Cloudflare :slight_smile:

1 me gusta

Eso suele suceder cuando no agregas la estrofa que envía los activos a s3 (también la necesitarías para que cualquier servicio similar a s3 funcione si estableces la variable use_s3).

2 Me gusta

Entonces, ¿probaste algo más y funcionó? ¿Qué hiciste? ¿Puedes escribirlo como los demás en Configurar un proveedor de almacenamiento de objetos compatible con S3 para cargas?

¿Funciona para las copias de seguridad?

Hice todo lo que pude. Intenté hacerlo experimentalmente cambiando la configuración. Pero cada vez obtengo este error y, cuando lo miro, parece que la imagen no se ha cargado.

Tampoco pude ver nada en los códigos de error. Sería genial si pudiera hacerlo funcionar, tener la mayoría de las cosas en un solo panel (Cloudflare) sería emocionante y efectivo.

Lo intenté para hacer una copia de seguridad, lo siento. Cuando fallé, volví a Amazon. Estaría muy feliz si hubiera alguien más exitoso que yo en este sentido :slight_smile:

Cargué una imagen desde el panel de R2 y puedo acceder a ella. Sin embargo, no puedo cargar una imagen a través de Discourse, me da el error anterior.

Entonces, tal vez no funcione como dice la documentación que no funciona.

1 me gusta

O tal vez te deba una disculpa. Parece que logré que funcionara, aunque no tengo tiempo para prometer que pueda escribir instrucciones que te permitan hacerlo funcionar.

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: 'auto'
  DISCOURSE_S3_ENDPOINT: https://=ACCOUNT_ID=.r2.cloudflarestorage.com
  DISCOURSE_S3_ACCESS_KEY_ID: '=ACCESS_KEY_ID='
  DISCOURSE_S3_SECRET_ACCESS_KEY: '=SECRET_ACCESS_KEY'
  DISCOURSE_S3_CDN_URL: '=S3_CDN_URL='
  DISCOURSE_CDN_URL: '=CDN_URL='
  DISCOURSE_S3_BUCKET: '=BUCKET='
  DISCOURSE_S3_BACKUP_BUCKET: '=BUCKET=/backups'
  DISCOURSE_BACKUP_LOCATION: 's3'

No olvides la estrofa que realiza la tarea de rake para enviar las cargas a S3.

Intenta esto y mira si te funciona. Una prueba rápida muestra que funciona para cargas, activos y copias de seguridad. Así que, supongo que el problema con los archivos gzip ya no se aplica.

4 Me gusta

Después de corregir la región (auto) y la última url, funcionó. Sin embargo, hay un problema. Al recrearlo, los archivos de estilo no se cargan y, naturalmente, el sitio no se abre. Sin embargo, cuando lo abro solo para subir, puedo subir imágenes del sitio y podemos acceder a ellas a través de la url del cdn. El único problema es que quiero que los archivos de estilo se sirvan desde CDN. ¿Cómo podemos hacer esto? Creo que este es nuestro único problema.

Necesitas seguir las instrucciones para enviar los activos a S3:

¿Qué usaste para CDN? Si fue Cloudflare, ¿cómo lo configuraste?

after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets
          - sudo -E -u discourse bundle exec rake s3:expire_missing_assets

Añadí esto. Cuando recompilo, todos los enlaces del sitio cambian con la URL de cdn. Sin embargo, estos archivos de estilo no se suben a cloudflare. Así que solo añadí la configuración de la región de carga al archivo app.yml y lo compilé de esa manera. Cuando activo S3 desde el administrador, las imágenes recién subidas se suben a cloudflare R2 y se proporciona acceso.

El único problema es que cuando añado la configuración de S3 antes de compilar el archivo app.yml, los archivos de estilo recién creados no parecen cargarse. Pero las URL y las URL de cdn cambian en el sitio.

CORS:

[
  {
    "AllowedOrigins": [
      "https://domain.com"
    ],
    "AllowedMethods": [
      "GET",
      "POST",
      "PUT",
      "HEAD",
      "DELETE"
    ]
  }
]

¿Podría este problema tener algo que ver con Argo? Sin embargo, las imágenes se cargan actualmente sin ningún problema.

Para depurar, puedes entrar en el contenedor e intentar ejecutar las tareas de rake allí y ver qué sucede.

Pasé unas 4 horas en esto ayer, así que me temo que mi soporte gratuito para este proyecto está a punto de terminar.

No sé sobre lo de CORS. Permitiría todo desde todas partes para asegurarme de que no sea ese el problema. No hice nada con CORS en mi sitio de prueba.

¿Estás ejecutando esto en k8s?

1 me gusta

Lamento ocupar tu tiempo. Si pudiera ayudar financieramente, lo haría. Respeto tu tiempo.

No sé qué es k8s. Estoy trabajando en mi propio servidor y activé argo. R2 también está activo. Todo funciona muy bien ahora, solo que después de la nueva compilación no carga los archivos de estilo (js, css, etc.) en R2. Volveré a ejecutar las pruebas necesarias más tarde y las agregaré aquí. Si tengo éxito, explicaré en detalle cómo encontrar el problema o hacerlo funcionar.

1 me gusta

¿Qué es Argo?

Si se trata de una instalación estándar, puedes ejecutar el comando rake dentro del contenedor

./launcher enter app
rake ...

¿Estás seguro de que estás incluyendo la parte USE_S3? (Supongo que sí, ya que creo que eso es lo que hace que los activos se esperen en la CDN)

Argo: Overview · Cloudflare Argo Smart Routing docs

Agregué la configuración USE_S3 antes de compilar, ejemplo a continuación:

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: 'auto'
  DISCOURSE_S3_ENDPOINT: 'https://xxxxxxxxxxxxxxxxx.eu.r2.cloudflarestorage.com'
  DISCOURSE_S3_ACCESS_KEY_ID: 'xxxxxxxxxxxxxxxxx'
  DISCOURSE_S3_SECRET_ACCESS_KEY: 'xxxxxxxxxxxxxxxxx'
  DISCOURSE_S3_CDN_URL: 'https://cdn.domain.com'
  DISCOURSE_CDN_URL: 'https://cdn.domain.com'
  DISCOURSE_S3_BUCKET: 'cloudflaredomain'
  DISCOURSE_S3_BACKUP_BUCKET: 'cloudflaredomain/backups'
  DISCOURSE_BACKUP_LOCATION: 's3'

Después de recompilar, todas las URL cambian como se esperaba. URL de CDN. El único problema es que estos activos no se cargan en R2. Ya había agregado esta configuración:

  after_code:
     - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets
          - sudo -E -u discourse bundle exec rake s3:expire_missing_assets

Aquí está el principio de app.yml:

templates:
  #- "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  ## Descomenta la siguiente línea para habilitar el oyente IPv6
  #- "templates/web.ipv6.template.yml"
  #- "templates/web.ratelimited.template.yml"
  ## Descomenta estas dos líneas si deseas agregar Lets Encrypt (https)
  # - "templates/web.ssl.template.yml"
  # - "templates/web.letsencrypt.ssl.template.yml"
  - "templates/cloudflare.template.yml"

## ¿qué puertos TCP/IP debe exponer este contenedor?
## Si deseas que Discourse comparta un puerto con otro servidor web como Apache o nginx,
## consulta https://meta.discourse.org/t/17247 para obtener detalles
expose:
  - "80:80"   # http
  - "443:443" # https

Ahora intentaré ingresar al contenedor y cargar los activos en S3.