Configure um provedor de armazenamento de objetos compatível com S3 para uploads

Você pode dar uma olhada no console javascript. Minha suposição é que ou o CDN está errado ou você não acertou a parte de pré-compilação de assets.

https://community.itechguides.com/ está funcionando agora:

Se não estiver funcionando para você, tente um hard reload e/ou uma janela anônima.

2 curtidas

O site abriu para você porque, no momento em que você o abriu, eu comentei as seguintes linhas do arquivo app.yml:

DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: nyc3
DISCOURSE_S3_ENDPOINT: https://nyc3.digitaloceanspaces.com
DISCOURSE_S3_ACCESS_KEY_ID: accesskey
DISCOURSE_S3_SECRET_ACCESS_KEY: secretkey
DISCOURSE_S3_CDN_URL: https://community-cdn.itechguides.com
DISCOURSE_S3_BUCKET: itg-community-files
DISCOURSE_S3_BACKUP_BUCKET: itg-community-files/backups
DISCOURSE_BACKUP_LOCATION: s3

Acabei de reativar as linhas e reconstruir o container. Agora, o site está mostrando uma página em branco novamente!

A captura de tela abaixo mostra onde coloquei os códigos em meu app.yml. Como você pode ver, coloquei os códigos de configuração do S3 abaixo de DISCOURSE_NOTIFICATION_EMAIL


a

1 curtida

O que acontece se você comentar DISCOURSE_CDN_URL?

1 curtida

Eu não fiz isso. Mas tenho solucionado problemas e acredito firmemente que não configurei o S3 CDN corretamente. Estou usando StackPath e não tenho certeza do que usar no endereço de Origem e no cabeçalho Host

1 curtida

Outra coisa que não tenho certeza é como configurar o recurso de listagem de arquivos do meu bucket do DigitalOcean Space. Agora, estou usando Listagem Restrita. Isso afeta alguma coisa?

1 curtida

Comentei o DISCOURSE_S3_CDN_URL e o site carrega. Isso confirma que minha configuração do S3 CDN é o problema, mas ainda não sei como configurá-lo corretamente.

Agradecerei muito qualquer ajuda.

1 curtida

Você completou todas as tarefas na seção de Configuração?

Se bem me lembro, definir DISCOURSE_S3_CDN_URL em app.yml exige que os ativos sejam armazenados no S3.

2 curtidas

Não sei muito bem como o Discourse funciona. Sou apenas mais um webmaster que copia e cola do mundo PHP, mas ainda me pergunto por que seria necessário declarar o mesmo CDN duas vezes.

Eu não uso DISCOURSE_CDN_URL porque tenho DISCOURSE_S3_CDN_URL (e provavelmente nenhuma documentação que li me guiou para usá-lo). Então eu tentei.

Adicionei DISCOURSE_CDN_URL: <cdn-url>. A reconstrução não deu erros, mas recebi um erro 502. Quando o removi, meu fórum voltou a funcionar.

Ainda assim, seus problemas podem ocorrer devido a alguma má configuração em outro lugar. Mas eu gosto de soluções fáceis, mesmo quando estou errado, e culpo a situação quando você informa o CDN duas vezes para necessidades diferentes. Ou algo assim.

2 curtidas

DISCOURSE_CDN_URL e DISCOURSE_S3_CDN_URL são diferentes. Enquanto DISCOURSE_CDN_URL aponta para o seu fórum, DISCOURSE_S3_CDN_URL aponta para o URL do seu armazenamento S3.

A ideia é que DISCOURSE_CDN_URL sirva assets que podem ser puxados (pullable) como CSS, enquanto DISCOURSE_S3_CDN_URL sirva assets que podem ser enviados (pushable) como JS, imagens e uploads de usuários.

Consegui fazer tudo funcionar, exceto o meu CDN de armazenamento S3. Sempre que habilito essa parte no arquivo app.yml, meu fórum exibe uma página em branco.

Uma olhada na rede do inspetor de elementos do navegador mostra que os assets entregues por DISCOURSE_S3_CDN_URL estão apresentando erro 404.

É aqui que estou travado! Não tenho certeza por que o CDN S3 não consegue entregar os assets.

4 curtidas

Obrigado pela explicação paciente!

Isso é bastante… incomum para mim. Mas como eu disse, tenho experiência muito limitada. Estou usando a AWS como CDN através de S3/CloudFlare no WordPress, mas apenas para arquivos estáticos — scripts precisariam de outra configuração. Acho que não adianta comparar WP e Discourse porque são plataformas fundamentalmente tão diferentes. Mas estou tentando entender os princípios do conceito aqui.

Bem, eu entendi muito mais agora do que você :smile:

EDIT: E eu estava totalmente errado na minha configuração também :flushed: Todos os JS, imagens, etc. são servidos via CDN. Mas eu não consegui encontrar CSS lá.

1 curtida

Sim, eles estão. Mas obrigado pela atualização.

1 curtida

Olá @Jagster, eu realmente agradecerei sua ajuda.

O problema que estou tendo agora é que meu site está tentando carregar ativos .gz.js do CDN de Object Storage, mas os arquivos não estão lá. Como faço para forçar o Discourse a carregar esses ativos .gz.js para o Object Storage?

1 curtida

É isso que esta parte do guia faz:

1 curtida

Eu já tenho essa linha no meu app.yml. Coloquei o código acima depois de definir os plugins. Ou devo movê-los para cima das listas de plugins?

1 curtida

Isso está errado. A chave YAML after_assets_precompile deve estar sob a chave hooks.

Por padrão, enviamos como:

## Plugins vão aqui
## veja https://meta.discourse.org/t/19157 para detalhes
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

e você quer

## Plugins vão aqui
## veja https://meta.discourse.org/t/19157 para detalhes
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
  after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets
1 curtida

Muito obrigado, @Falco. Vou movê-los agora e tentar novamente.

2 curtidas

Mas e os outros plugins? Posso listá-los abaixo?

  • sudo -E -u discourse bundle exec rake s3:upload_assets?
1 curtida

Não.

Ficará assim:

## Plugins vão aqui
## veja https://meta.discourse.org/t/19157 para detalhes
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/docker_manager.git
  after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets

YAML é uma estrutura de dados em árvore e a indentação com espaços em branco define a estrutura.

3 curtidas

Com a orientação que você (@Falco) e @pfaffman forneceram, acabei de concluir esta configuração com sucesso.

Para outros membros da comunidade que desejam ver minhas configurações. Aqui estão as capturas de tela. Também escrevi um guia completo enquanto configurava tudo isso.

Usei StackPath e DigitalOcean Spaces. Meu guia inclui um passo a passo de toda a configuração. Se alguém precisar deste guia, terei prazer em postar o URL quando solicitado.

2 curtidas

@Falco e @pfaffman, muito obrigado a ambos pela ajuda. Esta é a minha primeira vez configurando o Discourse, mas acabei de concluir as partes mais difíceis (acho!). Sou muito grato!

3 curtidas