피와 땀과 눈물을 흘린 끝에, 이제 해결된 것 같습니다.
다만, 이 해결책에 대해 특별히 "자부심"을 느끼지는 않습니다. 하지만 어차피 구글은 아무 말도 하지 않고 설명도 해주지 않으니까요. 결론은 다음과 같습니다:
-
첫째로, 중요한 교훈 하나: Discourse를 사용 중이라면 DigitalOcean에서 IPv6를 활성화하지 마세요. DigitalOcean의 IPv6 범위가 YouTube에 의해 차단되어 있기 때문입니다.
-
IPv6 문제를 수정한 후, 트래픽이 증가하면서(호스트를 몇 번이나 바꿨는지 모를 정도로 긴 여정이었습니다), 그 다음에는 YouTube가 제 Discourse 설치를 IP 차단했습니다. 사이트에서 게시된 YouTube 영상의 수량과 Discourse가 이를 로드하는 방식 때문에 발생한 문제였습니다.
-
이 차단을 확인하려면 서버를 브라우저가 있는 서버의 프록시로 사용하거나, 단순히 curl을 사용해 다음 줄을 검색해야 합니다: “Sorry for the interruption. We have been receiving a large volume of requests from your network.” (참고로 이 토픽을 참고할 수 있습니다.)
-
@riking, @neounix, @Overgrow 님들의 도움으로 YouTube 임베드를 베이킹(bake)하는 속도를 멈추거나, 제한하거나, 변경하기 위해 일련의 명령어(위에서 읽을 수 있습니다)를 실행했습니다. 대부분의 사이트라면 이것이 충분했을 것입니다. 하지만 저는 호스트를 몇 군데 시도한 후 이주하는 과정에서 이전 게시물이 모두 베이킹되어야 하는 추가적인 곤란함을 겪었습니다. 사실, 1시간에 1회로 제한하자 처음에는 어느 정도 해결되었습니다. 하지만 제 커뮤니티는 정말 영상 공유를 좋아하는 것 같아서 그 효과는 오래가지 못했습니다.
-
당연히 YouTube 측에서는 피드백이나 도움이 전혀 없었습니다. 그들의 포럼에서 해당 오류에 대한 몇 가지 스레드와 "나도 같은 문제가 있어"라는 댓글들만 있을 뿐, 해결책은 없었습니다.
-
이런 상황에서 "다른 방법이 분명 있을 거야!"라는 인포머셜(광고)식 논리를 떠올리며, 저는 "람보"식 접근법을 선택했습니다. 다른 IP 주소를 하나 더 구매한 것입니다. 그리고 1시간마다 출구(outbound) IP 주소를 전환하는 cron 작업을 추가했습니다. 문제가 해결되었습니다.
-
사이트가 계속 성장하고 사람들이 _YouTube 사랑_을 계속 공유한다면, 제3의 IP 주소를 추가로 확보해야 할 수도 있을 것으로 예상됩니다. 하지만 어쨌든, K8S나 다른 기술로 "분산된 Discourse"를 올바르게 구성하는 방법을 알아낼 때까지는, 이것이 최선의 방법입니다.
-
가장 우아한 해결책은 아니라는 것을 잘 알고 있습니다.
-
다시 한번 모든 도움(그리고 특히 인내심)에 감사드립니다. 저는 Rails/Sidekiq/RubyConsole 조합에 대해 매우 초보적인(n00bish) 수준이지만, Discourse 코드를 읽으며 개선하려고 노력하고 있습니다.
감사합니다!