OP의 Vultr 예제 구성 블록에 설정되어 있습니다. app.yml에 복사하고 붙여넣은 후 필요한 필드를 조정하세요.
감사합니다. 이 부분을 놓치고 있었네요:
제가 여러 번 답글을 남기는 점 죄송합니다. 진행이 잘 안 되고 있네요.
위와 같이 설정하면 관리자 패널의 S3 및 백업 설정은 무시해도 되는 건가요?
아니면, 관리자 패널 설정도 함께 구성해야 하나요?
여기 OP에 있는 가이드만 따라오면 작동하는 객체 저장소 구성을 얻을 수 있습니다.
이 변수들을 설정하면 UX에서 사용할 수 없게 됩니다. ux 대신 여기 설명된 대로 설정해야 합니다.
지금 (대부분?) 작동하는 것 같은데, 이 content security policy script src 설정이 안전한가요?
저는 두 개의 S3 컨테이너(업로드 및 백업용)와 두 개의 CloudFront CDN(파일 및 에셋용)을 AWS에서 사용하고 있습니다. CloudFront CDN에 제 CNAME을 사용할 때, Discourse를 로드하는 동안 브라우저에서 script-src 네트워크 오류가 여러 개 발생합니다. 해당 항목들을 CSP에 추가한 후에는 더 이상 오류가 발생하지 않습니다.
OP에서 설명한 환경 변수에 입력한 URL이 그것인가요? 그리고 https인가요?
네, 두 개의 d23whatever.cloudfront.net URL을 환경 변수에 넣으면 script-src 경고가 나오지 않습니다. 하지만 커스텀 URL, 즉 community-cdn.mydomain과 files-cdn.mydomain을 환경 변수에 넣으면 그때 script-src 경고가 나타납니다. 그리고 content security policy script src에 stripe js가 포함되어 있음에도 불구하고 여전히 이 경고를 받고 있습니다.
OP에 나와 있는 대로 S3 업로드와 객체 저장을 CDN 없이 설정했습니다.
DISCOURSE_S3_CDN_URL 변수에는 다음을 사용했습니다:
https://my-bucket-uploads.s3.dualstack.us-west-2.amazonaws.com
백업을 포함한 모든 것이 정상적으로 작동하는 것으로 보이지만, 게시글에 답변을 시작할 때 콘솔에 다음과 같은 오류가 표시됩니다:
오류에 포함된 요청 URL은 실제로 두 개의 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을 가리키고 있어서 문제가 발생하는 것 같습니다. 현재 URL은 DISCOURSE_HOSTNAME/DISCOURSE_S3_CDN_URL/assets/markdown-it-bundle-HASH.br.js 형식입니다.
사실 이 부분은 버그로 보입니다. DISCOURSE_CDN_URL 변수를 설정해도 여전히 잘못된 URL을 가리키며, 그 형태는 DISCOURSE_HOSTNAME/DISCOURSE_CDN_URL/assets/markdown-it-bundle-HASH.br.js입니다.
원래는 DISCOURSE_S3_CDN_URL/assets/markdown-it-bundle-HASH.br.js를 가리켜야 합니다.
다른 js 에셋은 올바른 URL을 가리키고 있습니다. ’
말씀하신 내용으로 미루어 보아, 아직 파악하지 못한 다른 문제들이 있을 것 같습니다. 어떤 부분이 문제가 될 수 있는지 더 자세한 정보를 주실 수 있을까요?
제 이해가 맞다면, js 에셋은 객체 스토리지에 있고 스타일시트는 CDN에 있어야 하는 것 같습니다. CDN이 없을 경우, 스타일시트는 평소처럼 앱에 의해 전달될 수 있을까요? (제가 확인한 바로는 그렇게 되는 것 같습니다.)
도와주셔서 감사합니다.
OP에 따르면 이는 지원되지 않는 사용 사례입니다:
여러분께,
Lightsail을 사용하여 이 가이드 setting-up-file-and-image-uploads-to-s3에 따라 S3 업로드와 백업을 설정하여 새로운 discourse 서버를 구축했습니다.
설정 완료 후, 이미지를 업로드할 때 화면에 "The bucket does not allow ACLs"라는 오류가 표시됩니다.
제 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 버킷 공개 액세스 설정은 다음과 같습니다:
이 문제를 해결하는 데 도움을 주실 수 있을까요?
감사합니다.
감사합니다,
Quang
스테이징 사이트는 프로덕션 사이트와 동일한 S3 버킷을 사용해야 하나요?
아니요, 그렇게 하면 매우 위험할 수 있으며, 다른 환경에 남아 있어야 할 파일이 삭제되거나 다른 환경의 파일이 변경될 수 있습니다(이로 인해 파일 누락, 잘못된 파일 등의 문제가 발생할 수 있음).
버킷과 자격 증명 모두 달라야 합니다(특히 쓰기 및 삭제 작업에 대해 스테이징 자격 증명은 프로덕션 버킷에 접근할 수 없어야 합니다).
경로별로 다른 자격 증명을 사용하는 방법이 있을 수도 있지만, 발등을 찍을 가능성이 높으므로 별도의 버킷을 사용하도록 권장합니다.
DISCOURSE_CDN_URL와 DISCOURSE_S3_CDN_URL도 별도로 설정해야 하나요?
그렇게 생각하는데, 스테이징과 프로덕션의 도메인/URL이 서로 다르기 때문이죠(그렇지 않나요?). 그렇다면 DISCOURSE_CDN_URL(최종적으로 CDN 제공업체를 가리키며, 이는 다시 웹사이트 도메인을 가리킴)은 스테이징과 프로덕션에서 서로 다른 값으로 설정될 것으로 예상됩니다. 동일한 논리가 DISCOURSE_S3_CDN_URL에도 적용됩니다(서로 다른 버킷은 서로 다른 URL을 가져야 하므로).
여러분, 안녕하세요. 저는 S3에 대해 아직 많이 모르는 편이라, 이 내용을 어떻게 표현해야 할지 정확히 모르겠지만 최대한 설명해 보겠습니다. 최근 업로드와 백업에 S3를 사용하도록 변경했는데, 사이트의 다른 부분에서 로그인을 허용하기 위해 Discourse Connect를 사용하고 있었습니다. 그런데 이제 프로필 이미지가 작동하지 않습니다. 이 문제가 CORS 정책과 관련이 있을 것 같은데, 어디서 설정해야 하는지 모르겠습니다. 이상적으로는 forum.domain.tld와 domain.tld에 대해 화이트리스트를 등록하고 싶고, 모든 서브도메인에 와일드카드를 적용하는 것도 괜찮습니다. 이것이 Discourse에서 설정해야 하는 사항인지, 아니면 정확히 어디서 설정해야 하는지 궁금합니다. 참고로 Vultr 오브젝트 스토리지를 사용 중인데, 이것이 차이를 만들까요?
files S3 버킷에서 버전 관리(versioning)를 활성화할 수 있나요? Discourse의 S3 버킷을 백업하는 데 AWS Backup이 권장되는 방법인가요?
네, 가능합니다.
버전 관리나 다른 리전으로 동기화하는 것 모두 좋은 전략입니다.



