Configurer un fournisseur de stockage d'objets compatible S3 pour les téléchargements

:information_source: Ce sujet explique comment configurer certains fournisseurs de stockage d’objets compatibles S3 courants (clones S3). Consultez Set up file and image uploads to S3 pour plus de détails sur la configuration d’Amazon AWS S3, qui est officiellement prise en charge et utilisée en interne par Discourse pour nos services d’hébergement.

Fournisseur Nom du service Fonctionne avec Discourse ?
Amazon AWS S3 Oui
Digital Ocean Spaces Oui
Linode Object Storage Oui
Google Cloud Storage Oui
Scaleway Object Storage Oui
Vultr Object Storage Oui
BackBlaze Cloud Storage Oui*
Auto-hébergé MinIO Oui
Azure Blob Storage Flexify.IO Oui
Oracle Cloud Object Storage Non [1]
Wasabi Object Storage Peut-être
Cloudflare R2 Non
Contabo Object Storage Non

Si vous avez fait fonctionner un autre service, veuillez l’ajouter à ce wiki.

Configuration

Pour stocker les ressources statiques de Discourse dans votre stockage d’objets, ajoutez cette configuration dans votre fichier app.yml sous la section 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

Lors de l’utilisation d’un stockage d’objets, vous avez également besoin d’un CDN pour servir le contenu stocké dans le bucket. J’ai utilisé le CDN StackPath lors de mes tests, et à part la nécessité de définir Dynamic Caching By Header: Accept-Encoding dans leur configuration, cela fonctionne bien.

DISCOURSE_CDN_URL est un CDN qui pointe vers votre nom d’hôte Discourse et met en cache les requêtes. Il sera principalement utilisé pour les ressources téléchargeables : CSS et autres ressources de thème.

DISCOURSE_S3_CDN_URL est un CDN qui pointe vers votre bucket de stockage d’objets et met en cache les requêtes. Il sera principalement utilisé pour les ressources téléversables : JS, images et téléversements d’utilisateurs.

Nous recommandons que ces deux URL soient différentes et que les administrateurs les définissent toutes les deux.

Ne pas utiliser de CDN (ou entrer l’URL du bucket comme URL CDN) est susceptible de causer des problèmes et n’est pas pris en charge.

Dans les exemples suivants, https://falcoland-files-cdn.falco.dev est un CDN configuré pour servir les fichiers du bucket. Le nom du bucket a été défini sur falcoland-files dans mes exemples.

Il est recommandé de configurer ces paramètres dans des variables d’environnement dans votre fichier app.yml, car c’est ainsi que CDCK le fait dans son infrastructure, ce qui garantit une bonne stabilité. De plus, la tâche de téléversement des ressources s’exécute après la compilation des ressources, ce qui se produit lors d’une reconstruction. Si vous souhaitez lancer un Discourse fonctionnant correctement avec un stockage d’objets dès le départ, vous devez définir les variables d’environnement afin que les ressources soient téléversées avant le démarrage du site.

Choisissez votre fournisseur dans la liste ci-dessous et ajoutez ces paramètres à la section env de votre fichier app.yml, en ajustant les valeurs en conséquence :

AWS S3

Ce que nous prenons officiellement en charge et utilisons en interne. Leur offre CDN Cloudfront fonctionne également pour servir les fichiers du bucket. Consultez Set up file and image uploads to S3 pour savoir comment configurer correctement les permissions.

  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

L’offre de DO est bonne et fonctionne immédiatement. Il est acceptable d’activer la restriction de la liste des fichiers. Le seul problème est que leur offre CDN est désespérément défectueuse, vous devez donc utiliser un CDN différent pour les fichiers. De plus, vous ne devez pas installer la règle CORS, car elle est réinstallée à chaque reconstruction.

Configuration exemple :

  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

Un paramètre de configuration supplémentaire, HTTP_CONTINUE_TIMEOUT, est requis pour Linode.

Configuration exemple :

  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

