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

It’s set in the example configuration block for Vultr in the OP. Copy and paste into your app.yml and adjust the necessary fields.

「いいね!」 2

Thanks, I missed this bit:

「いいね!」 1

This isn’t going smoothly for me, sorry to reply so many times.

If I do the above, should I ignore the admin panel settings for s3 and backups?

Or should admin panel settings be configured as well?

「いいね!」 1

You just need to follow this guide here in the OP and you will get a functional object storage configuration.

「いいね!」 3

Setting those variables makes them unavailable from the UX. You must set them as described here rather than the ux.

「いいね!」 2

I think it’s (mostly?) working now, but is this content security policy script src safe?

I’m using AWS for two S3 containers (for uploads & backups), and two CloudFront CDNs (for files & assets). When I use my own CNAMEs for the CloudFront CDNs, I get a bunch of script-src network errors in my browser when loading Discourse. No more errors after adding those entires to my CSP.

「いいね!」 1

Are those the urls you put in the env variables described in the OP? And are they https?

「いいね!」 1

Yes, I don’t have script-src warnings when I put the two d23whatever.cloudfront.net URLs in the env variables. When I put my custom URLs, i.e. community-cdn.mydomain and files-cdn.mydomain, in the env variables, that’s the time I get these script-src warnings. And apparently the stripe js is still giving me this warning even though it’s in my content security policy script src.

「いいね!」 2

S3アップロードとオブジェクトストレージを、OPで説明されているように設定しましたが、CDNは使用していません。

DISCOURSE_S3_CDN_URL変数については、以下のようになっています。
https://my-bucket-uploads.s3.dualstack.us-west-2.amazonaws.com

バックアップを含め、すべて問題ないように見えますが、コンソールでは、投稿への返信が開始されると、このエラーが表示されます。

エラー内のリクエストURLは、実際には2つのURLの文字列になっており、これが原因のようです。

https://mydiscourse.com/t/uploads-test-for-s3/79/https://my-bucket-uploads.s3.dualstack.us-west-2.amazonaws.com/assets/markdown-it-bundle-a7328b73d3e7b030770eab70f10bdb0af655b3d8fa929bc49f1ad04c4cdaa198.br.js

「いいね!」 2

CDNは正しく機能するために必須です。

「いいね!」 4

私もオブジェクトストア(minio)を設定しているがCDNがないという同じ状況です。これはサポートされるユースケースでしょうか?

これまでのテストで確認したところ、問題があるのは markdown-it-bundle jsファイルのみで、URLが間違っています - DISCOURSE_HOSTNAME/DISCOURSE_S3_CDN_URL/assets/markdown-it-bundle-HASH.br.js

これはバグのようです。DISCOURSE_CDN_URL 変数を設定しても、DISCOURSE_HOSTNAME/DISCOURSE_CDN_URL/assets/markdown-it-bundle-HASH.br.js の形式で間違ったURLを指します。

実際には DISCOURSE_S3_CDN_URL/assets/markdown-it-bundle-HASH.br.js を指すべきです。

他のjsアセットは正しいURLを指しています。

おっしゃることから、まだ特定できていない他の問題も発生するだろうと推測します。何か問題が発生する可能性について、もう少し詳しい情報をいただけますか?

私の理解が正しければ、jsアセットはオブジェクトストアにあり、スタイルシートはCDNにあるべきです。CDNがない場合、スタイルシートは通常通りアプリから配信されますか?(私の見たところ、そうなっています)

ご協力ありがとうございます。

「いいね!」 3

それはOPによるとサポートされていないユースケースです:

「いいね!」 1

皆様

Lightsailで新しいDiscourseサーバーをセットアップし、S3へのアップロードとバックアップのためにこのガイドを使用しました:setting-up-file-and-image-uploads-to-s3

セットアップ後、画像をアップロードすると画面に「バケットはACLを許可していません」というエラーが表示されました。

