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

안녕하세요,

조금 막혀서 혼란스럽습니다. 누군가 도와주실 수 있을까요?
처음에는 bitnami 설치를 사용하다가, 앞으로 많은 문제를 일으킬 것 같아 표준 설치로 재설치했습니다.
백업을 복원했고, 2.8에서 2.9 베타로 전환했음에도 불구하고 모든 것이 정상적으로 작동했습니다.

구글 버킷에서 백업을 다시 테스트해 보았지만 여전히 완벽하게 작동했습니다.

S3 설정은 모두 웹 인터페이스를 통해 수행했으며, ENV 변수를 사용하지 않았습니다.

GDPR 규정을 준수하기 위해 유럽에 새로운 백업 버킷(여기서는 discourse-backup-eu라고 하겠습니다)을 생성했습니다. 이제 ENV 변수를 변경할 수 있게 되었으므로, DISCOURSE_S3_ENDPOINT를 https://storage.googleapis.com으로 설정하고 앱을 재빌드한 후, 웹 인터페이스에서 백업 버킷 이름을 변경하고 백업을 다시 실행했습니다. 유럽의 새 백업 버킷에 백업 파일이 표시되는 것을 보고 매우 기뻤습니다.

이제 업로드된 파일이 다른 버킷으로 저장되도록 하여 VM 디스크 공간이 차지되는 것을 피하고 싶었습니다.

따라서 새로운 버킷(discourse-uploads라고 하겠습니다)을 구성하고 공개로 설정한 후, 해당 새 버킷의 서비스 계정에 Storage Legacy Bucket Owner 역할을 추가했습니다.
그 다음, 여기에 설명된 대로 클라우드 CDN이 활성화된 백엔드 버킷을 사용하도록 기존 로드 밸런서(여기서는 https://www.example.com이라고 하겠습니다)에 규칙을 추가했습니다. 규칙은 /discourse-uploads/*가 버킷 discourse-uploads를 가리키도록 설정했습니다.

버킷 루트에 있는 test.jpg로 CDN을 테스트해 보았지만 https://www.example.com/discourse-uploads/test.jpg를 통해 접근할 수 없었습니다. 버킷 안에 discourse-uploads라는 하위 폴더를 만들고 test.jpg를 그 안으로 이동시켜야만 https://www.example.com/discourse-uploads/test.jpg를 통해 테스트 이미지를 볼 수 있었습니다.

웹 UI에서 "s3 upload bucket"의 더미 버킷 이름(백업을 설정할 때 이전에 설정해야 했던 것)을 discourse-uploads로 변경하고, CDN URL에 https://www.example.com/discourse-uploads를 입력한 후 "enable s3 uploads"를 체크했습니다.

그 이후로 이미지를 업로드하려고 하면 브라우저 창에 "Invalid Argument"라는 팝업이 나타났습니다(기본적으로 같은 내용을 말하는 JSON 콘텐츠를 가진 422 에러에서 비롯된 것입니다).

모든 게시물을 다시 생성(rebake)해 보았지만 효과가 없었고, 여전히 에러가 발생했습니다.

그래서 웹 UI 대신 ENV 변수를 사용해야 한다고 판단했습니다.

다음과 같은 설정을 사용했습니다:

DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: whatever
DISCOURSE_S3_INSTALL_CORS_RULE: false
FORCE_S3_UPLOADS: 1
DISCOURSE_S3_ENDPOINT: https://storage.googleapis.com
DISCOURSE_S3_ACCESS_KEY_ID: MY_KEY_ID
DISCOURSE_S3_SECRET_ACCESS_KEY: MY_ACCESS_KEY
DISCOURSE_S3_CDN_URL: https://www.example.com/discourse-uploads
DISCOURSE_S3_BUCKET: discourse-uploads/discourse-uploads
DISCOURSE_S3_BACKUP_BUCKET: discourse-backup-eu
DISCOURSE_BACKUP_LOCATION: s3

앱을 재빌드했습니다.
그런데 버킷에 자원이 업로드되지 않아 404 에러가 발생하면서 더 이상 discourse를 열 수 없게 되었습니다.
https://www.example.com/discourse-uploads/assets/admin-31467dc73634cbfb81799737c43df0e2939307d893ef32713f1d0770bcb3532c.br.js

버킷의 하위 폴더로 직접 업로드하는 것이 다소 무리한 시도라고 생각했습니다. OP(원문 게시자)는 작동한다고(최소한 백업 버킷의 경우) 제안했지만요.

ENV 변수를 다음과 같이 변경했습니다.
DISCOURSE_S3_BUCKET: discourse-uploads
(나중에 하위 폴더로 업로드해야 하는 문제를 피하기 위해 호스트 규칙을 조정할 수 있을 것이라고 생각하며)

그리고 아무것도 업로드되는지 확인하기 위해 재빌드했지만, 버킷에 아무것도 업로드되지 않았고 404 에러로 인해 discourse가 여전히 열리지 않았습니다.

따라서 제 질문은 다음과 같습니다:

  • 웹 UI와 ENV 변수가 충돌합니까?
  • 자원이 버킷에 업로드되어야 하는 시점은 언제입니까?
  • 어떻게 디버깅할 수 있습니까? 로그에 에러가 보이지 않습니다.
  • 설정에서 버킷의 하위 폴더를 설정할 수 있습니까?
  • 이 문제가 해결되면, 이전에 업로드된 이미지가 버킷으로 전송됩니까? rebake를 수행하면 이전에 업로드된 이미지의 URL은 어떻게 보일까요?

감사합니다!

1개의 좋아요