Obrigado antecipadamente.
Estou planejando configurar o Discourse com alta disponibilidade em um ambiente de produção. Abaixo estão meu plano de design e algumas condições ambientais.
Configuração com 3 servidores de aplicação e 2 servidores de banco de dados Postgres. Sempre um servidor PG em modo de escrita e outro em modo somente leitura.
Esses 3 servidores de aplicação apontarão para o mesmo servidor de banco de dados.
Cada instância do banco de dados deve servir operações de leitura e escrita apenas, respectivamente.
Servidores de produção não têm conectividade com a internet, mas posso baixar imagens do dockerHub.
Temos nosso próprio servidor GitLab.
É possível inicializar uma imagem Docker e essa imagem em vários servidores?
Por favor, alguém ajude a fazer essa configuração. Se houver links ou sugestões, envie-me uma mensagem privada.
Após executar ./launcher bootstrap appem algum lugar, você precisará salvar essa imagem de contêiner resultante (geralmente feito enviando-a para um registro) e, em seguida, baixar e executá-la em seus três servidores de aplicativos.
Você também precisará de um servidor Redis central (e potencialmente réplicas para ele). Você também está perdendo um balanceador de carga para direcionar as solicitações para esses diferentes servidores de aplicativos.
Olá @Falco
No meu ambiente de produção, não tenho acesso à internet, então o que estou planejando é realizar o bootstrap em uma máquina acessível pela internet, levando essa imagem de bootstrap para os servidores de produção. Ao fazer isso na VM de produção, o contêiner não está iniciando porque o servidor Unicorn está procurando um ID de processo pai, por isso ele não está em execução.
Por favor, me ajude aqui, preciso copiar o diretório /var/discourse após o bootstrap para o servidor de produção?
Você está usando PostgreSQL, Redis e Object Storage externos? Isso é esperado ao fazer HA, e tanto seus servidores de produção quanto os servidores de build precisam ter acesso a esses serviços externos.
Apenas testando o cenário, bootstrap executando em um servidor e executando a imagem de contêiner inicializada em outro servidor com configuração independente.
Como você vai lidar com vários servidores de aplicativos e uploads de usuários? Uma unidade de rede compartilhada entre todos os servidores? Isso pode funcionar, mas nossa solução oficial para isso é o Armazenamento de Objetos usando a API S3.