Como escalar o Discourse horizontalmente?

Olá,
Estou confuso com as instruções de instalação. Existe uma maneira de escalar o Discourse horizontalmente?
Por exemplo: ter 2+ contêineres Docker em servidores diferentes, cada um executando o Discourse?

Nas instruções de GitHub - discourse/discourse_docker: A Docker image for Discourse · GitHub

A configuração com múltiplos contêineres é muito mais flexível e robusta, no entanto também é mais complicada de configurar. Uma configuração com múltiplos contêineres permite que você:

  • Minimize o tempo de inatividade ao atualizar para novas versões do Discourse. Você pode iniciar novos processos web enquanto seu site está em execução e, somente após a construção, trocar para a nova imagem.
  • Escalone seu fórum para múltiplos servidores.
  • Adicione servidores para redundância.
  • Execute alguns serviços obrigatórios (por exemplo, o banco de dados) em hardware mais potente.

Se você deseja uma configuração com múltiplos contêineres, consulte os modelos data.yml e web_only.yml no diretório de amostras. Para facilitar esse processo, o launcher injetará uma variável de ambiente chamada DISCOURSE_HOST_IP, que estará disponível dentro da imagem.

Existe algum lugar onde eu possa encontrar mais informações sobre como executar os contêineres em servidores diferentes, e não vários contêineres no mesmo servidor?

Obrigado

Há muita discussão relacionada em O Discourse pode enviar imagens Docker frequentes que não precisam ser inicializadas?.

A essência é:

  1. Você fornece serviços externos para PostgreSQL, Redis e Balanceador de Carga e configura o app.yml para usá-los, como por exemplo em Executando o Discourse com um servidor PostgreSQL separado.

  2. Execute ./launcher bootstrap app em algum lugar. Isso resultará na criação de uma imagem de contêiner na máquina local. Faça o upload dessa imagem para o seu serviço de registro de contêineres.

  3. Agora você pode iniciar quantas instâncias desejar, configurando todas para executar a imagem exportada no passo anterior.

Você pode fazer algo como executar o Discourse Docker junto com o Apache e criar dois contêineres web, com algo atuando como um proxy reverso na frente.

Você pode usar multisite para ter um único contêiner servindo múltiplos sites (usando os mesmos plugins e versão do Discourse). Isso descreve como fazer isso sem um proxy reverso externo. Se você tentar, deixe um comentário lá e me avise se funcionou. Pretendo postar aqui quando tiver certeza de que funciona.

Executar contêineres em vários servidores é o mesmo que qualquer uma das opções acima. Você teria múltiplos contêineres compartilhando o mesmo Redis e Postgres, rodando atrás de um balanceador de carga.

Geralmente, fazer qualquer coisa diferente da Instalação Padrão Oficial do Discourse não é suportado, pois existem infinitas maneiras de fazer essas coisas.

Tenho duas perguntas:

  • A primeira sobre o Sidekiq, no caso de executar vários web_only.yml do Docker, cada um em uma VM diferente: Neste primeiro caso, instâncias diferentes do Sidekiq compartilhando o mesmo servidor Redis podem executar o mesmo job duas vezes. O Discourse é robusto para esse tipo de erro? É mais confiável usar um Sidekiq em uma VM dedicada (ou Docker), então como separá-lo do web_only do Discourse?
  • Sobre suas últimas observações para instalação suportada: Posso entender que as pessoas podem ter infinitas maneiras de configurar vários contêineres, mas, na minha opinião, precisamos de uma maneira suportada de executar várias instâncias para escalabilidade horizontal e/ou alta disponibilidade em dois casos: baseado em VM (diferentes contêineres web_only do Discourse em diferentes VMs e Redis/Postgres instalados em outras VMs separadas diretamente, sem usar Docker) e baseado em contêineres (tudo é baseado em contêiner).