Estas instruções devem ser consideradas beta e para aqueles familiarizados com uma configuração padrão
Mas neste momento (2023.02.11) estas instruções não funcionam!! (Veja Set up Let’s Encrypt with multiple domains / redirects para saber como atualizar a configuração letsencrypt para adicionar a parte fullpath. Vou atualizar isso para refletir essas mudanças em breve.)
Desenvolvi este guia há algumas semanas, mas preciso que alguém teste e veja se funciona para outra pessoa. Por favor, responda se tentar e me diga se funciona e se algo não está claro.
E vamos ao show. . .
Este guia documenta amplamente como configurar uma configuração de múltiplos sites com 2 hosts adicionais (3 no total).
Senha do banco de dados (a mesma que DISCOURSE_DB_PASSWORD) ou discourse em app.yml
Para simplificar, isto é para um site principal chamado =domain=, com dois sites adicionais =two=.=domain= e =three=.=domain=. Você pode usar os nomes que quiser, mas para este modelo, não ter um nome curto (para o nome do banco de dados e título do sub-fórum) e nome de host completo diferentes é um pouco mais fácil.
adicione em hooks após os plugins em app.yml ou web_only.yml
before_bundle_exec:
- file:
path: $home/config/multisite.yml
contents: |
=two=:
adapter: postgresql
database: =two=
pool: 25
timeout: 5000
host: data
password: NThmZTNjZjZhOTczNmVj
host_names:
- =two=.=domain=
=three=:
adapter: postgresql
database: =three=
pool: 25
timeout: 5000
host: data
password: NThmZTNjZjZhOTczNmVj
host_names:
- =three=.=domain=
after_db_migrate:
- exec: cd /var/www/discourse && sudo -E -u discourse bundle exec rake multisite:migrate
after_ssl:
# diga ao letsencrypt quais certificados adicionais obter
- replace:
filename: "/etc/runit/1.d/letsencrypt"
from: /-d =domain= /
to: "-d =domain= -d =two=.=domain= -d =three=.=domain="
global: true
# não redirecione todos os hosts de volta para o nome de domínio principal
- replace:
filename: "/etc/nginx/conf.d/discourse.conf"
from: /if \\(\\$http_host[^\\}]*\\}/m
to: ""
Adicione à seção after_postgres em app.yml ou data.yml
- exec: sudo -u postgres createdb =two= || exit 0
- exec:
stdin: |
grant all privileges on database =two= to discourse;
cmd: sudo -u postgres psql =two=
raise_on_fail: false
- exec: /bin/bash -c 'sudo -u postgres psql =two= <<< "alter schema public owner to discourse;"'
- exec: /bin/bash -c 'sudo -u postgres psql =two= <<< "create extension if not exists hstore;"'
- exec: /bin/bash -c 'sudo -u postgres psql =two= <<< "create extension if not exists pg_trgm;"'
- exec: sudo -u postgres createdb =three= || exit 0
- exec:
stdin: |
grant all privileges on database =three= to discourse;
cmd: sudo -u postgres psql =three=
raise_on_fail: false
- exec: /bin/bash -c 'sudo -u postgres psql =three= <<< "alter schema public owner to discourse;"'
- exec: /bin/bash -c 'sudo -u postgres psql =three= <<< "create extension if not exists hstore;"'
- exec: /bin/bash -c 'sudo -u postgres psql =three= <<< "create extension if not exists pg_trgm;"'
Depois disso,
./launcher rebuild app
ou
./launcher rebuild data
./launcher rebuild web_only
Acabei de testar, na verdade testei duas vezes porque não acreditei que funcionou sem problemas na primeira tentativa já Tudo o que fiz foi copiar, ajustar os domínios e a senha e depois colar nos arquivos respectivos de uma instalação nova com 2 containers.
Aguardo feedback sobre se algo não está claro; apenas precisei refletir um pouco sobre este parágrafo:
Parece sugerir que uma configuração de 2 containers é necessária para seguir o tutorial, mas não é. E não entendi por que há um link para a postagem 48 do tópico, em vez da postagem inicial.
Obrigado! Vou dar uma olhada. Ambos parecem ser do tipo de descuido que eu esperava que você me avisasse!
EDIT: Obrigado! Eu havia copiado descuidadamente minha localização atual no tópico de 2 contêineres, então corrigi isso e alterei o texto para dizer que funcionará com qualquer instalação funcional.
Comecei com uma instalação padrão do Discourse (no DigitalOcean) e depois configurei o nginx (usando estas instruções), pois queria ter alguns sites Drupal no mesmo droplet.
Se eu quiser ter outra instância do Discourse, devo seguir o que está acima?
Estas instruções são para o caso de não usar um proxy reverso. Recomendo que você siga Configuração de multisite com Docker. As instruções que você linkou podem funcionar, mas recomendo que você siga primeiro o que está aqui.
Obrigado; notei que com isso ambos os sites usariam a mesma configuração SMTP
há uma maneira de contornar isso?
ou seria melhor seguir o outro guia (parece que pode exigir algum trabalho para colocar o site existente na rede Docker)
alternativamente, é possível instalar outra base de código, digamos /var/discourse2?
(vai me custar cerca de 500 MB, mas vale a pena se me poupar essa dor de cabeça)
Sim, mas você só precisa criar uma instalação com 2 contêineres e, em seguida, ter um web_only2.yml. (Acho que é possível ter 2 arquivos no estilo app.yml, mas aí você estaria executando desnecessariamente duas instâncias do PostgreSQL). Acredito, no entanto, que você precise de duas instâncias do Redis.
Obrigado; como não estou muito familiarizado com a separação dos contêineres de dados e web, criei outro contêiner independente seguindo estas diretrizes (e os certificados criados pelo certbot parecem estar funcionando). No entanto, atualmente parece haver um problema com a configuração do Mailgun: ele envia e-mails de ativação para o Gmail, mas qualquer e-mail hospedado no meu registrador (DreamHost) está falhando
Quanto de carga adicional o instância extra do Postgres causaria?
Li seu post sobre a separação e tentarei fazer isso se a economia for significativa.
Recentemente, tenho tentado fazer isso, mas estou com dificuldades em alguns pontos do guia:
Não consigo encontrar a senha do banco de dados (ou para que ela é usada no arquivo).
Meu arquivo app.yml não continha originalmente uma seção after_postgres, então adicionei uma sob hooks para ficar igual aos outros (after_ssl, after_db_migrate, etc.). Se isso estiver na seção errada, por favor, me avise; sou completamente novo nesse tipo de coisa.
Quando verifico a sintaxe do arquivo YAML em http://www.yamllint.com/, recebo o erro (<unknown>): did not find expected key while parsing a block mapping na linha onde coloquei a seção after_postgres dentro da seção hooks.
Se você puder esclarecer os passos para editar o arquivo app.yml, ficaria muito agradecido.
Estou pensando em configurar isso, pois meu amigo e eu queremos testar alguns fóruns diferentes antes de decidirmos se queremos investir mais neles, possivelmente tendo hospedagem separada e tal.
Eu estava pensando em tê-los em domínios diferentes. Entendo que isso pode causar um pouco de confusão, pois as pessoas receberão e-mails apenas do endereço SMTP principal, no entanto, você sabe se domínios separados criariam outros problemas?
O Discourse tem um único domínio para todos os seus clientes empresariais e padrão. Você pode definir o endereço de e-mail de notificação como desejar, como nomecurto@qualquermemail.com.
Infelizmente, tenho um problema ao executar múltiplos sites do Discourse em um único servidor/IP.
Primeiro, segui a documentação para configurar um site independente e foi bem-sucedido.
(por exemplo, test.john.com - um subdomínio redirecionado para o IP único)
Agora, quando tentei adicionar mais sites do Discourse (por exemplo, test.joe.com e test.doe.com - outros subdomínios de outros sites).
Tentei seguir seus passos, mas não obtive sucesso e agora estou perdido.
Algumas perguntas:
Como esses dois sites adicionais serão instalados? Como copiar o /standalone.yml para o diretório containers e renomeá-lo? E apenas fazer a instalação regular? (por exemplo, ./launcher rebuild joe)
Sua instrução afirma que as alterações devem ser feitas no app.yml, anexando todo o código acima - que presumo que será adicionado ao arquivo do primeiro site instalado com sucesso (test.john.com)?
Além daqueles no diretório container, criei um config/multisite.yml e este é o meu código:
secondsite:
adapter: postgresql
database: b_discourse
username: postgres
password: postgres
host: dbhost
pool: 5
timeout: 5000
host_names:
- test.joe.com
...
...
# e a configuração do terceiro site
No entanto, não tenho certeza se há outras coisas que preciso configurar.
Não. Você adiciona as coisas ao app.yml conforme descrito. Isso criará o mutlisite.yml dentro do contêiner. Haverá uma única instância e funcionará para todos os domínios, dado que o DNS de todos eles aponta para lá. Isso não é para ter vários contêineres Discourse, um para cada nome de domínio.
Pelo que me lembro, essas instruções funcionaram como escritas. Basta adicionar as linhas ao seu app.yml e deve funcionar. Você não precisa mexer em nenhum outro arquivo.
Quanto à parte de migração, todas as combinações sempre falharam… >> bundle exec rake multisite:migrate
********************** última parte do processo**************************
2023-02-11 17:50:43.853 UTC [61] LOG: desligando
162:M 11 Fev 2023 17:50:43.866 # Usuário solicitou desligamento...
162:M 11 Fev 2023 17:50:43.866 * Salvando o snapshot RDB final antes de sair.
162:M 11 Fev 2023 17:50:43.881 * DB salvo em disco
162:M 11 Fev 2023 17:50:43.882 # Redis está pronto para sair, tchau tchau...
2023-02-11 17:50:44.007 UTC [57] LOG: sistema de banco de dados está desligado
FALHOU
--------------------
Pups::ExecError: cd /var/www/discourse && sudo -E -u discourse bundle exec rake multisite:migrate falhou com retorno #<Process::Status: pid 582 exit 1>
Localização da falha: /usr/local/lib/ruby/gems/3.1.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec falhou com os parâmetros "cd /var/www/discourse && sudo -E -u discourse bundle exec rake multisite:migrate"
bootstrap falhou com código de saída 1
** FALHA AO INICIALIZAR ** por favor, role para cima e procure por mensagens de erro anteriores, pode haver mais de uma.
./discourse-doctor pode ajudar a diagnosticar o problema.
Verifiquei o que foi criado e o que não foi criado até a falha.
Bancos de dados de subdomínios são criados, mas a migração falhou. Configurações nginx de subdomínios ou multisite.yml não puderam ser criadas quando verifiquei as pastas overlay2 ou em qualquer lugar.
./launcher bootstrap,destroy,start,stop,rebuild ou configuração inicial muitas vezes … Tentei todos os comandos, mas nada aconteceu…
Este tutorial ainda é válido para v3.1.0.beta 2 ou o que eu posso estar perdendo?
Alguma ideia, por favor?
Não. Algo sobre o Let’s Encrypt mudou em algum momento. Vou pedir para você dar uma olhada mais de perto em tudo o que precisa ser alterado dentro do contêiner para lidar com vários domínios.
Tenho usado essa configuração por anos com meus servidores de staging. No entanto, desde a atualização para 3.5.0.beta5-dev, sou redirecionado para o site principal sempre que insiro um subdomínio.
Fiquei tão feliz por não ter que lidar com toda a questão de certificação. Mas agora estou bem perdido, existem ferramentas para depurar o que está acontecendo?