업로드를 위해 S3 호환 객체 저장소 제공자 구성하기

안녕하세요, @mcwumbly. 전에 "S3 clone"으로 검색하면 아주 쉽게 찾을 수 있었어요. 그런데 방금에는 찾지 못했어요. 제목에 문제가 있었던 건가요? 이 항목을 찾을 수 있는 검색 방법이 있을까요? 표준 설치(standard install)처럼 특정 단어가 자동으로 링크되도록 하는 (이름을 잘 기억이 안 나네요) 기능을 추가할 수 있을까요? (어떤 단어를 사용해야 할지 떠오르지 않네요.)

3개의 좋아요

저는 매주 여러 번 해당 주제를 링크하는 사람으로서, 어느 정도 동의합니다 :stuck_out_tongue:

혹시 OP 본문에 "s3 clones"를 추가하면 검색이 더 잘 될까요?

2개의 좋아요

실제 환경에서 "S3 compatible"라는 표현이 더 흔하다는 것을 발견하여, 문서 제목을 전반적으로 업데이트하는 과정에서 해당 제목을 변경했습니다. 예를 들어: AIStor S3 API: Full AWS S3 Compatibility On-Prem | MinIO

다만, 원본 글 본문에 다른 검색어를 포함하자는 제안은 타당하다고 생각합니다. (해당 제안은 이 글에 이미 추가했습니다.)

1개의 좋아요

괜찮아 보입니다. 시대에 맞춰 변해야 할 것 같네요. :person_shrugging:

네. 사실 그렇게 어렵지 않습니다. @pfaffman 님도 할 수 있습니다!

@falco:

2개의 좋아요

안녕하세요, 혹시 Contabo Object Storage를 S3 호환 업로드로 성공적으로 사용하신 분이 계신가요? 업로드 시 URL에 리포지토리 이름이 접두사로 추가되는 것 같습니다.

예를 들어, community라는 이름의 버킷을 사용하면 https://community.eu2.contabostorage.com과 같은 URL이 생성됩니다.

Duplicati 같은 프로그램에서 이러한 동작을 확인했지만, 도메인에 버킷 이름을 접두사로 붙이는 것을 제외할 수 있습니다.

이 Object Storage는 가격이 매우 저렴해서 사용할 수 있는 해결책이 있다면 정말 감사하겠습니다.

Cloudflare에서 제 도메인으로 CNAME을 설정하여 SSL을 제공하기 위해 여러 테스트를 해보았지만, community.cdn.midominio.com의 경우 SSL 인증서가 더 이상 적용되지 않습니다. 와일드카드 인증서를 사용하기 때문이며, Cloudflare 프록시를 비활성화하면 인증서가 올바르지 않다는 오류가 발생합니다.

감사합니다,

1개의 좋아요

S3 CDN 설정을 https://community.eu2.contabostorage.com으로 변경해 보셨나요? 제 생각에는 그렇게 하면 작동할 것 같습니다.

존재하지 않습니다. eu2.contabostorage.com는 Contabo의 엔드포인트입니다.

1개의 좋아요

네, 하지만 버킷에 있는 예시 파일의 최종 URL은 어떻게 될까요?

2개의 좋아요

