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

**URL:** https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916
**Category:** Self-Hosting
**Tags:** cdn, configuring, how-to, reference
**Created:** [22 Abril, 2020 22:37 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916 "2020-04-22T22:37:37Z")
**Posts on this page:** 20
**Page:** 12

<div class="post-metadata">

### Author: ![Master](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/master/32/383814_2.png) [@Master](https://meta.discourse.org/u/Master)
#### Post date: [18 Mayo, 2024 16:49 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/456 "2024-05-18T16:49:13Z")

</div>

¿Ha cambiado algo Scaleway? Me funcionaba hasta hace 48 horas, pero ya no funciona.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [19 Mayo, 2024 05:10 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/457 "2024-05-19T05:10:24Z")

</div>

¿Está tu factura pagada? ¿Qué ocurre? ¿Funcionan las imágenes? ¿Han desaparecido todas o simplemente no puedes añadir nuevas?

---

<div class="post-metadata">

### Author: ![CAKE\_NICE](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/cake_nice/32/400517_2.png) [@CAKE\_NICE](https://meta.discourse.org/u/CAKE_NICE)
#### Post date: [6 Junio, 2024 07:10 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/458 "2024-06-06T07:10:15Z")

</div>

¿Puede añadir un poco más de soporte? Por ejemplo, Tencent COS de China es más conveniente para los usuarios chinos, y COS de Tencent Cloud tiene nodos CDN en todo el mundo, lo que permite un acceso muy rápido.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [6 Junio, 2024 10:03 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/459 "2024-06-06T10:03:06Z")

</div>

¿Lo has probado? ¿Funciona?

---

<div class="post-metadata">

### Author: ![CAKE\_NICE](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/cake_nice/32/400517_2.png) [@CAKE\_NICE](https://meta.discourse.org/u/CAKE_NICE)
#### Post date: [6 Junio, 2024 10:55 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/460 "2024-06-06T10:55:25Z")

</div>

Lo he usado en el entorno de prueba, pero solo puedo hacer copias de seguridad en Tencent COS, y espero que la versión oficial de Discourse pueda agregar soporte para Tencent COS para facilitar a los desarrolladores de China.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [6 Junio, 2024 11:37 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/461 "2024-06-06T11:37:21Z")

</div>

Creo que necesitarás compartir lo que has hecho y qué errores o problemas has tenido. Entonces alguien podría sugerir cómo hacerlo funcionar. Podrías mirar los otros ejemplos y ver si puedes usarlos para hacerlo funcionar.

Creo que es poco probable que hagan cambios en el núcleo para soportarlo.

---

<div class="post-metadata">

### Author: ![SimeonGriggs](https://avatars.discourse-cdn.com/v4/letter/s/f6c823/32.png) [@SimeonGriggs](https://meta.discourse.org/u/SimeonGriggs)
#### Post date: [6 Julio, 2024 14:57 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/462 "2024-07-06T14:57:34Z")

</div>

Backblaze:

- He configurado un bucket B2 en mi cuenta
- Añadí detalles a la sección `env` de `app.yml`
- Ejecuté `./launcher rebuild app`

…pero no veo ninguna confirmación en el panel de control de mi instancia de Discourse de que esta configuración haya surtido efecto. ¿Dónde debería buscar?

---

<div class="post-metadata">

### Author: ![kamaljain](https://avatars.discourse-cdn.com/v4/letter/k/c2a13f/32.png) [@kamaljain](https://meta.discourse.org/u/kamaljain)
#### Post date: [26 Agosto, 2024 15:56 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/463 "2024-08-26T15:56:08Z")

</div>

Hola,