La liste des fichiers est défectueuse, vous devez donc ajouter une variable d’environnement supplémentaire pour la sauter afin que les ressources fonctionnent. Ignorez également CORS et configurez-le manuellement.

:warning: Puisque vous ne pouvez pas lister les fichiers, vous ne pourrez pas lister les sauvegardes, et les sauvegardes automatiques échoueront. Nous ne recommandons pas son utilisation pour les sauvegardes. Cependant, certains suggèrent que si vous changez le rôle de Storage Legacy Object Owner à Storage Legacy Bucket Owner, les sauvegardes fonctionnent correctement. Consultez ce sujet pour une discussion spécifique à Google Cloud.

Il existe un plugin tiers pour améliorer l’intégration à Discourse GCS Helper.

Configuration exemple :

  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

L’offre de Scaleway est également très bonne, et tout fonctionne bien dans la plupart des cas.

:warning: Les téléversements multipartes de Scaleway ne prennent en charge qu’un maximum de 1 000 parties. Cela ne correspond pas à Amazon S3, qui prend en charge un maximum de 10 000 parties. Pour les instances plus grandes, cela entraînera l’échec des sauvegardes de Discourse et le téléversement incomplet peut devoir être supprimé manuellement avant de nouvelles tentatives. Pour les petites instances, ce n’est pas un problème. Scaleway semble assez ouvert aux retours, donc si vous souhaitez que cette limite soit modifiée, vous devriez les contacter.

Notez que pour le paramètre DISCOURSE_S3_ENDPOINT, Discourse utilise le point de terminaison de toute la région : https://s3.{region}.scw.cloud. Le « Bucket endpoint » trouvé dans votre tableau de bord Scaleway est sous la forme https://{bucketName}.s3.{region}.scw.cloud. Omettez le sous-domaine du nom du bucket pour éviter les erreurs de connexion.

Configuration exemple :

  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

Un paramètre de configuration supplémentaire, HTTP_CONTINUE_TIMEOUT, est requis pour Vultr.

Configuration exemple :

  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

Vous devez ignorer CORS et le configurer manuellement.

Il existe des rapports indiquant que le nettoyage des téléversements orphelins ne fonctionne pas correctement avec BackBlaze. Vous devez modifier les règles de cycle de vie de votre bucket pour que le nettoyage des orphelins fonctionne.

Configuration exemple :

  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

Note : Lors de la migration initiale vers B2, vous pouvez atteindre la limite quotidienne gratuite de 2 500 transactions de classe C. Vous devrez ajouter un moyen de paiement pour supprimer les plafonds.

MinIO Storage Server

Il y a quelques mises en garde et exigences que vous devez vous assurer de respecter avant d’utiliser le serveur de stockage MinIO comme alternative à S3 :

  1. Vous avez une instance de serveur MinIO entièrement configurée
  2. Vous avez activé le support de domaine dans la configuration de MinIO pour les URL de buckets basées sur le domaine. Ceci est une exigence de configuration obligatoire pour MinIO et Discourse, car MinIO prend toujours en charge les styles « path » S3 hérités qui ne sont plus pris en charge dans Discourse.
  3. Vous avez configuré correctement la configuration DNS pour MinIO afin que les sous-domaines de bucket résolvent correctement vers le serveur MinIO et que le serveur MinIO soit configuré avec un domaine de base (dans ce cas, minio.example.com)
  4. Le bucket discourse-data existe sur le serveur MinIO et a une politique « publique » définie sur lui
  5. Votre URL CDN S3 pointe vers un CDN correctement configuré pointant vers le bucket et mettant en cache les requêtes, comme indiqué précédemment dans ce document.
  6. Vos CDN sont configurés pour utiliser réellement un en-tête « Host » de l’URL S3 principale - par exemple, discourse-data.minio.example.com lorsqu’il récupère des données - sinon cela peut causer des problèmes CORB.

