Discourse 인스턴스를 위해 직접 실행하는 MinIO 저장 서버 사용법 기초 가이드

S3 호환 객체 저장을 위한 MinIO 서버 활용

MinIO는 기본적으로 클라우드 네이티브인 S3 호환 객체 저장소 서버 솔루션으로, 온프레미스 서버, VPS 또는 클라우드 서버에 쉽게 배포하여 Amazon AWS S3나 다른 시스템의 대안으로 사용할 수 있으며, 올바르게 설정하면 Discourse와 호환됩니다.

이 섹션에서는 다음 조건들이 환경에서 충족된다고 가정합니다:

  1. 완전히 설정된 MinIO 서버 인스턴스가 있습니다.
  2. MinIO 설정에서 도메인 지원(Domain Support)이 활성화되어 있습니다.
  3. MinIO에 대한 DNS 구성이 적절히 설정되어 있어 버킷 서브도메인이 MinIO 서버로 올바르게 해석됩니다.
  4. MinIO 서버에 discourse-data 버킷이 존재하며, 해당 버킷에는 “public” 정책이 설정되어 있습니다.
  5. MinIO 서버에 discourse-backups 버킷이 존재하며, 이는 업로드된 데이터를 저장하기 위한 비공개 버킷입니다(공개 접근 불가 - 새 버킷의 기본 정책).
  6. S3 CDN URL은 이 문서 앞부분에서 설명한 대로 버킷을 가리키고 요청을 캐싱하도록 올바르게 설정된 CDN입니다.

위 요구 사항이 모두 충족된다면 진행할 준비가 된 것입니다.

예시 구성은 다음과 같습니다:

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

이를 통해 Amazon S3 대신 MinIO 서버를 사용하는 기본적인 MinIO 구성을 제공할 수 있습니다.

4개의 좋아요

MinIO가 이제 서브도메인 스타일 버킷과 정상적으로 작동하며 Discourse와 다시 호환된다는 소식을 들으니 정말 기쁩니다.

Using Object Storage for Uploads (S3 & Clones) 위키에 MinIO 사용 방법을 추가할 수 있을까요?

3개의 좋아요

일정 기간 동안 서브도메인 스타일과 경로 스타일 버킷 모두에서 정상적으로 작동했습니다. 그러나 DNS 구성 부분이 가장 고통스러운 부분입니다. 작동하려면 특수한 와일드카드 DNS 규칙이 필요하거나, 실제 버킷을 모두 인식하는 맞춤형 DNS 서버가 필요합니다. 저는 bind9에서 와일드카드 존을 사용하여 이를 구현했지만, Cloudflare나 다른 서비스에서 서브도메인 스타일을 적용하면 크게 문제가 발생합니다.

위 내용이 해당 섹션에 적합하다고 생각하신다면 기꺼이 추가하겠습니다. 다만 ‘주의 사항’ 섹션이 포함될 것이며, 문구 등을 먼저 검토해 주시면 감사하겠습니다. (참고로 제 배포 환경에 CDN이 없어서 CDN URL을 포함하지 않았습니다. (비용 문제로 실험할 여력이 없기 때문입니다))

3개의 좋아요

MinIO를 Discourse 용도로만 실행하는 사용자는 2개의 Discourse 버킷에 대한 DNS 항목을 수동으로 생성할 수도 있죠?

이 토픽에 있는 주의사항만으로도 충분할 것입니다. MinIO 구성은 이 포럼의 범위 밖이지만, 작동하는 MinIO가 있는 상태에서 Discourse를 설정하는 것은 유효한 사용 사례입니다.

2개의 좋아요

맞습니다. 다만 말씀하신 대로 설정은 범위를 벗어나므로, 버킷 서브도메인 경로가 해석(resolve)되어야 한다는 점만 언급하겠습니다. (DNS 설정은 인스턴스의 ${ADMINS}에게 맡기겠습니다)

2개의 좋아요

네, 맞습니다. 위키도 그에 맞게 수정했습니다. 다만, 제 지식 범위 내에서 MinIO는 클라우드 서비스를 제공하지 않으므로, 위키 목차 맨 앞의 ‘서비스 이름’ 항목은 비워 두었습니다. 원하시는 대로 수정해 주세요.

2개의 좋아요

멋지네요! 기여해 주셔서 감사합니다!

1개의 좋아요

천만에요!

