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. Você também precisa prestar muita atenção aos commits no discourse_docker para garantir que notará se houver uma atualização de versão para postgres ou redis.
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 separados de web e dados 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 uma 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 template 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 para ‘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 dentro do 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 contêineres web e de dados separados
Se você não se importa com os poucos minutos de inatividade – ou quando os dados precisam ser atualizados. As alterações 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 preocupa 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. Isso acontece 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 inatividade (pelo mesmo motivo que a versão de contêiner único – você não pode atualizar o postgres enquanto outro processo estiver 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

