アップロード用のS3互換オブジェクトストレージプロバイダーを設定する

<div data-theme-toc="true"

:information_source: このトピックでは、一般的な S3 互換のオブジェクトストレージプロバイダー(S3 クローン)の設定方法について説明します。Discourse のホスティングサービスで公式にサポートされ、内部で使用されている Amazon AWS S3 の設定の詳細については、Set up file and image uploads to S3 を参照してください。

プロバイダー サービス名 Discourse との互換性?
Amazon AWS S3 はい
Digital Ocean Spaces はい
Linode Object Storage はい
Google Cloud Storage はい
Scaleway Object Storage はい
Vultr Object Storage はい
BackBlaze Cloud Storage はい*
自前ホスティング MinIO はい
Azure Blob Storage Flexify.IO はい
Oracle Cloud Object Storage いいえ [1]
Wasabi Object Storage 場合による
Cloudflare R2 はい
Contabo Object Storage いいえ

他のサービスで動作を確認できた場合は、この Wiki に追加してください。

設定

Discourse の静的アセットをオブジェクトストレージに保存するには、app.ymlhooks セクションに以下の設定を追加します:

  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

公式にサポートし、内部で使用しているサービスです。Cloudfront という CDN オファリングもバケットのファイルをフロントエンドとして配信するために使用できます。権限の正しい設定方法については、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 Object Storage

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 Storage

ファイルのリスト機能が壊れているため、アセットを動作させるためにそれをスキップするための追加の ENV 変数が必要です。また、CORS もスキップし、手動で設定してください。

:warning: ファイルをリストできないため、バックアップのリスト表示ができず、自動バックアップが失敗するため、バックアップに使用することはお勧めしません。ただし、ロールを Storage Legacy Object Owner から Storage Legacy Bucket Owner に変更すると、バックアップが正しく動作するという報告もあります。Google Cloud 固有の議論については、このトピック を参照してください。

統合を改善するためのサードパーティ製プラグインが Discourse GCS Helper にあります。

設定例:

  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

Scaleway のオファリングも非常に優れており、大部分が問題なく動作します。

:warning: Scaleway のマルチパートアップロードは、最大 1,000 パーツ までしかサポートしていません。これは最大 10,000 パーツをサポートする Amazon S3 とは一致しません。大規模なインスタンスの場合、これにより 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 Object Storage

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 Cloud Storage

CORS をスキップし、手動で設定する必要があります。

BackBlaze で clean up orphan uploads(孤立アップロードのクリーンアップ)が正しく動作しないという 報告 があります。孤立アップロードのクリーンアップを有効にするには、バケットの ライフサイクルルールを変更 する必要があります。

設定例:

  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 への初期移行中は、1日2,500件の無料クラスCトランザクション制限 に達する可能性があります。制限を解除するには、支払い方法を追加する必要があります。

MinIO Storage Server

MinIO ストレージサーバーを S3 の代替として使用する前に、満たす必要があるいくつかの注意事項と要件があります:

  1. 完全に設定された MinIO サーバーインスタンスがあること
  2. MinIO の設定でドメインサポートが有効になっており、ドメイン駆動型のバケット URL が使用できること。これは MinIO と Discourse のための必須設定要件です。MinIO はまだ Discourse でサポートされていないレガシーな S3「パス」スタイルをサポートしているためです。
  3. MinIO の DNS 設定が正しく設定されており、バケットのサブドメインが MinIO サーバーに正しく解決され、MinIO サーバーが基本ドメイン(この場合は minio.example.com)で設定されていること
  4. MinIO サーバー上に discourse-data バケットが存在し、それに「公開」ポリシーが設定されていること
  5. このドキュメントの前述の通り、S3 CDN URL がバケットを指し、リクエストをキャッシュするように正しく設定された CDN を指していること
  6. CDN が実際にコア S3 URL の「Host」ヘッダーを使用するように設定されていること - データを取得する際に discourse-data.minio.example.com のように - そうでないと CORB(Cross-Origin Resource Blocking)の問題を引き起こす可能性があります。

上記の注意事項と前提条件が満たされていると仮定すると、設定例は以下のようになります:

  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

