Configurar un proveedor de almacenamiento de objetos compatible con S3 para cargas

:information_source: Este tema cubre cómo configurar algunos proveedores comunes de almacenamiento de objetos compatibles con S3 (clones de S3). Consulte Set up file and image uploads to S3 para obtener más detalles sobre la configuración de Amazon AWS S3, que es compatible oficialmente y se utiliza internamente por Discourse para nuestros servicios de alojamiento.

Proveedor Nombre del servicio ¿Funciona con Discourse?
Amazon AWS S3
Digital Ocean Spaces
Linode Object Storage
Google Cloud Storage
Scaleway Object Storage
Vultr Object Storage
BackBlaze Cloud Storage Sí*
Autoalojado MinIO
Azure Blob Storage Flexify.IO
Oracle Cloud Object Storage No [1]
Wasabi Object Storage Quizás
Cloudflare R2
Contabo Object Storage No

Si ha logrado que funcione un servicio diferente, agréguelo a esta wiki.

Configuración

Para almacenar los activos estáticos de Discourse en su almacenamiento de objetos, agregue esta configuración en su app.yml bajo la sección hooks:

  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

Al usar almacenamiento de objetos, también necesita un CDN para servir lo que se almacena en el bucket. Usé StackPath CDN en mis pruebas y, más allá de necesitar configurar Dynamic Caching By Header: Accept-Encoding en su configuración, funciona bien.

DISCOURSE_CDN_URL es un CDN que apunta a su nombre de host de Discourse y almacena en caché las solicitudes. Se usará principalmente para activos extraíbles: CSS y otros activos de temas.

DISCOURSE_S3_CDN_URL es un CDN que apunta a su bucket de almacenamiento de objetos y almacena en caché las solicitudes. Se usará principalmente para activos empujables: JS, imágenes y cargas de usuarios.

Recomendamos que sean diferentes y que los administradores configuren ambos.

No usar un CDN (o ingresar la URL del bucket como la URL del CDN) probablemente cause problemas y no está soportado.

En los siguientes ejemplos, https://falcoland-files-cdn.falco.dev es un CDN configurado para servir los archivos bajo el bucket. El nombre del bucket se estableció como falcoland-files en mis ejemplos.

Configurar estas opciones en variables de entorno en su app.yml es recomendable porque es así como CDCK lo hace en su infraestructura, por lo que está bien probado. Además, la tarea de subir activos ocurre después de que los activos son compilados, lo cual sucede en una reconstrucción. Si desea iniciar un Discourse que funcione correctamente con almacenamiento de objetos desde el principio, necesita establecer las variables de entorno para que los activos se suban antes de que el sitio comience.

Elija su proveedor de la lista a continuación y agregue estas configuraciones a la sección env de su archivo app.yml, ajustando los valores en consecuencia:

AWS S3

Lo que soportamos oficialmente y usamos internamente. Su oferta de CDN Cloudfront también funciona para frontear los archivos del bucket. Consulte Set up file and image uploads to S3 para saber cómo configurar los permisos correctamente.

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: us-west-1
  DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
  DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
  DISCOURSE_S3_CDN_URL: https://falcoland-files-cdn.falco.dev
  DISCOURSE_S3_BUCKET: falcoland-files
  DISCOURSE_S3_BACKUP_BUCKET: falcoland-files/backups
  DISCOURSE_BACKUP_LOCATION: s3

Digital Ocean Spaces

La oferta de DO es buena y funciona fuera de la caja. Está bien habilitar Restringir listado de archivos. El único problema es que su oferta de CDN está terriblemente rota, por lo que necesita usar un CDN diferente para los archivos. Además, no debe instalar la regla CORS, ya que la reinstala en cada reconstrucción.

Ejemplo de configuración:

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: whatever
  DISCOURSE_S3_ENDPOINT: https://nyc3.digitaloceanspaces.com
  DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
  DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
  DISCOURSE_S3_CDN_URL: https://falcoland-files-cdn.falco.dev
  DISCOURSE_S3_BUCKET: falcoland-files
  DISCOURSE_S3_BACKUP_BUCKET: falcoland-files/backups
  DISCOURSE_BACKUP_LOCATION: s3
  DISCOURSE_S3_INSTALL_CORS_RULE: false 

Linode Object Storage

Se requiere un parámetro de configuración adicional, HTTP_CONTINUE_TIMEOUT, para Linode.