Pude probar y usar Cloudflare R2 con éxito tanto para cargas como para copias de seguridad. Publicación detallada aquí [Cloudflare R2: Navigating Setup and Handling Configuration Errors - #40 by kamaljain](https://meta.discourse.org/t/cloudflare-r2-navigating-setup-and-handling-configuration-errors/305617/40?u=kamaljain)

Solicitaría que por favor prueben en su extremo y revisen el “Funciona con Discourse” a Sí para Cloudflare R2. De hecho, es más fácil que S3 y más económico, gratis si es \<10 GB de almacenamiento.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [26 Agosto, 2024 17:58 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/464 "2024-08-26T17:58:48Z")

</div>

Yo también probé una configuración en multisitio y también creo que está funcionando.

He visto algo que me hace preguntarme si puedes obtener una lista de copias de seguridad. Intentaré comprobar mi configuración.

---

<div class="post-metadata">

### Author: ![kamaljain](https://avatars.discourse-cdn.com/v4/letter/k/c2a13f/32.png) [@kamaljain](https://meta.discourse.org/u/kamaljain)
#### Post date: [27 Agosto, 2024 01:23 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/465 "2024-08-27T01:23:37Z")

</div>

![image](https://global.discourse-cdn.com/meta/original/4X/5/8/c/58c40f68065f1fec7d0cc492d81e0651519e5c49.jpeg)

Puedo ver las copias de seguridad listadas. Aún no he intentado restaurar.

---

<div class="post-metadata">

### Author: ![MinhVN](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/minhvn/32/458483_2.png) [@MinhVN](https://meta.discourse.org/u/MinhVN)
#### Post date: [24 Octubre, 2024 08:38 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/466 "2024-10-24T08:38:15Z")

</div>

Hola hermano, ¿puedo chatear contigo? Tengo algunos problemas al configurar MinIO.  
Gracias.

---

<div class="post-metadata">

### Author: ![JamesNorth](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jamesnorth/32/283740_2.png) [@JamesNorth](https://meta.discourse.org/u/JamesNorth)
#### Post date: [5 Febrero, 2025 06:24 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/467 "2025-02-05T06:24:42Z")

</div>

# Configuración de iDrive

Solo quería informar que usar la versión E2 de iDrive para almacenamiento s3 funciona perfectamente con estas configuraciones:

### Configuración de ENV en el archivo yaml

Asegúrate de que tu bucket tenga al menos permisos `Público` y `Lectura` en la configuración de iDrive.

Estas son las configuraciones que uso para un bucket que comparte `uploads` (cargas) y `backups` (copias de seguridad).

```plaintext
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: tu-región
DISCOURSE_S3_ENDPOINT: https://tu-endpoint-de-idrive.dev
DISCOURSE_S3_ACCESS_KEY_ID: tu-clave-de-acceso
DISCOURSE_S3_SECRET_ACCESS_KEY: tu-clave-secreta
DISCOURSE_S3_CDN_URL: https://tu-cdn-personalizado.com/uploads
DISCOURSE_S3_BUCKET: tu-nombre-de-bucket/uploads
DISCOURSE_S3_BACKUP_BUCKET: tu-nombre-de-bucket/backups
DISCOURSE_BACKUP_LOCATION: s3
DISCOURSE_S3_INSTALL_CORS_RULE: false

```

Por defecto, iDrive tiene `Compartir todo en esta región con todos los orígenes`… así que debería funcionar directamente sin necesidad de configuraciones adicionales, independientemente de las fuentes. Bloquéalo a tus propios dominios si lo deseas.

## Utilizo un certificado de origen de Cloudflare para crear un CNAME que apunta al endpoint de iDrive.

# Sincronizar Archivos Adjuntos Existentes

### Reconstruir

Reconstruye la aplicación después de cambiar estas configuraciones de ENV.

* * *

### Cargar y Re-procesar

Luego, ingresa al contenedor y ejecuta

`rake uploads:migrate_to_s3`

Observa cómo se carga, luego ejecuta

`rake posts:rebake_uncooked_posts`

Sal del contenedor.

* * *

### Añadir a la sección `hooks` del archivo yaml

En la sección `hooks`

```plaintext
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

```

Esto asegura que los archivos js/css se carguen en iDrive después de tus archivos adjuntos, de lo contrario, obtendrás muchos errores en la consola del navegador ya que faltarán todos.

* * *

### Reconstruir

## Reconstruye de nuevo después de que el comando de assets se ejecute.

# ¡Todo debería estar bien!

---

<div class="post-metadata">

### Author: ![NateDhaliwal](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/natedhaliwal/32/313494_2.png) [@NateDhaliwal](https://meta.discourse.org/u/NateDhaliwal)
#### Post date: [3 Marzo, 2025 23:04 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/468 "2025-03-03T23:04:59Z")

</div>

> [@Zomphie](#):
>
> [!] Confirmo que Hetzner Object Storage funciona con S3.

¿Quizás el servicio Hetzner Object Storage debería añadirse a la tabla?

---

<div class="post-metadata">

### Author: ![tumbano](https://avatars.discourse-cdn.com/v4/letter/t/7ea924/32.png) [@tumbano](https://meta.discourse.org/u/tumbano)
#### Post date: [13 Marzo, 2025 15:41 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/469 "2025-03-13T15:41:27Z")

</div>

Conseguí usar Contabo para subir archivos. Tanto los archivos antiguos (migrados) como las nuevas subidas funcionaron perfectamente. En mi caso, la URL del bucket era [https://eu2.contabostorage.com/mybucket](https://eu2.contabostorage.com/mybucket).  
El truco fue establecer EU2 como nombre del bucket y [https://contabostorage.com/mybucket](https://contabostorage.com/mybucket) como endpoint.  
El único problema es que al cargar el sitio también solicita otros archivos como los js de los plugins del bucket y no se cargan al no estar disponibles los archivos. Bueno, entendí que esto se debe a que he configurado la URL de la CDN igual que el bucket. Esto no me queda muy claro todavía, ¿alguien puede decirme cómo configurarlo? Por lo que entendí, tengo que crear una dirección cname que apunte al dominio principal (servidor de discourse) y proxyzarlo con cloudflare, ¿es esto correcto?

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [13 Marzo, 2025 16:08 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/470 "2025-03-13T16:08:50Z")

</div>

> [@tumbano](#):
>
> El único problema es que al cargar el sitio también solicita otros archivos como el js de los plugins del bucket y no carga al estar los archivos no disponibles

Te perdiste esta parte:

> [@Discourse](#):
>
> Para almacenar los activos estáticos de Discourse en su Object Storage, agregue esta configuración en su app.yml bajo la sección `hooks`:
> 
> ```plaintext
> 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
> 
> ```

---

<div class="post-metadata">

### Author: ![tumbano](https://avatars.discourse-cdn.com/v4/letter/t/7ea924/32.png) [@tumbano](https://meta.discourse.org/u/tumbano)
#### Post date: [13 Marzo, 2025 16:29 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/471 "2025-03-13T16:29:05Z")

</div>

Estoy seguro de que lo hice, pero quizás cometí un error. Al final, restauré una copia de seguridad, así que voy un poco de memoria… Pero entonces, me pregunto, ¿por qué se desaconseja configurar una CDN como el Bucket? ¿Qué problemas puede causar? Lo intentaré de nuevo mañana.  
Gracias

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [13 Marzo, 2025 21:25 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/472 "2025-03-13T21:25:39Z")

</div>

No creo que el problema que describes se deba a que estableciste la URL de la CDN como la URL del bucket (es decir, si las cargas funcionan, pero los activos no).

---

<div class="post-metadata">

### Author: ![tumbano](https://avatars.discourse-cdn.com/v4/letter/t/7ea924/32.png) [@tumbano](https://meta.discourse.org/u/tumbano)
#### Post date: [13 Marzo, 2025 23:37 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/473 "2025-03-13T23:37:52Z")

</div>

Te actualizaré mañana, gracias

---

<div class="post-metadata">

### Author: ![tumbano](https://avatars.discourse-cdn.com/v4/letter/t/7ea924/32.png) [@tumbano](https://meta.discourse.org/u/tumbano)
#### Post date: [14 Marzo, 2025 14:57 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/474 "2025-03-14T14:57:27Z")

</div>

Y funcionó 🥳  
Paso a paso de lo que hice esperando ayudar a otros:

editado app.yml y añadido

```plaintext
  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

```

después de hooks: (justo después de git clone plugins…)  
y

```plaintext
  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: EU
  DISCOURSE_S3_ENDPOINT: https://contabostorage.com/bucketname
  DISCOURSE_S3_ACCESS_KEY_ID: accesskey
  DISCOURSE_S3_SECRET_ACCESS_KEY: secretaccesskey
  DISCOURSE_S3_CDN_URL: https://eu2.contabostorage.com/randomlettersthatcontaboaddstothelinks:bucketname
  DISCOURSE_S3_BUCKET: eu2
  DISCOURSE_BACKUP_LOCATION: s3
  DISCOURSE_S3_INSTALL_CORS_RULE: false

```

después de la configuración del correo electrónico  
luego he establecido los mismos valores en el menú de discourse y habilitado las cargas S3.  
Reconstruí la aplicación con

```plaintext
cd /var/discourse
sudo ./launcher rebuild app

```

luego

```plaintext
./launcher enter app
rake uploads:migrate_to_s3

```

Esto lleva un tiempo, en mi caso unas pocas horas (80k archivos, 100GB)

Cuando termine

```plaintext
rake posts:rebake_uncooked_posts

```

---

<div class="post-metadata">

### Author: ![tumbano](https://avatars.discourse-cdn.com/v4/letter/t/7ea924/32.png) [@tumbano](https://meta.discourse.org/u/tumbano)
#### Post date: [17 Marzo, 2025 14:07 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/475 "2025-03-17T14:07:35Z")

</div>

Actualización: algunos usuarios no pudieron cargar el sitio (recursos y archivos). Descubrimos que el dominio [contabostorage.com](http://contabostorage.com) estaba presente en algunas listas negras como un sitio de phishing. La solución fue simple:

configurar un subdominio [files.mydomain.com](http://files.mydomain.com) como se describe aquí [Can I Setup a Custom Domain for My Object Storage? : Contabo](https://help.contabo.com/en/support/solutions/articles/103000282942-can-i-setup-a-custom-domain-for-my-object-storage-)

Actualizado DISCOURSE\_S3\_CDN\_URL: [https://files.mydomain.com](https://files.mydomain.com) en app.yml

Luego

```plaintext
cd /var/discourse
sudo ./launcher rebuild app

```

y para completar el trabajo

```plaintext
./launcher enter app
rake posts:rebake

```

Ahora todos los recursos y cargas se cargan desde [https://files.mydomain.com/pathtofile/file.ext](https://files.mydomain.com/pathtofile/file.ext)

Hecho

[Página anterior](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916.md?page=11)

[Página siguiente](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916.md?page=13)
