配置兼容S3的对象存储提供商用于上传

:information_source: 本主题介绍如何配置一些常见的 S3 兼容对象存储提供商(S3 克隆)。有关 Amazon AWS S3 配置的更多详细信息,请参阅 https://meta.discourse.org/t/setting-up-file-and-image-uploads-to-s3/7229,该配置由 Discourse 官方支持并用于其托管服务。

提供商 服务名称 是否适用于 Discourse?
Amazon AWS S3
Digital Ocean Spaces
Linode 对象存储
Google Cloud 存储
Scaleway 对象存储
Vultr 对象存储
BackBlaze 云存储 是*
自托管 MinIO
Azure Blob Storage Flexify.IO
Oracle Cloud 对象存储 [1]
Wasabi 对象存储 可能
Cloudflare R2
Contabo 对象存储

如果您有其他服务可以正常工作,请将其添加到本 wiki 中。

配置

为了将 Discourse 静态资源存储在对象存储中,请在 hooks 部分下的 app.yml 中添加以下配置:

  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

使用对象存储时,您还需要一个 CDN 来提供存储在桶中的内容。我在测试中使用了 StackPath CDN,除了需要在配置中设置 Dynamic Caching By Header: Accept-Encoding 外,其他方面工作正常。

DISCOURSE_CDN_URL 是一个指向您 Discourse 主机名并缓存请求的 CDN。它将主要用于可拉取的资源:CSS 和其他主题资源。

DISCOURSE_S3_CDN_URL 是一个指向您的对象存储桶并缓存请求的 CDN。它将主要用于可推送的资源:JS、图像和用户上传。

我们建议这两个设置不同,并由管理员设置两者。

不使用 CDN(或将桶 URL 作为 CDN URL 输入)可能会导致问题,且不受支持。

在以下示例中,https://falcoland-files-cdn.falco.dev 是一个配置为提供桶下文件的 CDN。在我的示例中,桶名称设置为 falcoland-files

app.yml 的环境变量中配置这些设置是推荐的,因为这是 CDCK 在其基础设施中的做法,因此经过充分测试。此外,上传资源的任务发生在资源编译之后,而资源编译发生在重建过程中。如果您希望从一开始就正确配置对象存储的 Discourse,则需要设置环境变量,以便在站点启动之前上传资源。

从下面的列表中选择您的提供商,并将这些设置添加到 app.yml 文件的 env 部分,相应地调整值:

AWS S3

我们官方支持并在内部使用的服务。他们的 CDN 服务 Cloudfront 也可以用于前置桶文件。请参阅 Set up file and image uploads to S3 了解如何正确配置权限。

  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

DO 的服务很好且开箱即用。启用“限制文件列表”是可以的。唯一的问题是他们的 CDN 服务 非常不稳定,因此您需要使用其他 CDN 来提供文件。此外,您不需要安装 CORS 规则,因为它会在每次重建时重新安装。

示例配置:

  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 对象存储

Linode 需要额外的配置参数 HTTP_CONTINUE_TIMEOUT。

示例配置:

  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 存储

文件列表功能有问题,因此您需要额外的环境变量来跳过该功能,以便资源可以正常工作。同时跳过 CORS 并手动配置。

:warning: 由于无法列出文件,您将无法列出备份,自动备份也会失败,因此我们不建议将其用于备份。然而,有些人建议将角色从 Storage Legacy Object Owner 更改为 Storage Legacy Bucket Owner 后,备份可以正常工作。请参阅 此主题 获取 Google Cloud 特定讨论。

有一个第三方插件可以改善集成效果,位于 https://meta.discourse.org/t/discourse-gcs-helper/247705。

示例配置:

  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 对象存储

Scaleway 的服务也非常好,大多数情况下一切正常。

:warning: Scaleway 的多部分上传仅支持 最多 1,000 个部分。这与 Amazon S3 不同,后者支持最多 10,000 个部分。对于较大的实例,这将导致 Discourse 备份失败,不完整的上传可能需要 手动删除 才能进行进一步尝试。对于小型实例,这不是问题。Scaleway 似乎对反馈持开放态度,因此如果您希望更改此限制,应联系他们。

请注意,对于 DISCOURSE_S3_ENDPOINT 参数,Discourse 使用整个区域的端点:https://s3.{region}.scw.cloud。您在 Scaleway 仪表板中找到的“桶端点”形式为 https://{bucketName}.s3.{region}.scw.cloud。省略桶名称子域名以防止连接错误。

示例配置:

  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 对象存储

Vultr 需要额外的配置参数 HTTP_CONTINUE_TIMEOUT。

示例配置:

  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 云存储

您需要跳过 CORS 并手动配置。

