Excellent. Nope that will be perfect. Thanks again! Very much appreciated.
The command is now ./discourse-setup --two-container
worked as expected just now 
Good catch! Did it print a message that made it easy to figure that out?
I’ve been meaning to clean up this topic since they change.
Yes, very helpful thanks.
Are there any plans to migrate from the old “container links” thing to proper setup with a custom network with two containers being connected to it?
“Links” are legacy and may be removed in the future according to Docker docs
That sounds like a good idea.
Unless someone beats me to it, I’ll see about subunits /creating a PR to switch to networks and /or sockets (which some prefer anyway) and creating a howto to convert an existing setup to the new configuration.
@pfaffman Não sei se você chegou a fazer isso, mas se fez, quer colocar o link aqui? ![]()
Devemos adicionar um && ./launcher cleanup ao final desses comandos?
Descobri que, após a mudança para uma instalação de dois contêineres, não demora muito para encher o armazenamento disponível com imagens antigas.
Eu definitivamente recomendo isso no meu guia… Muitas pessoas implantam em sistemas pequenos como droplets do DO e eu sei que ajudei outros que não perceberam para onde o espaço deles estava indo.
@pfaffman, Olá,
Há alguns dias instalei o AWS EC2 com um único contêiner e tudo funcionou bem. Mas preciso exatamente da configuração de dois contêineres, web_only no EC2 e dados no AWS RDS (PostgreSQL 15.3 na porta 5432 => não consigo escolher outra versão, e o banco de dados não tem parâmetro DB_NAME). Como um cluster Redis, tentei usar o AWS ElastiCache, mas depois deixei um link no data.yml para o template existente:
#- "templates/postgres.template.yml"
- "templates/redis.template.yml"
Após inicializar com sucesso os dados e web_only, não consigo abrir a página da web. “Este site não pode ser alcançado”
Não fiz nenhuma alteração nos registros DNS nem alterei as configurações de acesso nos grupos de segurança da AWS (firewall para web e banco de dados).
Inicialização bem-sucedida, para iniciar use ./launcher start data
root@ip-172-31-3-68:/var/discourse# ./launcher start data
arquitetura x86_64 detectada.
+ /usr/bin/docker run --shm-size=512m -d --restart=always -e LANG=en_US.UTF-8 -e LC_ALL=en_US.UTF-8 -e LANGUAGE=en_US.UTF-8 -h ip-172-31-3-68-data -e DOCKER_HOST_IP=172.17.0.1 --name data -t -v /var/discourse/shared/data:/shared -v /var/discourse/shared/data/log/var-log:/var/log --mac-address <...> local_discourse/data /sbin/boot
27b66e577d250e4178f5e145c9962be7b5f2d905cfacd233d3d2278e7b83aa93
Inicialização bem-sucedida, para iniciar use ./launcher start web_only
root@ip-172-31-3-68:/var/discourse# ./launcher start web_only
arquitetura x86_64 detectada.
+ /usr/bin/docker run --shm-size=512m --link data:data -d --restart=always -e LANG=en_US.UTF-8 -e RAILS_ENV=production -e UNICORN_WORKERS=2 -e UNICORN_SIDEKIQS=1 -e RUBY_GC_HEAP_GROWTH_MAX_SLOTS=40000 -e RUBY_GC_HEAP_INIT_SLOTS=400000 -e RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR=1.5 -e DISCOURSE_DB_SOCKET= -e DISCOURSE_DB_HOST=database-discourse.<...>.rds.amazonaws.com -e DISCOURSE_DB_PORT= -e LETSENCRYPT_DIR=/shared/letsencrypt -e DISCOURSE_FORCE_HTTPS=true -e LC_ALL=en_US.UTF-8 -e LANGUAGE=en_US.UTF-8 -e DISCOURSE_HOSTNAME=talk.furtherium.com -e DISCOURSE_DEVELOPER_EMAILS=hello@furtherium.com -e DISCOURSE_SMTP_ADDRESS=email-smtp.us-east-2.amazonaws.com -e DISCOURSE_SMTP_PORT=587 -e DISCOURSE_SMTP_USER_NAME=A<...>S -e DISCOURSE_SMTP_PASSWORD=B<...>M -e DISCOURSE_NOTIFICATION_EMAIL=noreply@talk.furtherium.com -e LETSENCRYPT_ACCOUNT_EMAIL=me@example.com -e DISCOURSE_DB_NAME= -e DISCOURSE_DB_USERNAME=postgres -e DISCOURSE_DB_PASSWORD=7<...>1 -e DISCOURSE_REDIS_HOST=data -h ip-172-31-3-68-web-only -e DOCKER_HOST_IP=172.17.0.1 --name web_only -t -p 80:80 -p 443:443 -v /var/discourse/shared/web-only:/shared -v /var/discourse/shared/web-only/log/var-log:/var/log --mac-address <...> local_discourse/web_only /sbin/boot
1233f1c660eb7cecc48d2a840aae037b46ecfd7afe029ef89b2e686b136b9886
- Verifiquei a conexão com o banco de dados via SSH usando telnet - OK
- Posso ver as conexões do banco de dados no painel AWS RDS
- Reiniciei as instâncias 3 vezes
- Executei o rebuild 3-4 vezes sem erros
- Verifiquei a lista de contêineres e imagens ativas, limpei os desnecessários
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1233f1c660eb local_discourse/web_only "/sbin/boot" 18 minutes ago Up 18 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp web_only
27b66e577d25 local_discourse/data "/sbin/boot" 47 minutes ago Up 47 minutes data
O que mais posso fazer? Obrigado por seus esforços e tempo!
Você não precisa. Você só precisa do contêiner web e excluir os modelos Postgres e Redis. O Elasticache é, na minha opinião, absurdamente caro, então você poderia executá-lo em seu EC2 se estiver usando um único host.
Basta adicionar as variáveis de ambiente ao seu app.yml existente e excluir os modelos desnecessários. Ouvi recentemente que este site está rodando no PG15, então isso deve ficar bom.
Obrigado pela resposta, Jay (@pfaffman). Só quero esclarecer:
- devo usar a instalação do app.yml de contêiner único e comentar as linhas sobre banco de dados e redis? e também no campo ENV do app.yml, então adicionar linhas para o banco de dados remoto na AWS (DB_USER, etc. - do web_only como agora)?
- ou devo deixá-lo como está, mas parar o contêiner de dados e deixar apenas o web-only?
- Se eu não usar o ElastiCache, então preciso deixar a linha “templates/redis.template.yml”?
A mudança de padrão para dois contêineres ocorreu quase sem problemas. Perdi bastante tempo por causa de alguns espaços faltando no arquivo yml, que tentaram me convencer de que eu tinha problemas de localização (nem perto disso), mas isso foi um erro do usuário.
Mas quando coloquei o fórum para funcionar, ele estava totalmente virgem. Foi bem fácil de consertar, pois eu tinha um backup atualizado no S3, mas agora estou me perguntando por que aconteceu em primeiro lugar — alguma ideia?
Quero dizer, seguir o caminho de instalar uma configuração totalmente nova de dois contêineres e depois restaurá-la a partir de backups poderia economizar algum tempo. Ou não, porque eu ainda teria que editar o yml, pelo menos adicionando plugins, corrigindo configurações de e-mail, maxmind etc.
[Não relacionado à postagem acima]
Estou me perguntando, qual é a vantagem de usar uma configuração de dois contêineres? Por que não o contêiner único normal?
Eu acho que é para não deixar seu fórum offline quando você fizer uma reconstrução para atualizações/instalação de um plugin
Para mim, já foi mencionada uma breve interrupção. Além disso, eu atualizo com frequência, pelo menos uma vez por semana, então minha configuração está sujeita a encontrar bugs — não com tanta frequência, devo dizer, mas ainda assim de vez em quando.
Nesses momentos em que o motivo é um plugin — não com frequência, na maioria das vezes é algum componente — preciso de três a quatro rodadas para resolver o problemático. E quando cada rodada leva algo perto de 30 minutos, meu fórum ficaria inativo um pouco demais, mesmo que seja pequeno e baseado em hobby.
E a terceira razão é porque eu posso.
Acho extremamente estressante se uma reconstrução falhar e meu site sair do ar. Basicamente, isso exige minha atenção imediata (e às vezes prolongada) para resolver / encontrar uma solução alternativa. Nada divertido!!!
A instalação de dois contêineres converte isso em um mero inconveniente, e o problema subjacente geralmente pode ser resolvido em um momento que me convém. Além disso, o problema que causou o problema muitas vezes já foi resolvido nessa fase.
Se eu usasse stable, provavelmente não me incomodaria. Mas vivendo mais perto da vanguarda usando tests-passed, é inestimável para a resiliência que concede durante reconstruções / atualizações.
Ah, entendi. Obrigado pela explicação!
Eu tinha me esquecido completamente que postei isso!
Bom tutorial. Levei 5 minutos, com um servidor novo, para criar e restaurar o backup e então executar `./discourse-setup --two-container’.
Obrigado
Alguém pode explicar por que, se você está convertendo um servidor existente com um banco de dados íntegro, esta etapa é necessária?
Entendo que criar um backup seguro fora do local pouco antes da migração é uma boa prática, mas por que o download?