アプリの再ビルダーによってルールがインストールされなくても、MinIO では CORS が有効になります。デフォルトでは、MinIO ではすべての HTTP 動詞に対して CORS が有効になっており、その結果、MinIO は BucketCORS(S3 API)をサポートしていません。

Azure Blob Storage with Flexify.IO

Azure Blob Storage は S3 互換のサービスではないため、Discourse と一緒に使用することはできません。プラグインは存在しますが、壊れています。

Azure Blob Storage に対して S3 互換のインターフェースを公開する最も簡単な方法は、Azure Storage プロトコルを S3 に 変換 する Flexify.IO サーバーを追加することです。

現在、このサービスは 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. New Virtual Bucket を押し、仮想バケットを作成します。名前は Azure Blob Storage コンテナと同じでも、異なる名前にしても構いません。この仮想バケットにマージするコンテナをリンクします。この仮想バケットは、S3 を介して公開読み取り可能なバケットを公開するために使用されます。
  5. デフォルトでは、Flexify.IO は自己署名 SSL 証明書をインストールしますが、S3 エンドポイントには HTTPS が必要です。キーファイルを使用して VM に SSH 接続し(ユーザー名はデフォルトで azureuser)、以下のファイルを正しいファイルに置き換えます:
  • /etc/flexify/ssl/cert.pem - 証明書ファイル(PEM エンコーディング)に置き換えます

  • /etc/flexify/ssl/key.pem - 秘密鍵ファイル(PKCS#8 PEM エンコーディング、BEGIN PRIVATE KEY で始まり、PKCS#1 の BEGIN RSA PRIVATE KEY ではないもの)に置き換えます

    これらのファイルはルート所有権のため、置き換えるには sudo が必要です。置き換えたファイルが元のファイルと同じ所有権と権限を持っていることを確認するのが最善です。つまり、root:root 所有権と 600 権限です。

  1. デフォルトでは、Flexify.IO は複数のバケットを持つルートレベルの S3 サービスを作成します。Discourse はバケットの サブドメイン サポートを必要とします。<your Flexify.IO VM IP>/flexify-io/manage/admin/engines/configs/1 に移動し、隠し 設定ページを開きます!
  2. Endpoint hostname フィールドに S3 の基本ドメイン(例:s3.mydomain.com)を指定します。デフォルトでは空白です。Save を押して設定を保存します。
  3. Azure ポータルで Flexify.IO VM を再起動します。
  4. DNS で s3.mydomain.com*.s3.mydomain.comFlexify.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 Object Storage 下で関連する設定を行う必要があります。

ニーズ(アップロード、バックアップ、またはその両方)に応じて、app.yml ファイルまたは Admin-All site settingsS3 を検索して挿入する関連設定は以下の通りです:

  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 を検索):

  • Enable S3 uploads = true
  • Enable direct S3 uploads = true
  • S3 access key ID = "xxx"
  • S3 secret access key = "xxx"
  • S3 region = any
  • S3 upload bucket = your upload bucket name
  • S3 endpoint = https://<your-account-id>.r2.cloudflarestorage.com
  • S3 CDN URL = https://uploads.yourdomain.com
  • S3 use ACLs = false (これを無効にしてください!)
  • S3 backup bucket = your backup bucket name
  • Backup location = S3

Cloudflare R2 設定に関する重要な注意点:

  1. Cloudflare R2 の app.yml または web_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 には資格情報のフィールドが1セットしかないため、Cloudflare で生成する API トークンは、アップロードバケットとバックアップバケットの両方にアクセスする権限が必要です。トークンを作成する際、「すべてのバケットに適用」を選択するか、「特定のバケットに適用」を使用して両方にチェックを入れる必要があります。また、API キーを作成する際に Object Read & Write にチェックを入れることを忘れないでください(デフォルトは Object Read only のみです)。

  2. Cloudflare からエンドポイント URL をコピーする場合、バケット名が URL に追加されることがあります。.yml ファイル(または管理者設定)に貼り付けられた場合、文字列の末尾からバケット名を削除してください。

  3. PDFZIP ファイルを含むすべてのアップロードに R2 アップロードバケットを使用したい場合は、# 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」トークンは自動的にマルチパートアップロードの権限を付与し、以下の 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 Object Storage を 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