报告 指出 clean up orphan uploads 在 BackBlaze 上无法正常工作。您必须 更改生命周期规则 以使孤立清理正常工作。

示例配置:

  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

注意:在初始迁移到 B2 期间,您可能会遇到 2500 次免费每日 C 类事务限制。您需要添加支付方式以解除限制。

MinIO 存储服务器

在将 MinIO 存储服务器用作 S3 的替代方案之前,您需要确保满足一些注意事项和要求:

  1. 您有一个完全配置的 MinIO 服务器实例
  2. 您在 MinIO 配置中启用了域支持,用于基于域的桶 URL。这是 MinIO 和 Discourse 的强制性设置要求,因为 MinIO 仍然支持不再在 Discourse 中支持的旧版 S3“路径”样式。
  3. 您为 MinIO 正确设置了 DNS 配置,以便桶子域名正确解析到 MinIO 服务器,并且 MinIO 服务器配置了基本域名(在这种情况下,minio.example.com
  4. discourse-data 存在于 MinIO 服务器上,并且在其上设置了“公共”策略
  5. 您的 S3 CDN URL 指向一个正确配置的 CDN,该 CDN 指向桶并缓存请求,如本文档前面所述。
  6. 您的 CDN 配置为实际使用核心 S3 URL 的“Host”头 - 例如,discourse-data.minio.example.com 当它获取数据时 - 否则可能会导致 CORB 问题。

假设满足上述注意事项和先决条件,示例配置可能如下所示:

  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 仍然会在 MinIO 上启用 - 默认情况下,似乎,CORS 在 MinIO 中的所有 HTTP 动词上启用,并且 MinIO 不支持 BucketCORS(S3 API)。

Azure Blob Storage with Flexify.IO

Azure Blob Storage 不是 S3 兼容服务,因此不能与 Discourse 一起使用。有一个插件,但它已损坏。

Azure Blob Storage 暴露 S3 兼容接口的最简单方法是添加一个 Flexify.IO 服务器,该服务器将 Azure 存储协议 转换 为 S3。

截至本文撰写时,该服务在 Azure 上是免费的,您只需要一个非常基础(便宜)的 VM 层即可开始运行。然而,它需要一些设置。

  1. 在 Azure 门户中,创建一个新的 Flexify.IO - Amazon S3 API for Azure Blob Storage 资源。
  2. 对于轻度使用,最小 VM 配置似乎工作正常。您可以接受大多数默认配置。创建 VM 时请记住保存 PEM 密钥文件。
  3. 浏览到 Flexify.IO VM 链接,并进入系统。按照说明设置 Azure Blob Storage 数据提供程序和生成的 S3 端点。确保端点配置设置 Public read access to all objects in virtual buckets 为 true。复制 S3 端点 URL 和密钥。
  4. 新建虚拟桶 并创建虚拟桶。它可以与您的 Azure Blob Storage 容器同名,也可以是不同的名称。链接任何要合并到此虚拟桶中的容器。此虚拟桶用于通过 S3 暴露一个公共可读桶。
  5. 默认情况下,Flexify.IO 安装自签名 SSL 证书,而 S3 端点需要 HTTPS。使用密钥文件 SSH 到 VM(默认用户名为 azureuser),并用正确的文件替换以下文件:
  • /etc/flexify/ssl/cert.pem - 用证书文件(PEM 编码)替换

  • /etc/flexify/ssl/key.pem - 用私钥文件(PKCS#8 PEM 编码,即以 BEGIN PRIVATE KEY 开头而不是 BEGIN RSA PRIVATE KEY 的 PKCS#1)替换

    这些文件是 root 所有,因此您需要 sudo 来替换它们。最好确保替换文件具有与原始文件相同的所有权和权限,即 root:root600 权限。

  1. 默认情况下,Flexify.IO 创建一个具有多个桶的根级 S3 服务。Discourse 需要 子域名 支持桶。转到:<您的 Flexify.IO VM IP>/flexify-io/manage/admin/engines/configs/1,这将打开一个 隐藏 配置页面!
  2. Endpoint hostname 字段中指定 S3 基本域名(假设是 s3.mydomain.com),该字段默认应为空白。按 保存 以保存设置。
  3. 在 Azure 门户中重启 Flexify.IO VM。
  4. 在您的 DNS 中,将 s3.mydomain.com*.s3.mydomain.com 映射到 Flexify.IO VM IP。
  5. 在 Discourse 中,在管理页面设置以下内容(是的,不需要在 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>  (任何容器都可以,因为它不需要公共读取访问权限,Flexify.IO 会自动暴露它们)
backup location: s3

不建议将同一桶用于生产和暂存。如果您仍然这样做,请采取措施确保您的暂存站点不会删除您的生产资源(至少设置 s3 disable cleanup,并注意它是否删除了生产的备份)。

Wasabi

@pfaffman 尝试使用 wasabi 进行备份,但它似乎间歇性且静默失败,将备份留在硬盘上并最终填满磁盘。wasabi 和 meta 都没有任何线索,因此我不推荐它,尽管您的体验可能不同。 @pfaffman 现在相当确定这个问题是由于备份和自动重启以某种方式同时安排造成的;它仅用于备份,但似乎工作正常。如果有人想尝试并在此处报告,它应该可以工作,至少对于备份而言。

Oracle Cloud

Oracle Cloud 不支持虚拟主机样式的桶访问无法工作

Cloudflare R2

Cloudflare R2 在使用 Cloudflare CDN 时与 S3 对象存储兼容。Cloudflare 的 免费计划提供 10GB 存储,这对于大多数论坛的需求来说应该绰绰有余。

要配置 Cloudflare R2,您需要在 Cloudflare 仪表板下的 R2 对象存储中配置相关设置。

根据您的需要(上传或备份或两者),这些是需要插入到 app.yml 文件或 Admin-All site settings 中搜索 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

如果您不想编辑 app.yml,您可以在管理 UI 中执行此操作:

“Admin → All site settings”(搜索 S3):

  • 启用 S3 上传 = true
  • 启用直接 S3 上传 = true
  • S3 访问密钥 ID = "xxx"
  • S3 秘密访问密钥 = "xxx"
  • S3 区域 = any
  • S3 上传桶 = your upload bucket name
  • S3 端点 = https://<your-account-id>.r2.cloudflarestorage.com
  • S3 CDN URL = https://uploads.yourdomain.com
  • S3 使用 ACL = false(禁用此选项!)
  • S3 备份桶 = your backup bucket name
  • 备份位置 = S3

配置 Cloudflare R2 的重要注意事项:

  1. 在为 Cloudflare R2 配置 app.ymlweb_only.yml 时,设置 DISCOURSE_S3_CDN_URL不要设置 DISCOURSE_CDN_URL 如果您通过 Cloudflare 代理主域名,它已经在自动缓存和提供您的应用资源。如果您尝试使用 Cloudflare DNS 配置单独的 DISCOURSE_CDN_URL,Discourse 的严格 NGINX 主机路由将拒绝请求,导致无限 301 重定向循环、CORS 策略阻止和站点损坏。
  • DISCOURSE_CDN_URL 注释掉。
  • 设置 DISCOURSE_S3_CDN_URL: https://your-r2-custom-domain.com
  1. API 令牌权限:由于 Discourse 只有一组凭据字段,您在 Cloudflare 中生成的 API 令牌必须有权访问您的上传桶和备份桶。创建令牌时,选择“应用于所有桶”或使用“应用于特定桶”并确保两者都选中。此外,创建 API 密钥时,请确保选中 Object Read & Write(默认仅为 Object Read only)。

  2. 从 Cloudflare 复制端点 URL 时,它可能会将桶名称附加到 URL 末尾 - 如果粘贴到您的 .yml 文件(或管理设置)中,您应该从字符串末尾删除桶名称。

  3. 如果您想使用 R2 上传桶进行所有上传,包括 PDFZIP 文件,请取消注释 # DISCOURSE_S3_USE_CDN_URL_FOR_ALL_UPLOADS: true。(注意:这将使所有上传文件通过直接链接公开可用)

  4. 如果启用 DISCOURSE_ENABLE_DIRECT_S3_UPLOADS(true),则应禁用 DISCOURSE_S3_USE_ACLS(false)。这是因为 Cloudflare R2 使用桶级权限;您的上传桶应该是公共的,备份桶应该是私有的。对于 Cloudflare R2 上传,您 不需要 配置 CORS 规则 rake 任务或编写 IAM json,因为您将在 Cloudflare 仪表板中设置桶权限时进行配置。Cloudflare 的“Object Read & Write”令牌自动授予 multipart 上传权限,并将以下 CORS 规则直接粘贴到 Cloudflare 仪表板 R2 上传桶设置下的 CORS Policy 中,可以替代 rake 任务。

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

另请参阅此主题以获取有关设置 Cloudflare 的更多信息:Using Discourse with Cloudflare: Best Practices

Contabo

@tuxed 尝试使 Contabo 对象存储适用于 S3 兼容上传。似乎上传时会在 URL 中前缀存储库名称,他无法使其工作。

安全上传

安全上传仅支持 AWS S3。如果 rake uploads:migrate_to_s3 失败,您应该输入这些命令以首先计数,然后将那些上传标记为非安全,前提是您知道它们不需要安全,在这种情况下,您需要使用 AWS S3。

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

  1. Oracle Cloud 不支持虚拟主机样式的桶访问无法工作 ↩︎

69 个赞
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