AWS S3와 Discourse 통합 튜토리얼이 있으면 좋겠습니다

AWS Lightsail 인스턴스에서 Discourse와 AWS S3 설정을 연동하려고 3시간 동안 고군분투한 끝에, 이 주제에 대한 간단하고 명확한 튜토리얼이 있으면 좋겠다는 확고한 믿음을 갖게 되었습니다. 이 설정에는 빠져들 수 있는 함정이 정말 많습니다. AWS S3 URL을 제공받아 원격으로 파일을 가져오는 버킷을 만드는 것 자체에는 문제가 없는데, CDN과 S3 엔드포인트(설정 UI에서는 비워 둘 수 있다고 명시되어 있지만, 업로드를 시도하면 "Endpoint can’t be blank"라는 내부 메시지가 뜸) 그리고 Amazon CloudFront를 통한 CDN 사용 시 실제로 필요한 권한 수준 같은 기본적인 것들까지 고려하면 복잡해집니다.

정말 할 일이 많습니다. 인터넷을 샅샅이 뒤져 보았지만, 이 주제에 근접한 내용조차 찾지 못했고, 특히 오늘날의 Discourse와 일치하는 최신 자료는 더더욱 없었습니다.

어떤 힌트라도 주시면 감사하겠습니다.

현재 저의 가장 큰 걸림돌은 아마도 권한 문제인 것 같습니다. Discourse가 Key ID와 Key Secret을 요구하는데, 이를 위해 IAM에 사용자는 만들어 두었지만, S3 버킷 정보에서 이 사용자를 해당 버킷과 연관 짓는 내용이 전혀 보이지 않아 이것이 문제의 원인인지 알 길이 없습니다. 솔직히 Lightsail과 AWS를 8년 이상 사용해 왔지만, 이 S3 영역은 개발자 UX 스타일의 난해한 구조로 되어 있어 50가지 이상의 다른 방식으로 처리할 수 있게 되어 있습니다. 직관적이지가 않습니다.

업로드를 위한 S3 호환 객체 스토리지 제공자 구성에 관한 Configure an S3 compatible object storage provider for uploads를 확인해 보셨나요?

제이, 안녕하세요. 네, 그 부분을 여러 번 확인해 보았습니다. 2020년 버전이라 DISCOURSE_S3_REGION 같은 설정이 있지만, 관리자 영역에는 그런 설정이 없습니다.

또한… S3를 제대로 설정하고 작동하는지 확인한 후에 rake를 실행해 기존 데이터를 가져오는 것이 맞는 것 아닌가요?

제가 말하는 것이 바로 이런 부분입니다. Discourse의 설정은 사용자가 AWS, 셸, 그리고 개발자처럼 Discourse에 대해 잘 알고 있다는 전제를 너무 많이 하고 있습니다.

현재까지 진행 상황은 다음과 같습니다.

CDN은 정상적으로 작동하며, 수동으로 업로드한 파일도 잘 작동합니다:

https://s3.kitmaker.net/IMG_7184.JPG

Discourse를 통해 업로드하면 다음과 같은 오류가 발생합니다:

Failed to open TCP connection to discourse-kitmaker.s3.kitmaker.net:443 (getaddrinfo: Name or service not known)

현재 설정은 다음과 같습니다:

아, 그리고 제가 무시하고 있던 Region 설정이 있네요. 하지만 올바르게 설정해도 도움이 되지 않았습니다. :smiley:

하지만 해당 지침을 따르지 않고 있다는 것을 보여주고 있습니다.

그래서 UX에서 처리하지 말고 해당 지침을 따라야 합니다.

따라야 할 지침은 바로 이것입니다.

또한, 자산을 S3에 업로드하도록 yml 파일에 추가해야 하는 부분을 놓치지 마세요.

실수로 라이브 사이트를 망치지 않도록 테스트 사이트에서 진행하는 것이 좋습니다.

네. yml 파일의 env에 S3 설정을 추가하고, 재빌드한 후, 설정이 정상적으로 작동하는지 테스트한 다음 rake 작업을 실행하십시오. 이 설정들은 데이터베이스가 아니라 yml 파일에 설정되어야 합니다. 왜 UX에서 이 설정들을 숨기지 않았는지는 확실하지 않습니다.

하지만 이것도 있습니다: How are you authenticating Discourse to AWS? Help us improve the settings!

링크들 감사합니다. 올려주신 첫 번째 링크에는 AWS 영역에 2013년에 작성된 또 다른 링크( Set up file and image uploads to S3 )가 있는데, X 버킷 정책을 설정하라는 내용이 포함되어 있습니다(이 내용은 구식이بدو합니다). 그런데 CloudFront를 통한 AWS CDN이 이미 자체 정책으로 해당 정책을 대체해 버렸거든요. 이걸 변경해야 할까요, 아니면 그대로 두어야 할까요? 제가 말하는 '이런 것들’이 바로 이런 겁니다. 우으으!

사실 app.yml의 “빈칸 채우기” 설정이나 관리자 설정이 문제의 핵심은 아닙니다. 그 설정들이 생성된 버킷이나 CDN 등과 어떻게 상호작용하는지, 그런 복합적인 요소가 더 큰 문제입니다. 결국 아마존 쪽에서 좀 더 명확한 안내가 필요합니다. Discourse 자체의 문제는 아니라는 건 알지만, S3를 통해 실제로 정상적으로 동작하는 방법을 Discourse 사용자에게 알려주는 것이 정말 도움이 될 텐데요. 제 말이 통할까요?

알겠습니다. 저는 꽤 오랜 기간 동안 AWS 버킷을 설정하지 않았습니다. 그 부분은 더 복잡할 수 있지만, 질문자님이 게시한 내용과는 다릅니다.

하지만 그것도 꽤 간단합니다. 내용을 붙여넣은 후, 오류가 발생하면 해당 오류를 처리하면 됩니다.

질문자님이 설명하신 유일한 문제가 바로 그것입니다.

버킷을 어떻게 설정하셨나요? 사용자에게 어떤 권한을 부여하셨나요? 키를 생성하셨나요? 어떤 오류가 발생했나요? (하지만 질문자님은 게시물에 이미지를 추가했고 그것이 작동했다고 말씀하신 것 같던데?)

죄송합니다. 제가 해당 테스트 파일을 수동으로 업로드했다고 말씀드렸었네요.

여기 버킷 설정 페이지입니다.

키와 시크릿을 위한 특정 사용자 생성 기능이 없으며, 이후 페이지에도 해당 기능이 없습니다.