Ejemplo de configuración:

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: us-east-1
  DISCOURSE_S3_HTTP_CONTINUE_TIMEOUT: 0
  DISCOURSE_S3_ENDPOINT: https://us-east-1.linodeobjects.com
  DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
  DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
  DISCOURSE_S3_CDN_URL: https://falcoland-files-cdn.falco.dev
  DISCOURSE_S3_BUCKET: falcoland-files
  DISCOURSE_S3_BACKUP_BUCKET: falcoland-files/backup
  DISCOURSE_BACKUP_LOCATION: s3

Google Cloud Platform Storage

El listado de archivos está roto, por lo que necesita una variable de entorno adicional para omitirlo para que los activos funcionen. También omita CORS y configúrelo manualmente.

:warning: Dado que no puede listar archivos, no podrá listar copias de seguridad y las copias de seguridad automáticas fallarán, no recomendamos usarlo para copias de seguridad. Sin embargo, algunos sugieren que si cambia el rol de Storage Legacy Object Owner a Storage Legacy Bucket Owner, las copias de seguridad funcionan correctamente. Consulte este tema para la discusión específica de Google Cloud.

Hay un plugin de terceros para mejorar la integración en Discourse GCS Helper.

Ejemplo de configuración:

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: us-east1
  DISCOURSE_S3_INSTALL_CORS_RULE: false
  FORCE_S3_UPLOADS: 1
  DISCOURSE_S3_ENDPOINT: https://storage.googleapis.com
  DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
  DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
  DISCOURSE_S3_CDN_URL: https://falcoland-files-cdn.falco.dev
  DISCOURSE_S3_BUCKET: falcoland-files
  #DISCOURSE_S3_BACKUP_BUCKET: falcoland-files/backup
  #DISCOURSE_BACKUP_LOCATION: s3

Scaleway Object Storage

La oferta de Scaleway también es muy buena y todo funciona bien en su mayoría.

:warning: Las cargas multipartitas de Scaleway solo admiten un máximo de 1,000 partes. Esto no coincide con Amazon S3, que admite un máximo de 10,000 partes. Para instancias más grandes, esto hará que Discourse fallé en las copias de seguridad y la carga incompleta puede necesitar ser eliminada manualmente antes de realizar más intentos. Para instancias pequeñas, esto no es un problema. Scaleway parece bastante abierto a los comentarios, así que si desea que se cambie este límite, debería contactarlos.

Tenga en cuenta que para el parámetro DISCOURSE_S3_ENDPOINT, Discourse usa el endpoint de toda la región: https://s3.{region}.scw.cloud. El “Bucket endpoint” que encuentra en su panel de Scaleway viene en la forma https://{bucketName}.s3.{region}.scw.cloud. Omita el subdominio del nombre del bucket para evitar errores de conexión.

Ejemplo de configuración:

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: fr-par
  DISCOURSE_S3_ENDPOINT: https://s3.fr-par.scw.cloud
  DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
  DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
  DISCOURSE_S3_CDN_URL: https://falcoland-files-cdn.falco.dev
  DISCOURSE_S3_BUCKET: falcoland-files
  DISCOURSE_S3_BACKUP_BUCKET: falcoland-files/backups
  DISCOURSE_BACKUP_LOCATION: s3

Vultr Object Storage

Se requiere un parámetro de configuración adicional, HTTP_CONTINUE_TIMEOUT, para Vultr.

Ejemplo de configuración:

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: whatever
  DISCOURSE_S3_HTTP_CONTINUE_TIMEOUT: 0
  DISCOURSE_S3_ENDPOINT: https://ewr1.vultrobjects.com
  DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
  DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
  DISCOURSE_S3_CDN_URL: https://falcoland-files-cdn.falco.dev
  DISCOURSE_S3_BUCKET: falcoland-files
  DISCOURSE_S3_BACKUP_BUCKET: falcoland-files/backup
  DISCOURSE_BACKUP_LOCATION: s3

Backblaze B2 Cloud Storage

Debe omitir CORS y configurarlo manualmente.

Hay reportes de que clean up orphan uploads no funciona correctamente con BackBlaze. Debe cambiar las reglas de ciclo de vida de su bucket para que la limpieza de huérfanos funcione.

