これは OP の Vultr 用の例示設定ブロックに記載されています。app.yml にコピー&ペーストし、必要なフィールドを調整してください。
ありがとうございます、この部分を見落としていました:
スムーズに進んでいないようで、何度も返信して申し訳ありません。
上記の設定を行った場合、管理パネルの S3 およびバックアップ関連の設定は無視してよいのでしょうか?
それとも、管理パネルの設定も別途行う必要があるのでしょうか?
OP のガイドに従うだけで、機能するオブジェクトストレージ設定が得られます。
これらの変数を設定すると、UX から利用できなくなります。UX ではなく、ここで説明されている通りに設定してください。
今は(ほとんど)動作していると思いますが、このcontent security policy script srcは安全でしょうか?
アップロードとバックアップ用の S3 バケット 2 つ、ファイルとアセット用の CloudFront CDN 2 つを AWS で使用しています。CloudFront CDN に独自の CNAME を使用すると、Discourse を読み込む際にブラウザで多数の script-src ネットワークエラーが発生します。これらのエントリを CSP に追加すると、エラーは出なくなりました。
それらは OP で説明されている環境変数に入力した URL ですか?また、https になっていますか?
はい、d23whatever.cloudfront.net の 2 つの URL を環境変数に設定した場合は script-src の警告は表示されません。しかし、community-cdn.mydomain や files-cdn.mydomain といったカスタム URL を環境変数に設定すると、script-src の警告が表示されるようになります。また、Stripe の JavaScript は、content security policy の script-src に指定されているにもかかわらず、依然としてこの警告を出しています。
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
CDNは正しく機能するために必須です。
私もオブジェクトストア(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がない場合、スタイルシートは通常通りアプリから配信されますか?(私の見たところ、そうなっています)
ご協力ありがとうございます。
それはOPによるとサポートされていないユースケースです:
皆様
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
ステージングサイトで本番サイトと同じS3バケットを使用する必要がありますか?
いいえ、それは非常に安全ではなく、まだ他の環境に存在するべきファイルを削除したり、他の環境のファイルを変更したりする可能性があります(これにより、ファイルが失われたり、ファイルが間違ったりする可能性があります)。
バケットと認証情報は両方とも異なる必要があります(そして、ステージング認証情報は、特に書き込みおよび削除操作に関して、本番バケットにアクセスできないようにする必要があります)。
パスごとに異なる認証情報を使用する方法があるかもしれませんが、自分で足を撃つ可能性が高いので、別のバケットを使用することをお勧めします。
DISCOURSE_CDN_URL と DISCOURSE_S3_CDN_URL も別々にする必要がありますか?
そうだと思います。ステージングと本番のドメイン/URLが異なる場合(そうですよね?)、DISCOURSE_CDN_URL(CDNプロバイダーを指し、それがウェブサイトのドメインを指します)はステージングと本番で異なることが期待されます。同じロジックがDISCOURSE_S3_CDN_URLにも適用されます(異なるバケットは異なるURLを持つべきだからです)。
皆さん、こんにちは。S3はまだ使い始めたばかりなので、うまく説明できるか分かりませんが、最善を尽くします。サイトの他の部分でのログインを許可するためにDiscourse Connectを使用していますが、プロフィール画像が機能しなくなりました。これはCORSポリシーに関連していると思いますが、どこで設定すればよいか分かりません。理想的には、forum.domain.tldとdomain.tld、またはすべてのサブドメインのワイルドカードでホワイトリストに登録したいと考えています。これはDiscourseで設定するものですか、それともどこで設定しますか?Vultrオブジェクトストレージを使用していますが、関係があるでしょうか。
files S3 バケットでバージョン管理を有効にできますか? Discourse の S3 バケットのバックアップには AWS Backup が推奨される方法ですか?
はい。
バージョン管理を使用したり、別のリージョンに同期したりするのは、いずれも良い戦略です。



