Esta é uma configuração avançada. Não siga isto a menos que você tenha experiência com administração de servidor Linux e Docker.
Configuração de 2 Contêineres para um Novo Site
Adicionado por @pfaffman em 2019-12-11.
NOTA: Se você deseja criar um site de 2 contêineres, você pode fazer o seguinte:
./discourse-setup --two-container
Funciona como o normal, exceto que criará contêineres data e web_only separados e gerará uma senha aleatória para o banco de dados. Se você já tem um app.yml, precisará renomeá-lo, ou discourse-setup apenas o atualizará. Você pode então copiar um backup para /var/discourse/shared/web-only/backups/default e restaurá-lo, o que é um pouco mais fácil para administradores de sistema novatos do que o descrito abaixo.
Convertendo sua Configuração Atual
Eu consegui migrar para dois contêineres. Se mais alguém precisar de instruções, foi assim que funcionou para mim.
O processo inclui backup, configuração de contêineres web e de dados separados e restauração dos dados.
-
Faça backup da sua instância do Discourse e baixe o backup. Você pode seguir o guia simples ou backup e restauração manual mais tarde.
-
Pare o contêiner autônomo atual
./launcher stop app -
Copie
web_only.ymledata.ymldesamples/paracontainers/e renomeie-os para o que você quiser, por exemplo,web_rocks.ymledata2.yml. -
Se você os renomear, preste atenção às entradas
volumes:emdata.ymleweb_only.yml
Se você renomeouweb_only.ymlparaweb_rocks.yml, você precisa modificar a entrada emWeb_rocks.ymlassim:
volumes:
- volume:
host: /var/discourse/shared/web_rocks
guest: /shared
- volume:
host: /var/discourse/shared/web_rocks/log/var-log
guest: /var/log
Da mesma forma, faça a edição semelhante em data.yml também.
Configurando o contêiner de dados
Comece com data.yml e defina uma senha para o banco de dados. Então:
- vá para a pasta raiz do contêiner
/var/discourse - execute
./launcher bootstrap data2(data2 ou qualquer novo nome que você deu a ele) - execute
./launcher start data2(usando o novo nome novamente) - se tudo correr bem, você pode se conectar ao contêiner via:
./launcher enter data2(novamente usando o novo nome) - Saia do contêiner com
exit.
Configurando o contêiner web
Vamos modificar web_only.yml.
Primeiro, mude o modelo e exponha as portas como seu app.yml faz.
Em segundo lugar, certifique-se de estar vinculando ao contêiner de dados correto. Se você renomeou o data.yml para ‘something_else’, coloque-o em ‘name’.
# Use a chave 'links' para vincular contêineres, ou seja, use a flag Docker --link.
links:
- link:
name: data
alias: data
Embora não queiramos mais expor ssh ou quaisquer outras portas, você ainda precisará expor as portas 80 e 443 para acesso web. Isso depende se você tem um nginx rodando na frente e como você conecta o contêiner a ele.
Em algum lugar lá você encontrará este bloco:
DISCOURSE_DB_USERNAME: discourse
DISCOURSE_DB_PASSWORD: mypassword
DISCOURSE_DB_HOST: data
DISCOURSE_REDIS_HOST: data
- Insira a senha que você definiu dentro do contêiner de dados.
- Insira o alias do contêiner de dados que você acabou de anotar. Para
DB_HOSTe paraREDIS_HOST. Deve corresponder ao bloco links que mencionamos. - Você provavelmente não mudou o
DB_USERNAME.
Você encontrará os valores para DISCOURSE_DEVELOPER_EMAILS e DISCOURSE_HOSTNAME e muitos outros. Você já tem esses valores no seu app.yml. Copie-os de lá.
Na seção de hooks, lembre-se de definir quaisquer plugins adicionais que você já usa no app.yml
Agora você deve estar pronto para fazer o bootstrap:
./launcher bootstrap web_only (novamente com seu novo/próprio nome)
Depois de fazer o bootstrap, você pode iniciar web_only (use seu novo nome):
./launcher start web_only
Quando o Discourse estiver pronto, faça login e restaure seu site.
Depois disso, tudo funcionou novamente para mim e minha instalação do discourse estava rodando novamente, mas agora em dois contêineres separados.
Como atualizar ao usar web e data contêineres separados
Se você não se importa com os poucos minutos de inatividade – ou quando os dados precisam ser atualizados. Mudanças no postgres e redis são infrequentes, e manter o contêiner de dados em execução é o que possibilita construir um novo contêiner web_only enquanto o antigo está em execução.
./launcher stop web_only && ./launcher rebuild data && ./launcher rebuild web_only
Isso funciona para uma atualização menor do Postgres e/ou uma atualização do redis.
Se você se importa com cada minuto de inatividade e os dados não precisam ser atualizados (o que é a maior parte do tempo):
atualizar apenas web_only:
./launcher bootstrap web_only && ./launcher destroy web_only && ./launcher start web_only
É suficiente reconstruir web_only e pular data, exceto quando houver uma atualização para postgres ou redis. Essas ocorrem na ordem de uma vez por ano e você verá um anúncio como PostgreSQL 15 update quando isso acontecer, embora as atualizações para redis e atualizações menores do postgres não sejam anunciadas de forma tão óbvia.
A reconstrução dos dados requer tempo de inatividade (pelo mesmo motivo que a versão de contêiner único faz–você não pode atualizar o postgres enquanto outro processo está acessando os mesmos arquivos de banco de dados. Além disso, quando você constrói um novo contêiner de dados, você deve destruir e iniciar o contêiner web_only porque ele tentará se conectar ao contêiner antigo).
Você não precisa reconstruir o contêiner de dados com frequência (é por isso que este método economiza tempo de inatividade). Você precisa prestar atenção a quando há uma atualização no postgres ou redis; o front-end não saberá; esta é uma configuração avançada que requer mais atenção do que um contêiner único.
Gerenciando uma instalação de dois contêineres
@pfaffman criará um tópico sobre isso um dia, mas até lá, existe isto: Managing a Two-Container Installation - Documentation - Literate Computing Support

