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.

1 curtida

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.

1 curtida

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.

1 curtida

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:

1 curtida

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.

1 curtida

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.

2 curtidas

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