Discourse를 수평적으로 확장하는 방법은 무엇인가요?

안녕하세요,
설치 설명서가 좀 이해가 안 됩니다. Discourse를 수평적으로 확장하는 방법이 있을까요?
예를 들어, 서로 다른 서버에 각각 2개 이상의 Docker 컨테이너를 실행하여 Discourse를 돌리는 방식 같은 것이요.

GitHub - discourse/discourse_docker: A Docker image for Discourse · GitHub 의 설명서에는 다음과 같이 적혀 있습니다.

멀티 컨테이너 구성은 훨씬 더 유연하고 견고하지만, 설정이 더 복잡합니다. 멀티 컨테이너 구성을 사용하면 다음을 할 수 있습니다:

  • Discourse의 새 버전으로 업그레이드할 때 다운타임을 최소화할 수 있습니다. 사이트가 실행 중인 동안 새 웹 프로세스를 부트스트랩하고, 빌드가 완료된 후에만 새 이미지를 전환할 수 있습니다.
  • 포럼을 여러 서버로 확장할 수 있습니다.
  • 리던던시를 위해 서버를 추가할 수 있습니다.
  • 일부 필수 서비스(예: 데이터베이스)를 더 강력한 하드웨어에서 실행할 수 있습니다.

멀티 컨테이너 구성을 원하시면 samples 디렉토리의 data.yml 및 web_only.yml 템플레이트를 참고하세요. 이 과정을 쉽게 만들기 위해 launcher는 이미지 내에서 사용 가능한 DISCOURSE_HOST_IP라는 환경 변수를 주입합니다.

서버당 여러 컨테이너를 실행하는 것이 아니라, 서로 다른 서버에 컨테이너를 실행하는 방법에 대해 더 자세한 정보를 찾을 수 있는 곳이 있을까요?

감사합니다

Can Discourse ship frequent Docker images that do not need to be bootstrapped?에 대한 관련 논의가 많이 있습니다.

핵심 내용은 다음과 같습니다:

  1. PostgreSQL, Redis, 로드 밸런서를 위한 외부 서비스를 제공하고, Running Discourse with a separate PostgreSQL server와 같이 app.yml을 설정하여 해당 서비스를 사용하도록 구성합니다.

  2. 어딘가에서 ./launcher bootstrap app을 실행합니다. 이렇게 하면 로컬 머신에 컨테이너 이미지가 생성됩니다. 이 이미지를 컨테이너 레지스트리 서비스에 업로드합니다.

  3. 이제 이전 단계에서 내보낸 이미지를 실행하도록 지시하면서 원하는 만큼의 인스턴스를 시작할 수 있습니다.

Apache와 함께 Discourse Docker 실행하기와 유사하게, 두 개의 웹 컨테이너를 생성하고 그 앞에 리버스 프록시를 두는 방식으로 설정할 수 있습니다.

멀티사이트(multisite)를 사용하면 동일한 플러그인과 Discourse 버전을 사용하여 단일 컨테이너로 여러 사이트를 제공할 수 있습니다. 이 문서는 외부 리버스 프록시 없이 이를 수행하는 방법을 설명합니다. 이 방법을 시도해 보신다면, 해당 게시물에 댓글을 남겨 주시고 성공 여부에 대해 알려 주시면 감사하겠습니다. 작동하는지 확신이 서면 여기에도 게시할 예정입니다.

여러 서버에서 컨테이너를 실행하는 방식은 위의 방법들과 동일합니다. 로드 밸런서 뒤에 동일한 Redis와 Postgres를 공유하는 여러 컨테이너를 배치하게 됩니다.

Discourse 공식 표준 설치 외의 다른 방식으로 설정하는 것은 대부분 지원되지 않습니다. 이는 이러한 설정을 수행하는 방법이 무한히 많기 때문입니다.

두 가지 질문이 있습니다:

  • 첫 번째는, 서로 다른 VM에서 각각 web_only.yml 도커를 여러 개 실행하는 경우의 Sidekiq에 관한 것입니다. 즉, 이 첫 번째 시나리오에서 동일한 Redis 서버를 공유하는 서로 다른 Sidekiq 인스턴스가 동일한 작업을 두 번 실행할 수 있는데, Discourse는 이러한 유형의 오류에 대해 견고한가? 하나의 Sidekiq를 전용 VM(또는 도커)에서 사용하는 것이 더 신뢰할 수 있다면, 이를 web_only Discourse와 어떻게 분리해야 하는가?
  • 두 번째는, 지원되는 설치 방식에 대한 마지막 언급에 관한 것입니다. 여러 컨테이너 구성을 만드는 방법은 무한히 많을 수 있다는 점은 이해하지만, 제 생각에는 수평 스케일링 또는/그리고 고가용성(High Availability)을 위해 여러 인스턴스를 실행하는 지원되는 방식이 두 가지 경우에 필요합니다. 첫 번째는 VM 기반(서로 다른 VM에 있는 서로 다른 Discourse web_only 도커, 그리고 Redis/Postgres는 도커를 사용하지 않고 다른 별도 VM에 직접 설치된 경우)이고, 두 번째는 컨테이너 기반(모든 것이 컨테이너 기반인 경우)입니다.