Posso precisar dividir isso em três posts separados, mas eles estão relacionados, então começarei com um.
Há alguns dias, usei este tutorial (How to Scale a Discourse Deployment with a Load Balancer and Managed Database Cluster | DigitalOcean) praticamente palavra por palavra e migrei meu Discourse Droplet autônomo na Digital Ocean para dois Droplets dentro de um Load-Balancer, até agora tudo bem.
Em seguida, passei por este tutorial (Configure an S3 compatible object storage provider for uploads), mas depois de reconstruir o discourse pela linha de comando, meu site Discourse exibia apenas uma tela em branco. Olhei no Inspetor no navegador para descobrir que o navegador estava bloqueando todo o meu conteúdo porque ele estava sendo servido via HTTP e não HTTPS. Isso provavelmente ocorre porque o load balancer é SSL Terminated, então tudo o que é externo é HTTPS, mas os próprios servidores estão rodando em HTTP.
Neste ponto, quebrei completamente meus servidores novamente, tentando fazê-los funcionar com HTTPS dentro do Load-Balancer, mas simplesmente não foi possível. Não consegui fazer o Digital Ocean Space/CDN funcionar com S3/CDN de acordo com este tutorial (Configure an S3 compatible object storage provider for uploads). Passei por ele com uma lupa e inspecionei todos os aspectos várias vezes, mas não funcionou. A única maneira que consegui reconstruir o Discourse foi remover o parâmetro DISCOURSE_S3_ENDPOINT: https://sfo3.digitaloceanspaces.com do app.yml, mas então, mesmo tendo construído, não consegui fazer o servidor responder. Recebi um erro 503 de servidor não respondendo ou um erro regular de navegador de servidor não respondendo ou servidor desconectado. Diferiu com base nas configurações do Load-Balancer e DO Space/CDN que eu estava tentando. Tentei todas as combinações possíveis de configurações e nada me permitiu servir uma página.
Quando mantive o parâmetro DISCOURSE_S3_ENDPOINT, recebi o seguinte erro durante a reconstrução do Discourse, mas ele desapareceu quando comentei o parâmetro S3_ENDPOINT.
Aws::S3::Errors::InvalidAccessKeyId: Aws::S3::Errors::InvalidAccessKeyId
Todos os meus arquivos foram sincronizados com S3, então acho que é seguro assumir que a Chave de Acesso estava boa, e o problema foi causado pelo parâmetro S3_ENDPOINT de alguma forma.
Hoje, desisti de tentar fazer a tentativa anterior funcionar e restaurei um backup dos meus Droplets que estavam apenas balanceando carga com apenas HTTP e finalmente consegui fazer funcionar novamente fazendo este tutorial (Set up file and image uploads to S3), mas desta vez editei as configurações de S3 através do painel de Administração do Discourse em vez de editar o app.yml com as configurações do tutorial recomendado. Finalmente funcionou, mas a diferença importante é que omiti deliberadamente as configurações de CDN do S3. Confirmei que as imagens carregadas nas postagens estão sendo armazenadas no S3 e posso fazer backup do Discourse diretamente no S3, e é realmente tudo o que quero, mas agora tenho três problemas que me assombram, um é crítico e dois são ignoráveis, embora eu gostaria de confirmar isso aqui, se possível.
Então, o problema crítico é que os usuários não podem mais fazer login usando o botão de login do Patreon na página de login do Discourse. Esta mensagem é exibida:
Desculpe, ocorreu um erro ao autorizar sua conta. Por favor, tente novamente.
O URL é este:
https://mbp.community/auth/failure?message=invalid_credentials&origin=https%3A%2F%2Fmbp.community%2Flogin&strategy=patreon
Eu realmente apreciaria algum conselho sobre o que eu poderia tentar para fazer isso funcionar, mas novamente, estou me perguntando se isso ocorre porque internamente os servidores não estão rodando HTTPS. Como você pode ver no URL, externamente eles estão em HTTPS, então é difícil ter certeza. Acho que estou esperando que alguém aqui tenha experiência com o Digital Ocean Load-Balancing etc. com Discourse.
Os outros dois problemas estão sendo chamados agora no Console de Administração, como abaixo:
Alguns conselhos com base nas configurações atuais do seu site
- Seu site está usando SSL. Mas
[force_https](https://mbp.community/admin/site_settings/category/all_results?filter=force_https)ainda não está habilitado em suas configurações de site. - O servidor está configurado para enviar arquivos para S3, mas não há CDN S3 configurado. Isso pode levar a custos caros de S3 e desempenho lento do site. Veja “Usando Armazenamento de Objetos para Uploads” para saber mais.
Então, não me importo de tentar ativar o force_https, mas estou preocupado que isso me bloqueie do meu servidor porque internamente os servidores com balanceamento de carga não estão rodando em HTTPS e, devido aos problemas que tive ontem, estou relutante em gastar mais doze horas batendo minha cabeça contra uma parede vendo inúmeras reconstruções de 15 minutos do Discourse apenas para não chegar a lugar nenhum. Novamente, se alguém souber que é seguro ativar o force_https com minhas configurações, por favor, me avise.
E o segundo problema, novamente, não correu bem através dos parâmetros adicionados ao arquivo app.yml, então estou relutante em tentar isso novamente também. Você pode confirmar que isso faria essencialmente o mesmo que os parâmetros adicionados ao arquivo app.yml? Se sim, vou apenas ignorar esta segunda mensagem. Pelo contrário, se for por algum motivo seguro tentar, me avise e farei um backup e darei uma chance.
Desculpe pelo post longo. Espero que você consiga descobrir o que estou tentando obter conselhos.