Estas são as variáveis que configuramos relacionadas ao S3/CDN:
DISCOURSE_CDN_URL
DISCOURSE_S3_ACCESS_KEY_ID
DISCOURSE_S3_BACKUP_BUCKET
DISCOURSE_S3_CDN_URL
DISCOURSE_S3_REGION
DISCOURSE_S3_SECRET_ACCESS_KEY
DISCOURSE_S3_UPLOAD_BUCKET
USE_DB_S3_CONFIG: true
Acredito que DISCOURSE_S3_BUCKET foi descontinuado em favor de DISCOURSE_S3_UPLOAD_BUCKET e DISCOURSE_S3_BACKUP_BUCKET. Você deve configurar essas variáveis em vez disso.
Foi isso que eu supus, mas não avanço nada a menos que configure tanto DISCOURSE_S3_UPLOAD_BUCKET quanto DISCOURSE_S3_BUCKET. Como você pode ver no trecho de código publicado acima, use_s3? ainda está procurando por s3_bucket e não por s3_upload_bucket.
Configurar DISCOURSE_BACKUP_BUCKET não resolve isso, pelo que pude perceber.
Se eu configurar ambas as variáveis de ambiente de bucket, avanço um passo, mas agora esbarrei em um novo problema: o Discourse está ignorando minha URL de CDN S3 e tentando carregar os ativos do meu caminho base. Isso está causando erros de CSP, pois a Política de Segurança de Conteúdo inclui apenas o caminho de ativos da minha CDN S3.
Deveria ser DISCOURSE_S3_BACKUP_BUCKET em vez de DISCOURSE_BACKUP_BUCKET. Fora isso, se você estiver configurando todas as variáveis com as duas distribuições do CloudFront, deve funcionar. Se observar nossas configurações, não estamos definindo DISCOURSE_S3_BUCKET.
Não tenho certeza se um rebake também é necessário.
@Falco, pelo que me lembro, uma das coisas que tornam isso muito contra-intuitivo é que há uma diferença de comportamento ao definir DISCOURSE_S3_CDN_URL como uma variável de ambiente / GlobalSetting em comparação com configurá-lo como um SiteSetting. Talvez isso seja algo que você queira prestar atenção no seu howto.
Sim, desculpe, foi um erro de digitação apenas no meu post anterior. DISCOURSE_S3_BACKUP_BUCKET não define s3_bucket em GlobalSetting para mim. Não tenho certeza de como você está executando essa tarefa rake sem definir DISCOURSE_S3_BUCKET.
Agradeço muito sua ajuda, aliás, e sei que isso não é problema seu para resolver, então obrigado.
def ensure_s3_configured!
unless GlobalSetting.use_s3? || use_db_s3_config
STDERR.puts "ERRO: Certifique-se de que o S3 está configurado em config/discourse.conf ou nas variáveis de ambiente"
exit 1
end
end
use_db_s3_config evita que você precise definir essa variável extra. Isso deve ser um bug em global_setting.rb, pois deveria ser possível apenas definir DISCOURSE_S3_UPLOAD_BUCKET, a menos que haja uma diferença entre isso e DISCOURSE_S3_BUCKET. Mas acho que você tem razão: o último deveria estar obsoleto.
Independentemente de um bug no global_setting.rb, ainda estou enfrentando um problema onde o Discourse está procurando os assets no local habitual e não no meu CDN S3, mesmo tendo declarado todas as minhas variáveis e definido DISCOURSE_ENABLE_S3_UPLOADS como true.
Existe uma tarefa para isso: bundle exec rake uploads:migrate_to_s3. Depois de configurar seus buckets, você deve executar essa tarefa para mover os uploads para o S3. O S3/CDN mudou nos últimos meses e a documentação não está atualizada, então certifique-se de fazer backup e se preparar caso algo dê errado.
Quando ativei isso pela primeira vez, tivemos algumas interrupções enquanto resolvíamos tudo.
Acho que isso ocorre porque você está sem o DISCOURSE_CDN_URL. Temos configurado assim:
DISCOURSE_CDN_URL: 'https://d16zv78c963s69.cloudfront.net' # isso aponta para o servidor
DISCOURSE_S3_CDN_URL: 'https://community-cdn-prod.debtcollective.org' # isso aponta para o bucket S3
Os estilos são buscados do servidor, então usam o DISCOURSE_CDN_URL. Já o JavaScript é enviado para o bucket S3 e usa o DISCOURSE_S3_CDN_URL. O @Falco me explicou isso aqui.
Sim, vi isso. Configurei DISCOURSE_CDN_URL, mas ainda tenho o mesmo problema. No entanto, estou cansado, então talvez tenha perdido algo com toda essa confusão. Vou retomar isso amanhã. Obrigado pela ajuda.
Isso fará o upload de ambos os arquivos como imagens e ativos como arquivos JS para o S3? E devo usar uma URL do Cloudfront ou o S3 é suficiente? Obrigado pela ajuda.
bundle exec rake uploads:migrate_to_s3 fará o upload apenas dos anexos para o S3; essa tarefa precisa ser executada apenas uma vez. Após ativar o S3, novos uploads serão salvos nos buckets do S3.
Para fazer o upload de ativos, você precisa usar bundle exec rake s3:upload_assets, e isso deve ser executado após cada rebuild/atualização.
Fiz o que você mencionou e os uploads para o S3 (imagens, etc.) foram bem-sucedidos, mas para assets recebo o erro abaixo:
ERROR: Ensure S3 is configured in config/discourse.conf or environment vars
Configurei ambos:
DISCOURSE_CDN_URL: 'https://d16zv78c963s69.cloudfront.net' # isso aponta para o servidor
DISCOURSE_S3_CDN_URL: 'https://community-cdn-prod.debtcollective.org' # isso aponta para o bucket S3
Existe um problema interessante: o Discourse está tentando acessar arquivos de ativos de um caminho incorreto. Ele tenta acessar a partir do caminho brotli_asset, mas não há esse caminho no bucket S3.
Além disso, ele tenta acessar arquivos de JavaScript e folhas de estilo a partir da URL do CDN. Mas esses arquivos também não estão no bucket.
Ao configurar os dados no painel administrativo para o S3, tudo funciona corretamente e tudo é carregado no S3. Eu não tenho nenhuma configuração no ENV. Isso é ruim? É necessário se tudo estiver funcionando?
O segundo exemplo é diferente porque não consigo migrar os dados antigos para o S3 (apenas os novos funcionam). Mas aqui, inserir esses dados no arquivo app.yml (DISCOURSE_S3_ACCESS_KEY_ID: ‘key’, etc.) não muda nada e ainda não funciona (ou seja,
Não, as variáveis de ambiente fornecem uma maneira adicional de configurar essas coisas, por exemplo, antes que você tenha acesso ao painel de administração.