Ejemplo de configuración:

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: "us-west-002"
  DISCOURSE_S3_INSTALL_CORS_RULE: false
  DISCOURSE_S3_CONFIGURE_TOMBSTONE_POLICY: false
  DISCOURSE_S3_ENDPOINT: https://s3.us-west-002.backblazeb2.com
  DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
  DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
  DISCOURSE_S3_CDN_URL: https://falcoland-files-cdn.falco.dev
  DISCOURSE_S3_BUCKET: falcoland-files
  DISCOURSE_S3_BACKUP_BUCKET: falcoland-files/backup
  DISCOURSE_BACKUP_LOCATION: s3

Nota: Durante la migración inicial a B2, puede encontrarse con el límite de 2500 transacciones diarias gratuitas de clase C. Necesitará agregar un método de pago para eliminar los límites.

MinIO Storage Server

Hay algunas advertencias y requisitos que debe asegurarse de cumplir antes de poder usar el servidor de almacenamiento MinIO como alternativa a S3:

  1. Tiene una instancia de servidor MinIO completamente configurada
  2. Tiene el soporte de dominio habilitado en la configuración de MinIO, para URLs de buckets basadas en dominio. Este es un requisito de configuración obligatorio para MinIO y Discourse, ya que MinIO aún admite los estilos “path” heredados de S3 que ya no son compatibles en Discourse.
  3. Tiene la configuración de DNS configurada correctamente para MinIO para que los subdominios de los buckets resuelvan correctamente al servidor MinIO y el servidor MinIO está configurado con un dominio base (en este caso, minio.example.com)
  4. El bucket discourse-data existe en el servidor MinIO y tiene una política “pública” establecida en él
  5. Su URL de CDN S3 apunta a un CDN configurado correctamente que apunta al bucket y almacena en caché las solicitudes, como se mencionó anteriormente en este documento.
  6. Sus CDNs están configurados para usar realmente un encabezado “Host” de la URL principal de S3 - por ejemplo, discourse-data.minio.example.com cuando obtiene datos - de lo contrario puede causar problemas CORB.

Asumiendo que se cumplen las advertencias y prerrequisitos anteriores, un ejemplo de configuración sería algo como esto:

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: anything
  DISCOURSE_S3_ENDPOINT: https://minio.example.com
  DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
  DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
  DISCOURSE_S3_CDN_URL: https://discourse-data-cdn.example.com
  DISCOURSE_S3_BUCKET: discourse-data
  DISCOURSE_S3_BACKUP_BUCKET: discourse-backups
  DISCOURSE_BACKUP_LOCATION: s3
  DISCOURSE_S3_INSTALL_CORS_RULE: false

CORS seguirá estando habilitado en MinIO incluso si la regla no se instala por el reconstructor de la aplicación - por defecto, parece, CORS está habilitado en todos los verbos HTTP en MinIO, y MinIO no admite BucketCORS (API S3) como resultado.

Azure Blob Storage con Flexify.IO

Azure Blob Storage no es un servicio compatible con S3, por lo que no se puede usar con Discourse. Hay un plugin, pero está roto.

La forma más fácil de exponer una interfaz compatible con S3 para Azure Blob Storage es agregar un servidor Flexify.IO que traduzca el protocolo de almacenamiento de Azure a S3.