또한 제가 직접 수정도 했습니다. Provider는 Self-hosted로 설정되어 있지만, MinIO 섹션은 여전히 연결되어 있습니다. 현재 제가 찾을 수 있는 클라우드 제공 솔루션이 없기 때문에 이 방식으로 해결해야 할 것 같습니다. (위키 게시글에 통합되었으므로 원하시면 이제 이 스레드를 닫으셔도 됩니다.)

3개의 좋아요

또한 (MinIO의 오픈소스 코드와 훌륭한 문서에 감사드립니다!) MinIO의 모든 HTTP 동작 동사에 대해 CORS가 기본적으로 활성화되어 있다는 것을 발견했습니다. 따라서 CORS 규칙을 설치할 필요가 없으며, 이미 존재하고 있습니다. 또한 자체 호스팅 MinIO 섹션도 업데이트했으며, 문법도 일부 수정했습니다.

이 문제를 추적하는 데 도움을 주신 @Falco님께 감사드립니다. 이 문제를 앱 빌드/재빌드 중에 발견했었거든요. 또한 StackPath를 사용한 CDN 설정에 대한 기본 가이드도 감사드립니다. 완전히 기능적인 테스트를 원했고, 다른 용도로 이미 StackPath CDN을 사용 중이었기 때문에 CDN 스택을 통해 모든 것이 정상적으로 작동하는지 확인할 수 있었거든요!

2개의 좋아요

force path style를 어떻게 설정해야 하는지 이해가 되지 않습니다. S3 설정을 통해 Minio로 버전 2.6.8을 설정하면, 버킷 이름이 S3 엔드포인트 뒤에 경로로 추가되어야 하는데 항상 S3 엔드포인트 앞에 붙습니다.

또한 GitHub의 설정 예제를 보면 s3_force_path_style 옵션이 제거된 것으로 보입니다. 제가 놓치고 있는 부분이 있는 건가요? 감사합니다.

@ceelian

Discourse는 S3에 대해 경로 모드(path mode)가 아닌 DNS 모드를 사용합니다. 이미 오래전부터 그랬기 때문에, 사용법 문서나 S3 스토리지 사용법 페이지 어디에도 경로 모드에 대해 언급하지 않습니다. 또한, 관련 없는 내용을 위해 오래된 스레드를 다시 활성화(네크로맨싱)하는 대신 새 스레드를 만드는 방법을 배우시는 것이 좋습니다.

1개의 좋아요

@teward 피드백 감사합니다. 네크로맨싱(오래된 스레드 되살리기)을 해서 죄송합니다. GitHub 이슈에서 작성하는 방식에 익숙해서 그랬습니다 :slight_smile: discourse S3를 path mode로 사용하는 방법에 대해 새로운 스레드를 시작하겠습니다.

참고로, 그렇게 할 수 없습니다. 패스 모드가 더 이상 지원되지 않는다고 보며, 그래서 디스코urs에서 패스 모드를 강제하는 옵션이 사라졌습니다. 또한 S3 호환 객체 스토리지 사용법 페이지에 제가 원래 추가했던 섹션이 이제 주의사항 및 요구사항 아래에서 이렇게 표시되는 이유이기도 합니다:

  1. MinIO 구성에서 도메인 지원(Domain Support)을 활성화하여 도메인 기반 버킷 URL을 사용해야 합니다. 이것은 필수이며 선택 사항이 아니며, 디스코urs에는 버킷 경로를 위한 패스 기반 지원이 없습니다.

오래전에 제가 처음 디스코urs를 다룰 때만 해도 그 옵션이 있었지만, 나중에 제거되었고 저는 MinIO를 백엔드로 사용하는 것을 중단해야 했습니다. 하지만 이제 MinIO에 DNS 모드를 작동시키는 방법에 대한 문서가 있으므로(즉, S3처럼 bucket[.]server[.]com 형태의 경로를 사용하게 되는 경우), MinIO를 올바르게 구성하면 작동합니다. (위키 자체를 편집할 수 있도록 내 신뢰 수준(trust level)을 올려준 스태프/모더레이터/시스템에 감사드립니다).

2개의 좋아요

해결 방법을 알려주셔서 감사합니다!

이 주제는 마지막 답변 후 24시간이 지나면 자동으로 닫힙니다. 더 이상 새 답변을 작성할 수 없습니다.