En supposant que les mises en garde et prérequis ci-dessus sont respectés, une configuration exemple serait quelque chose comme ceci :

  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 sera toujours activé sur MinIO même si la règle n’est pas installée par le reconstructeur d’application - par défaut, il semble, CORS est activé sur tous les verbes HTTP dans MinIO, et MinIO ne prend pas en charge BucketCORS (API S3) en conséquence.

Azure Blob Storage avec Flexify.IO

Azure Blob Storage n’est pas un service compatible S3, il ne peut donc pas être utilisé avec Discourse. Il existe un plugin, mais il est défectueux.

Le moyen le plus simple d’exposer une interface compatible S3 pour Azure Blob Storage est d’ajouter un serveur Flexify.IO qui traduit le protocole de stockage Azure en S3.

À l’heure actuelle, le service est gratuit sur Azure, et vous n’avez besoin que d’une machine virtuelle (VM) très basique (peu coûteuse) pour commencer à l’exécuter. Cela nécessite cependant un peu de configuration.

  1. Dans le portail Azure, créez une nouvelle ressource de type Flexify.IO - Amazon S3 API for Azure Blob Storage.
  2. Pour une utilisation légère, la configuration minimale de la VM semble fonctionner parfaitement. Vous pouvez accepter la plupart des configurations par défaut. N’oubliez pas de sauvegarder le fichier de clé PEM lorsque vous créez la VM.
  3. Accédez au lien de la VM Flexify.IO et entrez dans le système. Suivez les instructions en configurant le fournisseur de données Azure Blob Storage et le point de terminaison S3 généré. Assurez-vous que le paramètre de configuration du point de terminaison Public read access to all objects in virtual buckets est défini sur true. Copiez l’URL du point de terminaison S3 et les clés.
  4. Appuyez sur New Virtual Bucket et créez un bucket virtuel. Il peut avoir le même nom que votre conteneur Azure Blob Storage, ou un nom différent. Liez n’importe quel conteneur(s) pour les fusionner dans ce bucket virtuel. Ce bucket virtuel est utilisé pour exposer un bucket lisible publiquement via S3.
  5. Par défaut, Flexify.IO installe un certificat SSL auto-signé, tandis qu’un point de terminaison S3 nécessite HTTPS. Connectez-vous en SSH à la VM en utilisant le fichier de clé (le nom d’utilisateur est par défaut azureuser), et remplacez les fichiers suivants par les fichiers corrects :
  • /etc/flexify/ssl/cert.pem - remplacez par le fichier de certificat (encodage PEM)

  • /etc/flexify/ssl/key.pem - remplacez par le fichier de clé privée (encodage PKCS#8 PEM, celui qui commence par BEGIN PRIVATE KEY et non BEGIN RSA PRIVATE KEY qui est PKCS#1)

    Ces fichiers sont root, vous devez donc utiliser sudo pour les remplacer. Il est préférable de vous assurer que les fichiers de remplacement ont le même propriétaire et les mêmes permissions que les originaux, c’est-à-dire root:root et la permission 600.

  1. Par défaut, Flexify.IO crée un service S3 au niveau racine avec plusieurs buckets. Discourse nécessite le support des sous-domaines pour les buckets. Allez à : <your Flexify.IO VM IP>/flexify-io/manage/admin/engines/configs/1 ce qui ouvrira une page de configuration cachée !
  2. Spécifiez le domaine de base S3 (disons s3.mydomain.com) dans le champ Endpoint hostname, qui devrait être vide par défaut. Appuyez sur Save pour enregistrer le paramètre.
  3. Redémarrez la VM Flexify.IO dans le portail Azure.
  4. Dans votre DNS, mappez s3.mydomain.com et *.s3.mydomain.com vers l’adresse IP de la VM Flexify.IO.
  5. Dans Discourse, définissez les paramètres suivants dans la page d’administration (oui, il n’est pas nécessaire que les paramètres soient dans 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>  (n'importe quel conteneur conviendra, car il ne nécessite pas d'accès de lecture public et Flexify.IO les exposera automatiquement)
backup location: s3

Il n’est pas recommandé d’utiliser le même bucket pour la production et la préproduction. Si vous le faites quand même, prenez des mesures pour vous assurer que votre site de préproduction ne supprime pas vos ressources de production (définissez s3 disable cleanup au minimum, et surveillez la suppression des sauvegardes de production).

Wasabi

@pfaffman a essayé Wasabi pour les sauvegardes, mais cela semblait échouer de manière intermittente et silencieuse, laissant les sauvegardes sur le disque dur et finissant par remplir le disque. Ni Wasabi ni Meta n’avaient d’indices, donc je ne le recommande pas, bien que vos résultats puissent varier. @pfaffman est maintenant assez certain que ce problème était dû au fait que les sauvegardes et les redémarrages automatiques étaient programmés en même temps ; cela n’était utilisé que pour les sauvegardes, mais semblait fonctionner correctement. Si quelqu’un veut essayer et en faire rapport ici, cela devrait fonctionner, au moins pour les sauvegardes.

Oracle Cloud

Oracle Cloud ne prend pas en charge l’accès de style hôte virtuel aux buckets et ne fonctionnera pas

Cloudflare

L’offre de Cloudflare est incompatible. Lors des tests, @fearlessfrog a ouvert un ticket auprès de Cloudflare et en décembre 2022, ils ont déclaré :

Contabo

@tuxed a essayé de faire fonctionner le stockage d’objets Contabo pour les téléversements compatibles S3. Il semble que lors du téléversement, il préfixe le nom du dépôt dans l’URL et il n’a pas réussi à le faire fonctionner.

Téléversements sécurisés

Les téléversements sécurisés ne sont pris en charge que pour AWS S3. Si votre commande rake uploads:migrate_to_s3 échoue, vous devez entrer ces commandes pour d’abord compter, puis marquer comme non sécurisés les téléversements, étant donné que vous savez qu’ils n’ont pas besoin d’être sécurisés, auquel cas, vous devrez utiliser AWS S3.

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

  1. Oracle Cloud ne prend pas en charge l’accès de style hôte virtuel aux buckets et ne fonctionnera pas ↩︎

69 « J'aime »
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
Set up BackBlaze S3 with BunnyCDN
Can not access backup page and related error when restoring using GCP Object Storage
Setting up backup and image uploads to Backblaze B2
Upload assets to S3 after in-browser upgrade
What are the right settings to use S3 bucket (with non-Amazon URL)?
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
Custom emoji don't use CDN for S3 stored assets in a few pages
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
Run Discourse as docker swarm service
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?
Install Discourse on a residential internet with Cloudflare Tunnel
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?
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
[PAID] Configure an S3 compatible object storage provider for uploads
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
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?
S3 and Cloudfront - Setup Not Working
S3 and Cloudfront - Setup Not Working
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)
Why you should use Discourse internally for your company/team instead of Slack (4 years use case)
Make s3_region a string value
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
Colored loading dots because assets not uploaded
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?
Secure 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
Backup Files Not Showing in Discourse Backend After Uploading to Cloudflare R2
Resizing images off server
Unable to setup S3 bucket
Discourse Stuck on Loading (Logs)
Discourse Stuck on Loading (Logs)
Unable to setup S3 bucket
Rebuild failure - skipping "after_assets_precompile" section of app.yml
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
Setting up backup and image uploads to Backblaze B2
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?
An AWS S3 Integration with Discourse Tutorial would be nice
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附件上传成功后,论坛中无法加载出来?
Imgur upload built into the post buttons
Backup discourse from the command line
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
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
Migrate_to_S3 Fails on Rebake
Cannot rebake after setting up CDN
High Availability 3 Server setup
Enable hidden setting to include S3 uploads in the backups
S3 error, when updating to 2.9.0.beta1
Azure Blob Storage Plugin
How might we better structure #howto?
Migrating uploaded files from DO to S3
Discourse as a closed wiki
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