이 내용을 세 개의 별도 게시글로 나누어야 할 수도 있지만, 서로 관련이 있으므로 하나부터 시작하겠습니다.
며칠 전, 이 튜토리얼(How to Scale a Discourse Deployment with a Load Balancer and Managed Database Cluster | DigitalOcean)을 거의 그대로 따라하며 Digital Ocean의 스탠드얼론 Discourse Droplet을 로드 밸런서 안의 두 Droplet으로 마이그레이션했는데,까지는 잘 진행되었습니다.
그 다음 이 튜토리얼(Configure an S3 compatible object storage provider for uploads)을 따라갔지만, 커맨드 라인에서 Discourse를 재빌드한 후 제 Discourse 사이트는 백색 화면만 표시되었습니다. 브라우저의 개발자 도구(Inspector)를 확인해 보니, 콘텐츠가 HTTPS가 아닌 HTTP로 서빙되고 있기 때문에 브라우저가 모든 콘텐츠를 차단하고 있었습니다. 이는 아마도 로드 밸런서가 SSL 터미네이션(SSL Terminated)을 수행하고 있기 때문일 것입니다. 즉, 외부에서는 모두 HTTPS이지만, 서버 자체는 HTTP로 실행되고 있는 것이죠.
이 시점에서 로드 밸런서 내에서 HTTPS로 작동하게 하려고 시도하다 서버를 완전히 망가뜨렸지만, 그것은 단순히 불가능했습니다. 이 튜토리얼(Configure an S3 compatible object storage provider for uploads)에 따라 Digital Ocean Space/CDN을 S3/CDN으로 작동하게 만드는 데 실패했습니다. 아주 꼼꼼하게 여러 번 모든 측면을 검토했지만, 작동하지 않았습니다. Discourse를 재빌드할 수 있었던 유일한 방법은 app.yml에서 DISCOURSE_S3_ENDPOINT: https://sfo3.digitaloceanspaces.com 파라미터를 제거하는 것이었지만, 그렇게 해도 빌드는 되었으나 서버에 응답을 받을 수 없었습니다. 로드 밸런서와 DO Space/CDN 설정을 어떻게 조합하느냐에 따라 503 서버 응답 없음错误或, 일반적인 브라우저 서버 응답 없음 또는 서버 연결 끊김 오류가 발생했습니다. 가능한 모든 설정 조합을 시도해 보았지만, 페이지를 서빙할 수 있는 방법은 찾지 못했습니다.
DISCOURSE_S3_ENDPOINT 파라미터를 그대로 두면 Discourse 재빌드 중 다음과 같은 오류가 발생했지만, S3_ENDPOINT 파라미터를 주석 처리하면 이 오류는 사라졌습니다.
Aws::S3::Errors::InvalidAccessKeyId: Aws::S3::Errors::InvalidAccessKeyId
모든 파일이 S3에 동기화되었으므로, 액세스 키에는 문제가 없었을 것이라고 생각하며, 문제는 S3_ENDPOINT 파라미터 때문에 발생한 것으로 추정됩니다.
오늘은 이전 시도를 계속하는 것을 포기하고, HTTP만 로드 밸런싱하던 Droplet의 백업을 복원한 후, 이 튜토리얼(Set up file and image uploads to S3)을 수행하여 마침내 다시 작동하게 만들었습니다. 다만 이번에는 권장 튜토리얼에서처럼 app.yml을 편집하여 S3 설정을 한 것이 아니라, Discourse 관리자 패널을 통해 S3 설정을 편집했습니다. 마침내 작동했지만, 중요한 차이는 제가 의도적으로 S3 CDN 설정을 제외했다는 것입니다. 게시글에 업로드된 이미지가 S3에 저장되고 있음을 확인했고, Discourse를 S3로 직접 백업할 수 있으며, 이것이 제가 원하는 전부이지만, 이제 저를 괴롭히는 세 가지 문제가 있습니다. 그중 하나는 치명적이고, 두 가지는 무시할 수 있지만, 가능하다면 여기서 확인해 보고 싶습니다.
즉, 치명적인 문제는 사용자가 더 이상 Discourse 로그인 페이지의 Patreon 로그인 버튼으로 로그인할 수 없다는 것입니다. 다음과 같은 메시지가 표시됩니다:
죄송합니다. 계정 인증 중 오류가 발생했습니다. 다시 시도해 주세요.
URL은 다음과 같습니다:
https://mbp.community/auth/failure?message=invalid_credentials&origin=https%3A%2F%2Fmbp.community%2Flogin&strategy=patreon
이를 작동하게 하려면 무엇을 시도해 볼 수 있는지 조언을 정말로 듣고 싶습니다. 하지만 다시 한번, 내부적으로 서버가 HTTPS로 실행되지 않기 때문일지 궁금합니다. URL에서 볼 수 있듯이 외부에서는 HTTPS로 실행되고 있으므로, 확실히 알기 어렵습니다. 아마도 여기에서 Digital Ocean 로드 밸런싱 등을 Discourse와 함께 사용해 본 경험이 있는 분이 계실 것이라 기대합니다.
나머지 두 문제는 관리 콘솔에서 다음과 같이 경고되고 있습니다:
현재 사이트 설정에 기반한 조언
- 웹사이트는 SSL을 사용 중입니다. 그러나
[force_https](https://mbp.community/admin/site_settings/category/all_results?filter=force_https)가 아직 사이트 설정에서 활성화되어 있지 않습니다. - 서버는 파일을 S3로 업로드하도록 구성되었지만, S3 CDN이 구성되지 않았습니다. 이로 인해 높은 S3 비용과 느린 사이트 성능이 발생할 수 있습니다. 자세한 내용은 "업로드용 오브젝트 스토리지 사용"을 참고하세요.
force_https를 켜는 것을 시도해 보는 것은 괜찮지만, 내부적으로 로드 밸런싱된 서버가 HTTPS로 실행되지 않기 때문에 서버에 접근이 차단될까 봐 걱정됩니다. 그리고 어제 겪었던 문제들로 인해, Discourse를 15분씩 수없이 재빌드하면서도 아무런 진전도 없이 벽에 머리를 부딪는 12시간을 더 보내고 싶지 않습니다. 다시 한번, 제 구성에서 force_https를 켜는 것이 안전하다는 것을 아시는 분이 계시다면 알려 주세요.
두 번째 문제는 다시 한번 app.yml 파일에 추가된 파라미터를 통해 시도했을 때 잘 작동하지 않았기 때문에, 이것도 다시 시도하기가 꺼려집니다. 이것이 app.yml 파일에 추가된 파라미터와 본질적으로 동일한 효과를 내는지 확인해 주실 수 있나요? 그렇다면 이 두 번째 메시지는 무시하겠습니다. 반대로, 어떤 이유로든 시도하는 것이 안전하다면 알려 주세요. 백업을 하고 시도해 보겠습니다.
긴 게시글을 올려 죄송합니다. 제가 조언을 구하려는 것이 무엇인지 파악해 주실 수 있기를 바랍니다.