Problemas com AWS CDN e S3

,

@Falco, isso ainda é o caso? Lembro-me de ter lido algo sobre problemas recentes com o uso da AWS, mas não consigo encontrar o tópico novamente.

Estou tendo vários problemas ao usar o AWS S3, seguindo os guias dos vários tópicos relevantes.

Os backups estão funcionando como esperado, mas usar o Cloudfront como CDN ou descomentar DISCOURSE_USE_S3 e/ou DISCOURSE_S3_BUCKET causa um throbber perpétuo.

Suspeito que configurei algo incorretamente no bucket de uploads e/ou na distribuição do Cloudfront, mas não consegui encontrar um erro. Tanto o bucket de uploads quanto o de backups estão atrás da distribuição e os backups funcionam bem, então???

discourse-cdn.repealobbba.org CNAME —> amazonassigned.cloudfront.net

DISCOURSE_CDN_URL: https://discourse-cdn.repealobbba.org

## Configuração de armazenamento S3
#  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: us-east-1
  DISCOURSE_S3_ACCESS_KEY_ID: ACCESS_KEY_ID
  DISCOURSE_S3_SECRET_ACCESS_KEY: SECRET_ACCESS_KEY
  DISCOURSE_S3_CDN_URL: amazonassigned.cloudfront.net  ou
#  DISCOURSE_S3_BUCKET: repeal-obbba-discuss-uploads
  DISCOURSE_S3_BACKUP_BUCKET: repeal-obbba-discuss-backups
  DISCOURSE_BACKUP_LOCATION: s3

Adicionalmente, adicionar isto à configuração

    after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets
          - sudo -E -u discourse bundle exec rake s3:expire_missing_assets

Gera o erro FAILED TO BOOTSTRAP (FALHA AO INICIALIZAR)

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && sudo -E -u discourse bundle exec rake s3:upload_assets failed with return #<Process::Status: pid 8484 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/exec_command.rb:131:in `spawn'
exec failed with the params {"cd"=>"$home", "cmd"=>["sudo -E -u discourse bundle exec rake s3:upload_assets", "sudo -E -u discourse bundle exec rake s3:expire_missing_assets"]}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.

Como sempre… Qualquer pensamento ou sugestão seria apreciado.

Você precisa adicionar a estrofe que carrega os assets para o s3.

Ah. Eu estou errado, você está fazendo isso.

Isso sugere que há algo errado com a configuração do bucket.

Eu acho que costumava haver um tópico que gerava o json para configurar um bucket, mas eu não sei se ele ainda existe.

Concordo.
Embora uma política de bucket não tenha sido usada no bucket de backups, adicionar uma política ao bucket de uploads resolveu a falha de inicialização.
O JSON da política está disponível em CloudFront>Distribuições>sua distribuição>Editar origem
Screenshot 2025-12-10 141220

Infelizmente, o indicador de carregamento perpétuo persiste.

Ajustar a Propriedade do Objeto e os ACLs não altera o resultado.
Screenshot 2025-12-10 141936

Configurações atuais. Acredito que sejam as configurações recomendadas ou talvez eu esteja confuso.
Screenshot 2025-12-10 141702
Screenshot 2025-12-10 141835

Depois de alterar as configurações, você precisa executar a tarefa rant para carregar os ativos.

Além disso, você pode abrir o console do desenvolvedor e verificar se os arquivos que ele está tentando acessar existem no bucket ou se há algum problema com a cdn.

Obrigado por continuar…

Sim, as tarefas rake são executadas, não faz diferença.

./launcher enter app
rake posts:rebake
rake uploads:migrate_to_s3
rake posts:rebake_uncooked_posts

O throbber persiste.

rake uploads:migrate_to_s3 gera um erro