Hasta la fecha de esta escritura, el servicio es gratuito en Azure y solo necesita una capa de VM muy básica (barata) para comenzar a ejecutarlo. Sin embargo, requiere un poco de configuración.

  1. En el portal de Azure, cree un nuevo recurso de Flexify.IO - Amazon S3 API for Azure Blob Storage.
  2. Para uso ligero, la configuración mínima de VM parece funcionar perfectamente. Puede aceptar la mayoría de la configuración predeterminada. Recuerde guardar el archivo de clave PEM cuando cree la VM.
  3. Vaya al enlace de la VM de Flexify.IO e ingrese al sistema. Siga las instrucciones configurando el proveedor de datos de Azure Blob Storage y el endpoint S3 generado. Asegúrese de que la configuración del endpoint Public read access to all objects in virtual buckets sea verdadera. Copie la URL del endpoint S3 y las claves.
  4. Presione Nuevo Bucket Virtual y cree un bucket virtual. Puede tener el mismo nombre que su contenedor de Azure Blob Storage, o puede ser un nombre diferente. Vincule cualquier contenedor(s) para fusionar en este bucket virtual. Este bucket virtual se usa para exponer un bucket legible públicamente vía S3.
  5. Por defecto, Flexify.IO instala un certificado SSL autofirmado, mientras que un endpoint S3 requiere HTTPS. Inicie sesión en la VM usando el archivo de clave (el nombre de usuario es por defecto azureuser) y reemplace los siguientes archivos con los archivos correctos:
  • /etc/flexify/ssl/cert.pem - reemplace con el archivo de certificado (codificación PEM)

  • /etc/flexify/ssl/key.pem - reemplace con el archivo de clave privada (codificación PKCS#8 PEM, ese es el que comienza con BEGIN PRIVATE KEY y no BEGIN RSA PRIVATE KEY que es PKCS#1)

    Estos archivos son de root, por lo que tendría que usar sudo para reemplazarlos. Es mejor asegurarse de que los archivos de reemplazo tengan la misma propiedad y permisos que los originales, lo que significa root:root y permiso 600.

  1. Por defecto, Flexify.IO crea un servicio S3 de nivel raíz con múltiples buckets. Discourse requiere soporte de subdominio para buckets. Vaya a: <IP de su VM Flexify.IO>/flexify-io/manage/admin/engines/configs/1 que abrirá una página de configuración oculta!
  2. Especifique el dominio base de S3 (digamos que es s3.mydomain.com) en el campo Endpoint hostname, que debería estar en blanco por defecto. Presione Guardar para guardar la configuración.
  3. Reinicie la VM de Flexify.IO en el portal de Azure.
  4. En su DNS, mapee s3.mydomain.com y *.s3.mydomain.com a la IP de la VM de Flexify.IO.
  5. En Discourse, configure lo siguiente en la página de administración (sí, no hay necesidad de que la configuración esté en app.yml):
use s3: true
s3 region: anything
s3 endpoint: https://s3.mydomain.com
s3 access key: myaccesskey
s3 secret assess key: mysecret key
s3 cdn url: https://<azure-blob-account>.blob.core.windows.net/<container>
s3 bucket: <virtual bucket>
s3 backup bucket: <backup bucket>  (cualquier contenedor servirá, ya que no requiere acceso de lectura pública y Flexify.IO los expondrá automáticamente)
backup location: s3

No se recomienda usar el mismo bucket para producción y staging. Si lo hace de todos modos, tome medidas para asegurarse de que su sitio de staging no elimine sus activos de producción (establezca s3 disable cleanup como mínimo, y tenga cuidado de que no elimine las copias de seguridad de producción).

Wasabi

@pfaffman probó wasabi para copias de seguridad, pero parecía fallar intermitentemente y en silencio, dejando copias de seguridad en el disco duro y eventualmente llenando el disco. Ni wasabi ni meta tenían pistas, por lo que no lo recomiendo, aunque sus resultados pueden variar. @pfaffman ahora está bastante seguro de que este problema se debió a que las copias de seguridad y los reinicios automáticos estaban programados al mismo tiempo; se usó solo para copias de seguridad, pero parecía funcionar bien. Si alguien quiere intentarlo y reportar aquí, debería funcionar, al menos para copias de seguridad.

Oracle Cloud

Oracle Cloud no admite el acceso a buckets mediante estilo de host virtual y no funcionará

Cloudflare R2

Cloudflare R2 es compatible con el almacenamiento de objetos S3 cuando se usa Cloudflare CDN. El plan gratuito de Cloudflare ofrece 10 GB de almacenamiento que debería ser más que suficiente para las necesidades de la mayoría de los foros.

Para configurar Cloudflare R2, deberá configurar los ajustes relevantes en el panel de Cloudflare bajo Almacenamiento de Objetos R2.

Dependiendo de sus necesidades (cargas o copias de seguridad o ambos), estos son los ajustes relevantes para insertar en su archivo app.yml o en su búsqueda de Admin-Todos los ajustes del sitio para S3:

  DISCOURSE_ENABLE_S3_UPLOADS: true
  DISCOURSE_S3_REGION: auto
  DISCOURSE_S3_ENDPOINT: https://<your-account-id>.r2.cloudflarestorage.com
  DISCOURSE_S3_ACCESS_KEY_ID: "xxx"
  DISCOURSE_S3_SECRET_ACCESS_KEY: "xxx"
  DISCOURSE_S3_UPLOAD_BUCKET: your-upload-bucket-name
  DISCOURSE_S3_CDN_URL: https://uploads.yourdomain.com
# DISCOURSE_S3_USE_CDN_URL_FOR_ALL_UPLOADS: true

  DISCOURSE_ENABLE_DIRECT_S3_UPLOADS: true
  DISCOURSE_S3_USE_ACLS: false
  
  DISCOURSE_BACKUP_LOCATION: s3
  DISCOURSE_S3_BACKUP_BUCKET: your-backup-bucket-name

Si no desea editar su app.yml, puede hacerlo en la interfaz de administración:

“Admin → Todos los ajustes del sitio” (busque S3):

  • Habilitar cargas S3 = true
  • Habilitar cargas directas S3 = true
  • ID de clave de acceso S3 = "xxx"
  • Clave de acceso secreto S3 = "xxx"
  • Región S3 = any
  • Bucket de carga S3 = your upload bucket name
  • Endpoint S3 = https://<your-account-id>.r2.cloudflarestorage.com
  • URL de CDN S3 = https://uploads.yourdomain.com
  • S3 usar ACLs = false (¡desactive esto!)
  • Bucket de copia de seguridad S3 = your backup bucket name
  • Ubicación de copia de seguridad = S3

Notas importantes sobre la configuración de Cloudflare R2:

  1. Al configurar su app.yml o web_only.yml para Cloudflare R2, solo establezca DISCOURSE_S3_CDN_URL. NO establezca DISCOURSE_CDN_URL. Si está proxying su dominio principal a través de Cloudflare, ya está almacenando en caché y sirviendo sus activos de la aplicación automáticamente. Si intenta configurar un DISCOURSE_CDN_URL separado usando DNS de Cloudflare, el enrutamiento estricto de host de NGINX de Discourse rechazará las solicitudes, resultando en bucles infinitos de redirección 301, bloqueos de política CORS y un sitio roto.
  • Deje DISCOURSE_CDN_URL comentado.
  • Establezca DISCOURSE_S3_CDN_URL: https://your-r2-custom-domain.com
  1. Permisos de Token de API: Dado que Discourse solo tiene un conjunto de campos de credenciales, el token de API que genera en Cloudflare debe tener permiso para acceder tanto a su bucket de carga como a su bucket de copia de seguridad. Al crear su token, seleccione “Aplicar a todos los buckets” o use “Aplicar a buckets específicos” y asegúrese de que ambos estén marcados. Además, asegúrese de marcar Object Read & Write al crear la clave de API (el predeterminado es solo Object Read only).

  2. Al copiar la URL del endpoint de Cloudflare, puede agregar el nombre del bucket a la URL: debe eliminar el nombre del bucket del final de la cadena en su archivo .yml (o ajustes de administración) si se pega.

  3. Descomente # DISCOURSE_S3_USE_CDN_URL_FOR_ALL_UPLOADS: true si desea usar su bucket de carga R2 para todas las cargas, incluidos archivos PDF y ZIP. (Tenga en cuenta que esto hará que todos los archivos cargados estén disponibles públicamente mediante enlace directo)

  4. Si habilita DISCOURSE_ENABLE_DIRECT_S3_UPLOADS (true), entonces debe deshabilitar DISCOURSE_S3_USE_ACLS (false). Esto se debe a que Cloudflare R2 usa permisos a nivel de bucket; su bucket de carga debe ser público y el bucket de copia de seguridad debe ser privado. Para cargas de Cloudflare R2, NO tiene que configurar las tareas de reglas CORS o escribir json IAM, ya que lo configurará en el panel de Cloudflare cuando configure los permisos de su bucket. El token “Object Read & Write” de Cloudflare otorga automáticamente permisos de carga multipartita, y pegar la siguiente regla CORS directamente en la configuración del bucket de cargas R2 del Panel de Cloudflare bajo CORS Policy reemplaza la necesidad de la tarea rake.

[
  {
    "AllowedOrigins": [
      "https://forum.yourdomain.com"
    ],
    "AllowedMethods": [
      "GET",
      "PUT",
      "POST",
      "DELETE",
      "HEAD"
    ],
    "AllowedHeaders": [
      "*"
    ],
    "ExposeHeaders": [
      "ETag"
    ],
    "MaxAgeSeconds": 3000
  }
]

Consulte también este tema para más información sobre la configuración de Cloudflare: Using Discourse with Cloudflare: Best Practices

Contabo

@tuxed intentó hacer que Contabo Object Storage funcionara para cargas compatibles con S3. Parece que al cargar agrega el nombre del repositorio en la URL y no pudo hacerlo funcionar.

Cargas Seguras

Las cargas seguras solo son compatibles con AWS S3. Si su rake uploads:migrate_to_s3 falla, debe ingresar estos comandos para primero contar y luego marcar como no seguras esas cargas, dado que sabe que no necesitan ser seguras, en cuyo caso, necesitará usar AWS S3.

./launcher enter app
rails c
Upload.where(secure: true).count
Upload.where(secure: true).update_all(secure:false)

  1. Oracle Cloud no admite el acceso a buckets mediante estilo de host virtual y no funcionará ↩︎

69 Me gusta
Defining DISCOURSE_S3_CDN_URL links to assets in S3 CDN URL
Backblaze S3 issue: duplicated uploads after delete
Migrate from AWS to Digital Ocean with 2 containers, spaces and 2 CDNs
Using Scaleway s3-compatible object storage
Extend S3 configuration for other s3 API compatible cloud storage solutions
Setting up backup and image uploads to Backblaze B2
What are the right settings to use S3 bucket (with non-Amazon URL)?
Upload assets to S3 after in-browser upgrade
Using multiple containers - what needs to be shared?
Virus scanning of uploaded files
Imgur images broken
Admin role conflates server admin and board admin
Error in rebuilding using minio as object store
Use WebTorrent to load media objects
Issues with changing File/Image upload location to S3 Server from local storage
Hosting Optimization with Digital Ocean
Hosting Optimization with Digital Ocean
Theme modifiers: A brief introduction
Configure automatic backups for Discourse
Problem with Backblaze for backup- Failed to list backups from S3: Signature validation failed
Move from BackBlaze B2 to Digital Ocean Spaces
Which free storage for many images? also to be used for thumbnails etc
Migrate from AWS to Digital Ocean with 2 containers, spaces and 2 CDNs
Restore Failure - S3 (compatible) backup
Restore Failure - S3 (compatible) backup
Digitalocean block storage VS amazon S3
Digitalocean block storage VS amazon S3
Admin upgrade page doesn't load with a CDN
Install Discourse for Production Environment on Windows Server
Running Discourse on Azure Web Sites vs. Azure VM?
How to turn off S3 storage?
Access Denied error message when trying to upload images
What are the right settings to use S3 bucket (with non-Amazon URL)?
REQ: Support S3 backup to a service like Backblaze
REQ: Support S3 backup to a service like Backblaze
Using Scaleway s3-compatible object storage
Overwrite meta og:image image source to use externally public loaded images on topics?
How to store uploads with multiple web_only servers?
Can not edit topics with picture with S3 backend
Finding UI generated backup and restoring site
Looking for doc to connect discourse with digital ocean spaces
Looking for doc to connect discourse with digital ocean spaces
Looking for doc to connect discourse with digital ocean spaces
403 Error with digital ocean cdn
Link to headers (anchor links)
NoMethodError downcase s3_bucket_name absolute_base_url
What should I enter in the S3 CDN settings if I don't have a CDN?
Backing up files in Object Storage
Minio: A header you provided implies S3 functionality that is not implemented
Configure automatic backups for Discourse
S3 OVH Object Storage
File directory system
Unable to backup or navigate to backups
Uploads to AWS S3 and Configured CDN
Migration to a Self-Hosted solution from Kubernetes
How to develop discourse in a team?
Images didn't load after configuring S3 uploads
Need Azure blob storage
Use Google Cloud Storage Instead of S3
Move discourse uploads to free space on server
Strange behavior with Digital Ocean Spaces/S3 and lots of duplicated CORS rules for `example.com`
Can't upload PDF to S3
"canned acl" error when uploading images
AWS S3 Object Ownership
What’s your server configurations?
How to debug S3 uploads
Problems with Patreon Login, Force HTTPS, and S3 CDN (three) Issues
Cron task to sync local backups to DigitalOcean Spaces
Cron task to sync local backups to DigitalOcean Spaces
Problems with Patreon Login, Force HTTPS, and S3 CDN (three) Issues
Help restoring - system hung at midnight
Help restoring - system hung at midnight
Image upload error: The bucket does not allow ACL's
Make s3_region a string value
How can I set s3_force_path to true?
S3 assets folder, is a cleanup needed?
BunnyCDN storage for automatic backups
BunnyCDN storage for automatic backups
Move Uploads and Backups to DigitalOcean Block Storage
Required local storage for URL referenced images vs. uploaded images?
Colored loading dots because assets not uploaded
Is DO Spaces CDN still broken? Any workarounds?
Is DO Spaces CDN still broken? Any workarounds?
Is DO Spaces CDN still broken? Any workarounds?
Basic How-To for Using MinIO storage server run by you for your Discourse Instance
Minio instead of S3?
Configure automatic backups for Discourse
S3 image bandwidth costs are getting annoying
S3 image bandwidth costs are getting annoying
Support for ImgBB image upload service
Install Discourse on Amazon Web Services (AWS)
Account creation not working with discourse_encrypt
Cannot load any images “Uncaught (in promise) no-response: no-response”
Tips on Google Cloud S3
Enable a CDN for your Discourse
Invalid URL for markdown-it-bundle
Not using volumes (or automatically using S3) when hosting with Docker
Configuring automatic backups
I have a problem with my proxy status
Inline PDF Previews
My images are not working
Getting error 422 invalid argument when configure S3 upload with GCS
SSL_connect returned=1 errno=0 peeraddr=162.243.189.2:443 state=error: certificate verify failed (Hostname mismatch)
SSL_connect returned=1 errno=0 peeraddr=162.243.189.2:443 state=error: certificate verify failed (Hostname mismatch)
Strange behavior with Digital Ocean Spaces/S3 and lots of duplicated CORS rules for `example.com`
My install broke after updating, how can I fix it?
Uploads Subdomain For Cloudflare
Hetzner deleted my account, my server and I was left with nothing. What to do?
SSL_connect returned=1 errno=0 peeraddr=162.243.189.2:443 state=error: certificate verify failed (Hostname mismatch)
SSL_connect returned=1 errno=0 peeraddr=162.243.189.2:443 state=error: certificate verify failed (Hostname mismatch)
SSL_connect returned=1 errno=0 peeraddr=162.243.189.2:443 state=error: certificate verify failed (Hostname mismatch)
SSL_connect returned=1 errno=0 peeraddr=162.243.189.2:443 state=error: certificate verify failed (Hostname mismatch)
SSL_connect returned=1 errno=0 peeraddr=162.243.189.2:443 state=error: certificate verify failed (Hostname mismatch)
Understanding Uploads, Images, and Attachments
S3, Assets & CDN Error
Capacity planning / Resource requirements
Migrate assets to s3 rake tasks
Best option for DB and file Storage
S3 error, when updating to 2.9.0.beta1
Forum rendered unusable
Forum rendered unusable
Configure automatic backups for Discourse
Migrate Discourse broke S3 images
Configure automatic backups for Discourse
Cloud storage and cdn
Migrating uploads from S3 to local
Another discourse offline "bootstrap failed with exit code 5"
Another discourse offline "bootstrap failed with exit code 5"
AI Plugin Build Error - 'bundle exec rake db:migrate' failed
Your Docker installation is not working correctly - no space left on device - safe to use ./launcher cleanup?
Uncaught SyntaxError: forum spins nonstop and never loads
Why is my upload limit 100mb?It's set to 500mb
Trouble with Google Bucket for backup
Did I overwrite my site settings with a cross-instance backup/restore?
Need tips on making my forum faster
What should be the server requirements
SSL_connect returned=1 errno=0 peeraddr=162.243.189.2:443 state=error: certificate verify failed (Hostname mismatch)
Set up BackBlaze S3 with BunnyCDN
Why you should use Discourse internally for your company/team instead of Slack (4 years use case)
Make s3_region a string value
Imgur upload built into the post buttons
Decoupled Discourse Application - Managed Redis, Managed Postgres, and DIgital Ocean Volume with Discourse
S3 and Cloudfront - Setup Not Working
Cannot upload images in mobile discourse
Cloudflare R2: Navigating Setup and Handling Configuration Errors
Cloudflare R2: Navigating Setup and Handling Configuration Errors
Cloudflare R2: Navigating Setup and Handling Configuration Errors
S3 assets broken after moving forum
Backup request via FTP
Error when doing "bundle exec rake s3:upload_assets" - Could not locate Gemfile or .bundle/ directory
Separate S3 access keys for backups and uploads?
Topic List Previews (legacy)
Disk usage spike during backup, Discourse crashed hard :-(
Make s3_region a string value
Favicon setup: "To work correctly over a CDN it must be a png"
Change image folder to symlinked folder
Migrating uploads from S3 to local
S3 Upload Confusion: Dashboard vs. app.yml
Old installation failing upgrade
Where are Images and uploads stored?
Rebuild issue: [Cannot set dual-stack in combination with a custom endpoint.]
Problem updating data in the separate database
Resizing images off server
Unable to setup S3 bucket
Discourse Stuck on Loading (Logs)
Discourse Stuck on Loading (Logs)
Unable to setup S3 bucket
How to add AWS Cloudfront as a Discourse CDN
Unable to setup S3 bucket
Configured s3, but i want asset to serve locally
Configured s3, but i want asset to serve locally
Set up BackBlaze S3 with BunnyCDN
Discourse s3 backup folder
SSO broken after rebuild with stable v3.3.3
How to Configure Cloudflare R2 for your Discourse Community
如何批量修改文件链接地址
Can't migrate uploads to S3
Backup discourse from the command line
Stuck and lost updating forum, problems with PG migration
Can't rebuild due to AWS SDK gem bump and new AWS Data Integrity Protections
Can't rebuild due to AWS SDK gem bump and new AWS Data Integrity Protections
S3 (not AWS) backups stopped working, presumably since an update
Troubleshooting S3 Uploads: Site hangs after rebuild, JS assets fail to load with net::ERR_... on both R2 and GCS
Inquiry About Discourse’s Support for Amazon S3 Storage
Backup discourse from the command line
Inquiry About Discourse’s Support for Amazon S3 Storage
Inquiry About Discourse’s Support for Amazon S3 Storage
Cloudflare R2 Storage Issues
Hetzner S3 support
Can the /var/discourse and /var/lib/docker folders be on different volumes?
Setting up backup and image uploads to Backblaze B2
Issues with AWS CDN and S3
Digital Ocean Spaces (S3) "unable to sign request without credentials set"
Issues with AWS CDN and S3
Digital Ocean Spaces (S3) "unable to sign request without credentials set"
Digital Ocean Spaces (S3) "unable to sign request without credentials set"
Digital Ocean Spaces (S3) "unable to sign request without credentials set"
Digital Ocean Spaces (S3) "unable to sign request without credentials set"
为啥我的七牛云s3附件上传成功后,论坛中无法加载出来?
Install Discourse on a residential internet with Cloudflare Tunnel
Custom emoji don't use CDN for S3 stored assets in a few pages
S3 and Cloudfront - Setup Not Working
Secure Uploads
Make s3_region a string value
Backup Files Not Showing in Discourse Backend After Uploading to Cloudflare R2
Images after a restore don't have S3 bucket URL
Can't upload to S3 (Cloudflare R2)
Daily Summary (9pm UTC)
Custom Emojis loaded from S3/R2 bypass CDN routing
An AWS S3 Integration with Discourse Tutorial would be nice
Is Scaleway a good option for object storage?
Blackblaze&Cloudflare: image uploading works, but not showing in post
SMF2 Conversion and Rake to S3 Help
Backing up your forum
What causes rake uploads:fix_relative_upload_links
Running 2 hosts behind haproxy fails with random 404s
Site Blank After Rebuild
Rebuild goes into a loop
Custom Emojis loaded from S3/R2 bypass CDN routing
Backblaze S3 issue: duplicated uploads after delete
Migrate_to_S3 Fails on Rebake
Downloads coming from S3 even with DISCOURSE_S3_CDN_URL set
Errors trying to use custom S3 storage
Moving from one S3 bucket to another
S3 image bandwidth costs are getting annoying
Basic How-To for Using MinIO storage server run by you for your Discourse Instance
SSL error - can't upload images
Digital Ocean Spaces don’t implement the AWS S3 API for the CORS rule
Extend S3 configuration for other S3 API compatible services
How to separate uploaded files to another server
Storing Images in the cloud
S3 and Cloudfront - Setup Not Working
Migrate_to_S3 Fails on Rebake
Can not access backup page and related error when restoring using GCP Object Storage
Cannot rebake after setting up CDN
Rebuild failure - skipping "after_assets_precompile" section of app.yml
High Availability 3 Server setup
Enable hidden setting to include S3 uploads in the backups
Run Discourse as docker swarm service
Azure Blob Storage Plugin
How might we better structure #howto?
Migrating uploaded files from DO to S3
Discourse as a closed wiki