![](upload://u6BBQfNFGrA4yuaLeqABnVkt87U.png)

그의 말은, 당신이 직접 버킷에 파일을 업로드할 때(파일을 업로드할 수 있는 어떤 도구를 사용하든) 그 파일에 액세스하려면 어떤 URL을 사용해야 하느냐는 것입니다.

2개의 좋아요

https://eu2.contabostorage.com/9198f3bf2d6e43dd86fab037ebad3aee:comunidad/castopod-1.png

구조는 다음과 같습니다.

호스트: https://eu2.contabostorage.com/
사용자: 9198f3bf2d6e43dd86fab037ebad3aee
버킷: comunidad
파일: castopod-1.png

2개의 좋아요

그것은 작동하지 않는 URL입니다. 하지만 그 콜론을 슬래시로 바꾸면 작동할 수도 있겠네요.

첫 번째 게시물에서 설명한 방식과 다르네요. 그래서 이번에는 그가 다른 제안을 할 수 있을지도 모릅니다.

1개의 좋아요

다음과 같이 설정을 시도해 보세요.

  DISCOURSE_S3_CDN_URL: "https://eu2.contabostorage.com/9198f3bf2d6e43dd86fab037ebad3aee:comunidad"

그 후 다시 빌드해 주세요.

2개의 좋아요

Cloudflare의 R2가 마침내 공개적으로 사용 가능해졌습니다(대략 1년이 걸렸다고 하네요). (원래 발표 링크: Announcing Cloudflare R2 Storage: Rapid and Reliable Object Storage, minus the egress fees | Cloudflare Blog)

저는 버킷을 생성했습니다.

다음과 같은 권한을 포함하는 토큰을 생성했습니다: “Edit: 모든 객체에 대한 편집 액세스 허용 및 모든 버킷에 대한 List, Write, Delete 작업 허용”

다음과 같은 설정을 시도해 보았습니다:

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: auto
  DISCOURSE_S3_ACCESS_KEY_ID: redacted
  DISCOURSE_S3_SECRET_ACCESS_KEY: redacted
  DISCOURSE_S3_CDN_URL: https://pub-72eaa03782c542edbe00598fd1666be1.r2.dev
  DISCOURSE_S3_BUCKET: lc-testing
  DISCOURSE_S3_BACKUP_BUCKET: lc-testing/backups
  DISCOURSE_BACKUP_LOCATION: s3
  DISCOURSE_S3_ENDPOINT: https://cb46accbfcc3db1bdbba2bce07f8b509.r2.cloudflarestorage.com
  DISCOURSE_S3_INSTALL_CORS_RULE: false
  DISCOURSE_S3_CONFIGURE_TOMBSTONE_POLICY: false
  FORCE_S3_UPLOADS: 1

그러나 업로드 시 다음 오류가 발생했습니다:

Aws::S3::Errors::NotImplemented: Header 'x-amz-acl' with value 'public-read' not implemented

그 후, Public buckets · Cloudflare R2 docs 설명된 대로 버킷을 공개로 설정해야 한다는 것을 기억해냈습니다.

하지만 여전히 작동하지 않았습니다.

https://developers.cloudflare.com/r2/data-access/s3-api/api/에서 x-amz-acl이 구현되지 않았음을 확인할 수 있습니다.

Discourse 코드를 살펴보니, 코어 변경 없이 R2를 작동시킬 수 있는지 명확하지 않습니다.

업로드를 비활성화한 후에도 백업은 작동하므로, R2는 S3 백업을 매우 저렴하게 사용할 수 있는 방법인 것으로 보입니다. 하지만 해당 버킷을 공개로 설정했기 때문에 백업 파일도 공개되었습니다(파일 이름을 추측할 수 있다면). 따라서 이 문제가 해결된다면 백업과 업로드를 위한 별도의 버킷을 사용해야 할 것입니다.

다음 링크의 줄을 제거한 후 파일이 업로드되었음을 확인했고, s3_cdn_url로 커스텀 도메인을 사용하여 파일에 액세스할 수 있었습니다. (s3 rake task에 유사한 수정을 적용하면 에셋이 업로드되도록 할 수 있습니다.)

5개의 좋아요

그러므로 그들이 객체 수준 ACL을 구현할 때까지 OP에서 이를 비호환으로 표시하는 것으로 하겠습니다. 테스트해 주셔서 감사합니다!

2개의 좋아요

맞아요. ACL 설정을 건너뛰게 하려면 코어에 필요한 변경 사항이 꽤 복잡해 보입니다. 백업 용도로만 사용한다면 괜찮다고 볼 수 있죠. 버킷을 공개하기 위해 복잡한 절차를 거치지 않는다면 문제없을 겁니다.

1개의 좋아요

문제는 s3 엔드포인트입니다

1개의 좋아요

방금 R2를 테스트해 보았는데, 문서에는 그렇게 되어 있지만 “Content-Encoding” 정보를 존중하지 않는 것 같습니다. 아마 1년 후에야 사용 가능할지도 모르겠습니다.

3개의 좋아요

MinIO 또는 일반 섹션에 경고 문구를 추가해야 합니다. "Discourse는 S3 호환 저장 시스템의 경로에 DNS 모드를 사용합니다. 백엔드가 버킷 경로에 대해 경로 모드(path-mode)만 지원하고 DNS 모드를 지원하지 않는 경우, 이는 Discourse와 호환되지 않습니다."라는 안내 문구를 여기에 작성해야 합니다. 이것이 MinIO가 처음에는 목록에 포함되지 않았다가 나중에 추가된 이유입니다.

또한 MinIO Storage Server 섹션도 업데이트해야 합니다. 단서 #2에 다음 내용이 명시되어야 합니다:

  1. MinIO 구성에서 도메인 기반 버킷 경로를 위해 도메인 지원(Domain Support)이 활성화되어 있어야 합니다. 이는 필수 사항이며, Discourse는 S3 저장 메커니즘에서 도메인이 아닌 경로 기반 버킷 경로를 지원하지 않기 때문입니다.

수정: 이 게시글 덕분에 회원 상태(신뢰 수준 2)가 되어서 이제 위키 게시글을 직접 수정할 수 있게 되었습니다. 수정을 요청했음에도 불구하고, 관리자의 조치는 필요 없습니다.

4개의 좋아요

멋지네요! 최신 정보를 유지해 주셔서 감사합니다. 그런 경고가 있으면 좋겠다는 생각이 드네요.

:clinking_glasses: :palms_up_together:

2개의 좋아요