Migrating uploads to S3 for 'default'...
Some uploads were not migrated to the new scheme. Running the migration, this may take a while...
rake aborted!
FileStore::ToS3MigrationError: Some uploads could not be migrated to the new scheme. You need to fix this manually. (FileStore::ToS3MigrationError)
/var/www/discourse/lib/file_store/to_s3_migration.rb:156:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:59:in `migrate'
/var/www/discourse/lib/tasks/uploads.rake:126:in `migrate_to_s3'
/var/www/discourse/lib/tasks/uploads.rake:106:in `block in migrate_to_s3_all_sites'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-7.0.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-7.0.0/lib/rails_multisite/connection_management/null_instance.rb:36:in `each_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-7.0.0/lib/rails_multisite/connection_management.rb:17:in `each_connection'
/var/www/discourse/lib/tasks/uploads.rake:104:in `migrate_to_s3_all_sites'
/var/www/discourse/lib/tasks/uploads.rake:100:in `block in <main>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => uploads:migrate_to_s3

Pelo menos um verificador de CDN mostra discourse-cdn.repealobbba.org -->Amazon CloudFront

e o console ainda mostra que arquivos de imagem e js estão sendo chamados do CDN
Screenshot 2025-12-10 192413

Os ativos são chamados do cdn, mas eles estão lá? Se não, eles estão no bucket? Eles são acessíveis a partir do bucket?

Você provavelmente tem alguns uploads em um bucket diferente ou algo que os impede de estar no local esperado. Se for esse o caso, você precisará corrigi-los manualmente como está dizendo. Você precisará acessar o console e ver onde eles estão no registro de upload.

A tarefa de upload de ativos parece estar funcionando? O indicador de carregamento continua rodando porque os outros ativos não estão carregando.

Sim, eles estão lá, os arquivos estão no bucket como assets\nAcessível: https://repeal-obbba-discuss-uploads.s3.us-east-1.amazonaws.com/assets/logo-815195ae.png

Apenas dois buckets, uploads e backups. Os backups estão funcionando bem.

rake s3:upload_assets deu erro:
rake aborted!
Aws::S3::Errors::AccessControlListNotSupported: O bucket não permite ACLs (Aws::S3::Errors::AccessControlListNotSupported)

Mudei para ACLs habilitadas e executei novamente *s3:upload_assets* **edit: uploads:migrate_to_s3** mas…
FileStore::ToS3MigrationError: Alguns uploads não puderam ser migrados para o novo esquema. Você precisa corrigir isso manualmente. (FileStore::ToS3MigrationError)

??? Você precisa corrigir isso manualmente. (FileStore::ToS3MigrationError)

Parece que você consertou o bucket e agora ele está apto a fazer upload de ativos, então o site deve funcionar agora. Lidar com os uploads que não migrarão é outro problema (complicado).

Aqui está um dos ativos que você está tentando servir:

https://discourse-cdn.repealobbba.org/assets/start-discourse-6f03a463.br.js

O certificado está quebrado, então esse é o seu problema. Existe um certificado, mas ele não corresponde ao URL.

Como sugeri anteriormente, olhe na aba de rede das ferramentas de desenvolvedor do seu navegador e veja isto:

editar de cima
Mudei para ACLs ativadas e executei s3:upload_assets editar: uploads:migrate_to_s3 novamente

s3:upload_assets é concluído sem problemas agora

Eu vejo os erros de rede. O certificado é um problema da AWS?

Obrigado novamente pelo seu tempo nisso!!

Sim. O certificado não corresponde ao nome do host. Ele corresponde a *.cloudfront.net

Isto funciona: https://repeal-obbba-discuss-uploads.s3.us-east-1.amazonaws.com/assets/logo-815195ae.png

Isto não funciona: https://discourse-cdn.repealobbba.org/assets/start-discourse-6f03a463.br.js

Isto funciona: https://repeal-obbba-discuss-uploads.s3.us-east-1.amazonaws.com/assets/start-discourse-6f03a463.br.js

Então você precisa mudar seu CDN do s3 para https://repeal-obbba-discuss-uploads.s3.us-east-1.amazonaws.com – ah, eu acho que esse é o endereço do bucket, então não seria o ideal, mas funcionaria.

Não estou muito animado com o “então não seria o ideal” :wink:

Analisando os Nomes de Domínio Alternativos da AWS como uma possível solução.

Talvez seja só eu, mas adicionar um CDN que o @Discourse usa internamente não deveria ser tão difícil e exigir o tipo de suporte de pessoas como o @pfaffman

Talvez o @Falco ou o @sam e @team (não consigo mencionar a equipe) possam dar um palpite??

Sim, todos os sites que hospedamos usam a combinação S3 mais CloudFront. Até mesmo este site que você está navegando agora.

Obrigado por confirmar! Depois de ver isso, reajustei DISCOURSE_S3_CDN_URL: de volta para amazonassigned.cloudfront.net, esperando que isso resolva os problemas de certificado e URL.
Screenshot 2025-12-11 133250

Reconstruí e executei novamente todos os rakes mencionados na documentação.
rake posts:rebake
rake uploads:migrate_to_s3 ainda gera FileStore::ToS3MigrationError
rake posts:rebake_uncooked_posts

rake s3:upload_assets
rake s3:expire_missing_assets

Ainda sem sucesso em fazer o site carregar.

Alguma sugestão?

Acontece que isso foi útil.
Screenshot 2025-12-12 001849

@chapoi, por favor, divida este tópico para suporte.
Talvez @JammyDodger tenha movido para Instalação para melhor visibilidade, embora o fórum estivesse funcionando bem por muitos meses.

De qualquer forma, obrigado pela atenção!

A instalação não é apenas para configurar o fórum

Entendido, obrigado pela clarificação.

Conforme mencionado acima, adicione um domínio alternativo de ajuda.
O site carrega, mas sem folhas de estilo e…

Ao verificar o bucket, não vejo a pasta stylesheets/

Screenshot 2025-12-12 120937

Parece que s3:upload_assets está incompleto.

E há um problema de CORS?
Screenshot 2025-12-12 121734

Fiz progresso depois de entender algumas coisas na documentação que estavam enganosas, confusas ou simplesmente demais para alguém que tem BBS. :distorted_face:

Para nós, usuários de BBS, colocar isso em vermelho piscando ajudaria a transmitir “você precisará de duas distribuições Cloudfront”.

e algumas instruções sobre como

Alguma atualização e consolidação de tópicos relacionados ao S3 seria muito legal. Acho que um tópico mestre com dados atuais para AWS S3 CDN e Backups seria ótimo.

seguindo em frente…

Eu tenho duas distribuições Cloudfront agora, mas:

Todos os rakes são executados sem erro e
e isso não causa mais uma falha de bootstrap.

after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets
          - sudo -E -u discourse bundle exec rake s3:expire_missing_assets

O verificador de CDN parece mais um resultado desejável
Screenshot 2025-12-14 004220

No geral, progresso, mas algumas dicas da equipe de infraestrutura do Discourse seriam muito úteis.

Ufa! Levou muito tempo e algumas horas (8 em 2 chamadas) no telefone com um engenheiro muito prestativo da Amazon, mas acho que entendi tudo. As coisas estão funcionando muito bem no site RepealOBBBA e meu processo é reprodutível para outros sites.

Posso escrever um resumo, mas aqui estão algumas notas por enquanto:

  1. DISCOURSE_CDN_URL (se estiver usando AWS S3) e DISCOURSE_S3_CDN_URL exigem suas próprias distribuições Cloudfront.
  2. DISCOURSE_CDN_URL não usa um bucket.
  3. DISCOURSE_CDN_URL pode ser uma CDN que não seja da AWS. Bunny.net funciona muito bem. (Disseram-me que o Bunny Storage com suporte a S3 será lançado no 1º trimestre de 2026)
  4. As CDNs DISCOURSE_CDN_URL e DISCOURSE_S3_CDN_URL podem ser URLs de marca com a configuração de DNS apropriada.
  5. DISCOURSE_S3_CDN_URL requer um bucket de uploads.
  6. O bucket de uploads requer ACLs ativadas e “Todos (acesso público)” definido como “Leitura”, e você deve definir uma política para o bucket.
  7. O bucket de backups não requer ACLs ou política.

Edição(ões)

  1. Marque a caixa no S3 “usar URL de CDN para todos os uploads”: Usar URL de CDN para todos os arquivos carregados no s3 em vez de apenas para imagens. Não habilitar isso sempre causou falhas para mim.

Imagino que muitos leiam o acima e pensem, duhhh Phil, não me diga, isso é óbvio, mas… minha cabeça de BBS não entendeu isso de imediato.