以下は私のS3ポリシーです:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:GetObjectVersionTagging",
                "s3:CreateBucket",
                "s3:GetObjectAcl",
                "s3:GetBucketObjectLockConfiguration",
                "s3:PutLifecycleConfiguration",
                "s3:GetObjectVersionAcl",
                "s3:PutObjectTagging",
                "s3:DeleteObject",
                "s3:DeleteObjectTagging",
                "s3:GetBucketPolicyStatus",
                "s3:GetObjectRetention",
                "s3:GetBucketWebsite",
                "s3:ListJobs",
                "s3:DeleteObjectVersionTagging",
                "s3:GetObjectLegalHold",
                "s3:GetBucketNotification",
                "s3:PutBucketCORS",
                "s3:GetReplicationConfiguration",
                "s3:ListMultipartUploadParts",
                "s3:PutObject",
                "s3:GetObject",
                "s3:DescribeJob",
                "s3:PutObjectVersionAcl",
                "s3:GetAnalyticsConfiguration",
                "s3:GetObjectVersionForReplication",
                "s3:GetLifecycleConfiguration",
                "s3:GetAccessPoint",
                "s3:GetInventoryConfiguration",
                "s3:GetBucketTagging",
                "s3:GetBucketLogging",
                "s3:ListBucketVersions",
                "s3:ReplicateTags",
                "s3:ListBucket",
                "s3:GetAccelerateConfiguration",
                "s3:GetBucketPolicy",
                "s3:GetEncryptionConfiguration",
                "s3:GetObjectVersionTorrent",
                "s3:AbortMultipartUpload",
                "s3:PutBucketTagging",
                "s3:GetBucketRequestPayment",
                "s3:GetAccessPointPolicyStatus",
                "s3:GetObjectTagging",
                "s3:GetMetricsConfiguration",
                "s3:PutObjectAcl",
                "s3:GetBucketPublicAccessBlock",
                "s3:ListBucketMultipartUploads",
                "s3:ListAccessPoints",
                "s3:PutObjectVersionTagging",
                "s3:GetBucketVersioning",
                "s3:GetBucketAcl",
                "s3:GetObjectTorrent",
                "s3:GetAccountPublicAccessBlock",
                "s3:ListAllMyBuckets",
                "s3:GetBucketCORS",
                "s3:GetBucketLocation",
                "s3:GetAccessPointPolicy",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::mybucket-upload",
                "arn:aws:s3:::mybucket-upload/*",
                "arn:aws:s3:::mybucket-backup",
                "arn:aws:s3:::mybucket-backup/*"
            ]
        }
    ]
}

そして、S3バケットのパブリックアクセス設定は以下の通りです:

この問題の解決にご協力いただけますでしょうか?
よろしくお願いいたします。
Cheers,
Quang

「いいね!」 3

ステージングサイトで本番サイトと同じS3バケットを使用する必要がありますか?

「いいね!」 1

いいえ、それは非常に安全ではなく、まだ他の環境に存在するべきファイルを削除したり、他の環境のファイルを変更したりする可能性があります(これにより、ファイルが失われたり、ファイルが間違ったりする可能性があります)。

バケットと認証情報は両方とも異なる必要があります(そして、ステージング認証情報は、特に書き込みおよび削除操作に関して、本番バケットにアクセスできないようにする必要があります)。

パスごとに異なる認証情報を使用する方法があるかもしれませんが、自分で足を撃つ可能性が高いので、別のバケットを使用することをお勧めします。

「いいね!」 5

DISCOURSE_CDN_URLDISCOURSE_S3_CDN_URL も別々にする必要がありますか?

「いいね!」 1

そうだと思います。ステージングと本番のドメイン/URLが異なる場合(そうですよね?)、DISCOURSE_CDN_URL(CDNプロバイダーを指し、それがウェブサイトのドメインを指します)はステージングと本番で異なることが期待されます。同じロジックがDISCOURSE_S3_CDN_URLにも適用されます(異なるバケットは異なるURLを持つべきだからです)。

「いいね!」 4

皆さん、こんにちは。S3はまだ使い始めたばかりなので、うまく説明できるか分かりませんが、最善を尽くします。サイトの他の部分でのログインを許可するためにDiscourse Connectを使用していますが、プロフィール画像が機能しなくなりました。これはCORSポリシーに関連していると思いますが、どこで設定すればよいか分かりません。理想的には、forum.domain.tlddomain.tld、またはすべてのサブドメインのワイルドカードでホワイトリストに登録したいと考えています。これはDiscourseで設定するものですか、それともどこで設定しますか?Vultrオブジェクトストレージを使用していますが、関係があるでしょうか。

「いいね!」 1

files S3 バケットでバージョン管理を有効にできますか? Discourse の S3 バケットのバックアップには AWS Backup が推奨される方法ですか?

「いいね!」 1

はい。

バージョン管理を使用したり、別のリージョンに同期したりするのは、いずれも良い戦略です。

「いいね!」 4