Migração de container autônomo para containers web e de dados separados

Estou tentando implementar os contêineres separados, mas com um banco de dados remoto. Segui as instruções acima e o howto para configurar um banco de dados PostgreSQL remoto. A configuração funciona, mas estou me perguntando por que há duas referências idênticas (em web_only e data) ao mesmo banco de dados. Isso me faz acreditar que estou fazendo algo errado e que o contêiner web_only nem está usando o contêiner data.

Estou fazendo isso corretamente?

Aqui está minha configuração.

Em web_only.yml, adicionei:

  DISCOURSE_DB_SOCKET: ''
  DISCOURSE_DB_USERNAME: REMOVE
  DISCOURSE_DB_PASSWORD: REMOVE
  DISCOURSE_DB_HOST: xxx.ondigitalocean.com
  DISCOURSE_DB_NAME: REMOVE
  DISCOURSE_DB_PORT: 25060
  DISCOURSE_DB_BACKUP_PORT: 25060
  DISCOURSE_REDIS_HOST: data

Em data.yml

Removi postgres.template.yml

templates:
#  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"

Também adicionei o seguinte:

env:
  # certifique-se de que o locale exista no contêiner; talvez seja necessário instalá-lo
  LANG: en_US.UTF-8
  DISCOURSE_DB_USERNAME: REMOVE
  DISCOURSE_DB_PASSWORD: REMOVE
  DISCOURSE_DB_HOST: REMOVE.ondigitalocean.com
  DISCOURSE_DB_NAME: REMOVE
  DISCOURSE_DB_PORT: 25060
  DISCOURSE_DB_BACKUP_PORT: 25060

Se você estiver usando um banco de dados remoto, não precisará criar o contêiner de dados que contém o banco de dados. Observe que você precisará tanto do PostgreSQL quanto do Redis (então, talvez precise do contêiner de dados para isso).

1 curtida

mas aqui eu tenho apenas 1 container rodando, sem nenhum erro

Não sei exatamente o que você entende por ‘dois containers’, mas se você assume que dois containers significam duas instâncias separadas do Discourse, então você está seguindo a direção errada.

Este artigo ajuda a configurar um container de aplicação e um de banco de dados separados, o que é útil para usuários avançados que buscam mais flexibilidade.

Se você deseja instalar/hospedar dois sites do Discourse na mesma máquina, talvez valha a pena conferir o Multisite do Discourse:
Multisite configuration with Docker

1 curtida

O que quero dizer com ‘container’ é que você pode ver dois containers em execução ao digitar no host:

docker ps

E, segundo, nesse comando de 2 containers, não encontrei onde definir o nome de domínio.

Então, qual container estava em execução? Supondo que fosse o app, não, você está executando uma versão antiga do discourse-setup.

Faça um git pull antes de continuar para garantir que você está usando a versão mais recente do discourse-setup.

Se você tiver um container de dados ou web-only em execução, deve verificar o que impediu o outro de iniciar. Geralmente, o container web-only falha ao iniciar porque já há um processo (servidor web) em execução na porta 80/443.

Sim, app
Ah não, eu clonei o código-fonte do GitHub hoje.

Eu não testei isso pessoalmente, mas como @pfaffman é o gênio que criou isso, talvez ele possa ajudar com isso.

Analisando o código do discourse-setup no GitHub, não vejo nada óbvio que possa impedir o funcionamento.

Qual sistema operacional você está usando no seu servidor?

servidor ubuntu
Consegui executar com sucesso o container standalone.
No momento, estou tentando este método: Success - New Multisite Install on Dedicated server using ServerPilot, Nginx and Apache

Você está tentando alcançar multisite ou multi-container?

benchmark como disse: executei um fórum independente por um mês. Quando quis criar um novo, várias abordagens foram exploradas:

  1. Quero executar um container independente separado no mesmo servidor, sem sucesso.
  2. Multissítio com Docker: containers diferentes para web e banco de dados, conforme Multisite configuration with Docker, sem sucesso.
  3. Sua configuração de 2 containers, sem sucesso.
  4. Success - New Multisite Install on Dedicated server using ServerPilot, Nginx and Apache — esta está sendo testada, talvez funcione.

Se você apenas quiser executar um segundo contêiner independente, terá que modificar os arquivos yml para usar diretório e porta diferentes. Possivelmente também desabilitar o letsencrypt.

Depois que tudo isso for corrigido, quero escrever alguns tutoriais para iniciantes.

1 curtida

Só para sua informação, se você quiser fazer um teste de desempenho, não deve fazê-lo em uma máquina de produção. Em vez disso, crie um VPS separado e use-o para os testes.

Tentar executar duas instâncias separadas do Discourse na mesma máquina pode resultar em uma instalação muito problemática, e isso não é ideal.

Esse comando criará contêineres de dados e web separados se e somente se não houver um arquivo app.yml no momento da execução. Ele não criará dois contêineres web.

1 curtida

Antes de executar este comando, parece que já existe um app.yml.

Acho que isso é muito crucial. Deveria ser adicionado ao OP e possivelmente também no GitHub?

Acho que deveria ter deixado esse recurso sem documentação. E, na verdade, não ajuda migrar para uma configuração de dois contêineres, então provavelmente não pertence aqui de forma alguma.

1 curtida

Talvez um howto dedicado?

Não precisa ser muito detalhado, mas pode ser muito útil para quem quer começar com algumas aventuras avançadas no Discourse.

2 curtidas

Talvez sim. É uma grande ajuda e, assim como o discourse-setup, serve a um propósito muito específico: uma nova instalação totalmente padrão. Meus scripts de instalação o utilizam há bastante tempo. Pode ser uma maneira fácil de migrar para dois containers, desde que você esteja disposto a fazer um backup do container antigo e restaurá-lo no novo.

Minha preocupação sempre foi que seria difícil dar suporte, pois pessoas que não o entendem tentarão usá-lo e, em seguida, não conseguirão utilizar nenhuma documentação, já que o “rebuild app” não funcionará mais. Além disso, saber quando é necessário reconstruir o container do banco de dados também é difícil. Recentemente, uma reconstrução falhou porque o Redis 3.0 foi utilizado, mas agora o 4.0 é obrigatório. O PostgreSQL também precisou ser atualizado, o que exigiu seguir uma sequência de etapas, mas era necessário saber quando reconstruir o container de dados e quando reconstruir o container web, além de como alterar o caminho do recomendado. Tudo correu sem problemas para mim, mas tentar comunicar isso a alguém que não sabe o que é bash em um fórum seria frustrante para todos os envolvidos.

Acho que pode ser melhor manter a barreira para criar uma instalação não padrão bastante alta, para proteger as pessoas de si mesmas.

3 curtidas