Configurando o Amazon S3 da AWS para armazenamento e o Cloudfront para CDNs

,

Primeiros Passos

Você precisará de:

  1. Uma instância do Discourse com acesso ao app.yml
  2. Conta na AWS

Estratégia de Nomenclatura

Existem muitos lugares onde é possível cometer erros. Utilizar uma estratégia de convenção de nomenclatura que faça sentido para você e, talvez, para outros, ajudará na solução de problemas, especialmente se você estiver configurando múltiplas instâncias do Discourse.

  • Usuário IAM: your-iam-user
  • Política: s3-discourse-policy-your-iam-user
  • Bucket de backups: yourdomain-subdomain-backups
  • Bucket de uploads: yourdomain-subdomain-uploads
  • Distribuições de CDNs: cdn-yourdomain-subdomain e s3-yourdomain-subdomain-uploads

Opcional: Bucket do processo de configuração: a-origin-config-bucket

Configuração da AWS

Utilize as configurações padrão nas páginas de configuração da AWS, a menos que instruído a fazer o contrário.

Nomes, nomes, nomes do S3

  • Domínio da instância do Discourse: subdomain.yourdomain.tld (subdomain.yourdomain.tld incluindo www.yourdomain.tld)
  • Usuário IAM: yourdomain-subdomain (yourdomain-discourse, yourdomain-forum ou Discourse no ápice/raiz: yourdomain-tld-www)
  • Política para usuário IAM: s3-discourse-policy-yourdomain-subdomain
  • Bucket de uploads: yourdomain-subdomain-uploads Nota: Não se esqueça de definir “Todos (acesso público)” para “Leitura” em Bucket > Permissões: Lista de controle de acesso (ACL) - Lista de controle de acesso (ACL) - Concedente.
  • Bucket de backups: yourdomain-subdomain-backups
  • Distribuições de CDNs: cdn-yourdomain-subdomain e s3-yourdomain-subdomain-uploads
  • Bucket do processo de configuração: a-origin-config-bucket

Usuários IAM

  1. Vá para IAM > Usuários > Selecione “Criar usuário
  2. IAM > Usuários > Criar usuário > Especificar detalhes do usuário > Detalhes do usuário > Nome do usuário > Insira o nome, ex: your-iam-user > Selecione “Próximo”
  3. IAM > Usuários > Criar usuário > Definir permissões > Opções de permissões > Selecione “Anexar políticas diretamente” > Selecione “Criar política” > Abre a página Criar política (Alternativamente, a política pode ser criada primeiro em Políticas e depois selecionada ao criar o usuário em “Políticas de permissão”.)
  4. IAM > Usuários > Criar usuário > Definir permissões > Políticas de permissão > Filtrar por seletor suspenso de Tipo > Selecione “Gerenciada pelo cliente” > Selecione a política recém-criada > Selecione “Próximo” > Selecione “Criar usuário”
  5. IAM > Usuários > your-iam-user > Credenciais de segurança > Chaves de acesso > Selecione “Criar chave de acesso”
  6. IAM > Usuários > your-iam-user > Criar chave de acesso > Melhores práticas e alternativas de chave de acesso > Selecione “Outro” > Selecione “Próximo”
  7. IAM > Usuários > your-iam-user > Criar chave de acesso > Definir tag de descrição > Selecione “Criar chave de acesso”
  8. IAM > Usuários > your-iam-user > Criar chave de acesso > Recuperar chaves de acesso > Salve com segurança a Chave de acesso e a Chave de acesso secreta para uso no app.yml do Discourse > Selecione “Concluído”

Políticas

  1. Modifique s3-discourse-policy-your-iam-user.txt com seu nome de usuário IAM e nomes de buckets.
  2. Vá para IAM > Políticas > Criar política
  3. IAM > Políticas > Criar política > Especificar permissões > Editor de políticas > Selecione “JSON” no editor de políticas > Copie a política de s3-discourse-policy-your-iam-user.txt e cole no editor JSON substituindo o JSON existente > Selecione “Próximo”
  4. IAM > Políticas > Criar política > Revisar e criar > Detalhes da política > Nome da política > Insira o nome da política, ex: s3-discourse-policy-your-iam-user > Selecione “Próximo”
  5. Vá para Usuários IAM: 4. IAM > Usuários > Criar usuário para continuar o processo de criação do usuário

Buckets Amazon S3

Crie e configure o bucket de backups, o bucket de uploads e o bucket do processo de configuração, opcional mas útil.

Criar o bucket de backups yourdomain-subdomain-backups

  1. Vá para Amazon S3 Buckets > Selecione “Criar bucket
  2. Amazon S3 > Buckets > Criar bucket > Configuração geral > Confirme a seleção “Uso Geral”
  3. Amazon S3 > Buckets > Criar bucket > Configuração geral > Nome do bucket > Insira o nome do bucket de backups, ex: yourdomain-subdomain-backups
  4. Amazon S3 > Buckets > Criar bucket > Configuração geral > Confirme a seleção “ACLs desativadas (recomendado)”
  5. Amazon S3 > Buckets > Criar bucket > Configurações de bloqueio de acesso público para este bucket > Desmarque “Bloquear todo acesso público” e depois marque “Bloquear acesso público a buckets e objetos concedidos por meio de novas políticas de bucket público ou ponto de acesso” e “Bloquear acesso público e entre contas a buckets e objetos por meio de qualquer política de bucket público ou ponto de acesso”
  6. Amazon S3 > Buckets > Criar bucket > Configurações de bloqueio de acesso público para este bucket > Desativar o bloqueio de todo acesso público pode resultar neste bucket e nos objetos dentro dele se tornando públicos > Selecione “Eu reconheço que as configurações atuais podem resultar neste bucket e nos objetos dentro dele se tornando públicos.”
  7. Amazon S3 > Buckets > Criar bucket > Versionamento de bucket > Versionamento de bucket > Selecione “Ativar” Info: O Versionamento de bucket é necessário para “Regras de ciclo de vida”
  8. Amazon S3 > Buckets > Criar bucket > Selecione “Criar bucket”

Configuração de regras de ciclo de vida

Regra de Retenção de Backup

  1. Amazon S3 > Buckets > Selecione o bucket recém-criado, ex: yourdomain-subdomain-backups
  2. Amazon S3 > Buckets > yourdomain-subdomain-backups > Gerenciamento > Configuração de ciclo de vida > Selecione “Criar regra de ciclo de vida”
  3. Amazon S3 > Buckets > yourdomain-subdomain-backups > Gerenciamento > Configuração de ciclo de vida > Nome da regra de ciclo de vida > Insira o nome da regra, ex: retenção de backup
  4. Amazon S3 > Buckets > yourdomain-subdomain-backups > Gerenciamento > Configuração de ciclo de vida > Escolher escopo da regra > Selecione “Aplicar a todos os objetos no bucket”
  5. Amazon S3 > Buckets > yourdomain-subdomain-backups > Gerenciamento > Configuração de ciclo de vida > Escolher escopo da regra > Aplicar a todos os objetos no bucket > Selecione “Eu reconheço que esta regra se aplicará a todos os objetos no bucket.”
  6. Amazon S3 > Buckets > yourdomain-subdomain-backups > Gerenciamento > Configuração de ciclo de vida > Ações da regra de ciclo de vida > Selecione “Transicionar versões não atuais de objetos entre classes de armazenamento”, “Expirar versões atuais de objetos” e “Excluir permanentemente versões não atuais de objetos”
  7. Amazon S3 > Buckets > yourdomain-subdomain-backups > Gerenciamento > Configuração de ciclo de vida > Ações da regra de ciclo de vida > Transições são cobradas por solicitação > Selecione “Eu reconheço que esta regra de ciclo de vida incorrerá em um custo de transição por solicitação.”
  8. Amazon S3 > Buckets > yourdomain-subdomain-backups > Gerenciamento > Configuração de ciclo de vida > Transicionar versões não atuais de objetos entre classes de armazenamento > Escolher transições de classe de armazenamento > Selecione “Glacier Instant Retrieval”
  9. Amazon S3 > Buckets > yourdomain-subdomain-backups > Gerenciamento > Configuração de ciclo de vida > Transicionar versões não atuais de objetos entre classes de armazenamento > Dias após os objetos se tornarem não atuais > Insira “1”
  10. Amazon S3 > Buckets > yourdomain-subdomain-backups > Gerenciamento > Configuração de ciclo de vida > Expirar versões atuais de objetos > Dias após a criação do objeto > Insira “7” ou 15 ou 30 ou ???
  11. Amazon S3 > Buckets > yourdomain-subdomain-backups > Gerenciamento > Configuração de ciclo de vida > Excluir permanentemente versões não atuais de objetos > Dias após os objetos se tornarem não atuais > Insira “91”
  12. Amazon S3 > Buckets > yourdomain-subdomain-backups > Gerenciamento > Configuração de ciclo de vida > Confirme que “Revisar ações de transição e expiração” está correto > Selecione “Criar regra”

Regra de Limpeza

  1. Amazon S3 > Buckets > yourdomain-subdomain-backups > Gerenciamento > Configuração de ciclo de vida > Selecione “Criar regra de ciclo de vida”
  2. Amazon S3 > Buckets > yourdomain-subdomain-backups > Gerenciamento > Configuração de ciclo de vida > Nome da regra de ciclo de vida > Insira o nome da regra: limpeza
  3. Amazon S3 > Buckets > yourdomain-subdomain-backups > Gerenciamento > Configuração de ciclo de vida > Escolher escopo da regra > Selecione “Aplicar a todos os objetos no bucket”
  4. Amazon S3 > Buckets > yourdomain-subdomain-backups > Gerenciamento > Configuração de ciclo de vida > Escolher escopo da regra > Aplicar a todos os objetos no bucket > Selecione “Eu reconheço que esta regra se aplicará a todos os objetos no bucket.”
  5. Amazon S3 > Buckets > yourdomain-subdomain-backups > Gerenciamento > Configuração de ciclo de vida > Ações da regra de ciclo de vida > Selecione “Excluir permanentemente versões não atuais de objetos” e “Excluir marcadores de exclusão de objetos expirados ou uploads multipart incompletos”
  6. Amazon S3 > Buckets > yourdomain-subdomain-backups > Gerenciamento > Configuração de ciclo de vida > Excluir permanentemente versões não atuais de objetos > Dias após os objetos se tornarem não atuais > Insira “92”
  7. Amazon S3 > Buckets > yourdomain-subdomain-backups > Gerenciamento > Configuração de ciclo de vida > Excluir permanentemente versões não atuais de objetos > Excluir marcadores de exclusão de objetos expirados ou uploads multipart incompletos > Marcadores de exclusão de objetos expirados > Selecione “Excluir marcadores de exclusão de objetos expirados”
  8. Amazon S3 > Buckets > yourdomain-subdomain-backups > Gerenciamento > Configuração de ciclo de vida > Excluir permanentemente versões não atuais de objetos > Excluir marcadores de exclusão de objetos expirados ou uploads multipart incompletos > Uploads multipart incompletos > Selecione “Excluir uploads multipart incompletos”
  9. Amazon S3 > Buckets > yourdomain-subdomain-backups > Gerenciamento > Configuração de ciclo de vida > Excluir permanentemente versões não atuais de objetos > Excluir marcadores de exclusão de objetos expirados ou uploads multipart incompletos > Uploads multipart incompletos > Excluir uploads multipart incompletos > Número de dias > Insira “3” ou ???
  10. Amazon S3 > Buckets > yourdomain-subdomain-backups > Gerenciamento > Configuração de ciclo de vida > Confirme que “Revisar ações de transição e expiração” está correto > Selecione “Criar regra”

Criar o bucket de uploads yourdomain-subdomain-uploads

  1. Vá para Amazon S3 > Buckets > Selecione “Criar bucket
  2. Amazon S3 > Buckets > Criar bucket > Configuração geral > Confirme a seleção “Uso Geral”
  3. Amazon S3 > Buckets > Criar bucket > Configuração geral > Nome do bucket > Insira o nome do bucket de uploads, ex: yourdomain-subdomain-uploads
  4. Amazon S3 > Buckets > Criar bucket > Configuração geral Selecione “ACLs ativadas”
  5. Amazon S3 > Buckets > Criar bucket > Configurações de bloqueio de acesso público para este bucket > Desmarque “Bloquear todo acesso público” e depois marque “Bloquear acesso público a buckets e objetos concedidos por meio de novas políticas de bucket público ou ponto de acesso” e “Bloquear acesso público e entre contas a buckets e objetos por meio de qualquer política de bucket público ou ponto de acesso”
  6. Amazon S3 > Buckets > Criar bucket > Configurações de bloqueio de acesso público para este bucket > Desativar o bloqueio de todo acesso público pode resultar neste bucket e nos objetos dentro dele se tornando públicos > Selecione “Eu reconheço que as configurações atuais podem resultar neste bucket e nos objetos dentro dele se tornando públicos.”
  7. Amazon S3 > Buckets > Criar bucket > Selecione “Criar bucket”
  8. Amazon S3 > Buckets > Tela de Buckets > Selecione o bucket recém-criado, ex: yourdomain-subdomain-uploads
    Volte para fazer o passo 9 após criar a Distribuição #2
  9. Amazon S3 > Buckets > yourdomain-subdomain-uploads > Permissões > Política do bucket > Selecione Editar > Cole o JSON de Criar distribuição #2 11. CloudFront > Distribuições > ID da distribuição > Editar origem > Controle de acesso à origem > Selecione “Salvar alterações”
  10. Amazon S3 > Buckets > yourdomain-subdomain-uploads > Permissões > Lista de controle de acesso (ACL) > Selecione Editar > Todos (acesso público) > Selecione “Leitura” > Ao conceder acesso ao grupo Todos ou usuários autenticados, qualquer pessoa no mundo pode acessar os objetos neste bucket. Selecione “Eu entendo os efeitos dessas alterações nos meus objetos e buckets.” > Selecione “Salvar alterações”

Criar um bucket do processo de configuração a-origin-config-bucket
Crie um bucket para ser usado durante o processo de configuração da Distribuição #1. O nome e a configuração não são importantes, pois o bucket é usado apenas temporariamente como uma origem inicial que será excluída durante o processo de configuração.
1. Vá para Amazon S3 > Buckets > Selecione “Criar bucket
2. Amazon S3 > Buckets > Criar bucket > Configuração geral > Confirme a seleção “Uso Geral”
3. Amazon S3 > Buckets > Criar bucket > Configuração geral > Nome do bucket > Insira o nome do bucket de uploads, ex: a-origin-config-bucket
4. Navegue pelas páginas de configuração e “Criar bucket”

Distribuições CloudFront

Crie duas distribuições CloudFront da AWS S3. Uma para servir ativos do site e a segunda para servir ativos do bucket de uploads.

Criar distribuição #1

  Distribuição #1
    DISCOURSE_CDN_URL
      Nome da distribuição: cdn-yourdomain-subdomain
      Origem: subdomain.yourdomain.tld
      Nome de domínio da distribuição (URL Cloudfront): AWS-assigned.cloudfront.net
      Nomes de domínio alternativos: discourse-cdn.yourdomain.tld
  1. Vá para CloudFront > Distribuições > Selecione “Criar
  2. CloudFront > Distribuições > Criar distribuição > Escolher um plano > Selecione “Pague conforme o uso” > Selecione “Próximo”
  3. CloudFront > Distribuições > Criar distribuição > Começar > Opções de distribuição > Nome da distribuição > Insira o nome da distribuição, ex: cdn-yourdomain-subdomain
  4. CloudFront > Distribuições > Criar distribuição > Começar > Opções de distribuição > Descrição - opcional > Insira “cdn-yourdomain-subdomain” (Opcional, mas ajuda na visibilidade)
  5. CloudFront > Distribuições > Criar distribuição > Começar > Opções de distribuição > Tipo de distribuição > Confirme a seleção “Site único ou aplicativo” > Selecione “Próximo”
  6. CloudFront > Distribuições > Criar distribuição > Especificar origem > Tipo de origem > Selecione “Outro” Referencie qualquer origem AWS ou não AWS por meio de sua URL publicamente resolvível.
  7. CloudFront > Distribuições > Criar distribuição > Especificar origem > Origem > Origem personalizada > Insira o domínio, ex: subdomain.yourdomain.tld
  8. CloudFront > Distribuições > Criar distribuição > Especificar origem > Configurações > Configurações de cache > Selecione “Personalizar configurações de cache”
  9. CloudFront > Distribuições > Criar distribuição > Especificar origem > Configurações > Configurações de cache > Política de cache > Do menu suspenso, selecione “CachingOptimized” > Selecione “Próximo”
  10. CloudFront > Distribuições > Criar distribuição > Habilitar segurança > faça suas escolhas - para este guia > Selecione “Não habilitar proteções de segurança” > Selecione “Próximo”
  11. CloudFront > Distribuições > Criar distribuição > Revisar e criar > Selecione “Criar distribuição”
    Se estiver usando uma URL de CDN personalizada → Passo 12
  12. CloudFront > Distribuições > ID da distribuição > Nomes de domínio alternativos > Selecione “Adicionar domínio”
  13. CloudFront > Distribuições > ID da distribuição > Nomes de domínio alternativos > Adicionar domínio > Configurar domínios > Domínios > Domínios para servir > Insira o DISCOURSE_CDN_URL, ex: discourse-cdn.yourdomain.tld > Selecione “Próximo”

Incompleto: Nomes de domínio alternativos: discourse-cdn.yourdomain.tld

Criar distribuição #2

  Distribuição #2
    DISCOURSE_S3_CDN_URL
      Nome da distribuição: s3-yourdomain-subdomain-uploads
      Origem: yourdomain-subdomain-uploads
      Nome de domínio da distribuição (URL Cloudfront: AWS-assigned.cloudfront.net
      Nomes de domínio alternativos: s3-cdn.yourdomain.tld
  1. CloudFront > Distribuições > Criar distribuição
  2. CloudFront > Distribuições > Criar distribuição > Escolher um plano > Selecione “Pague conforme o uso” > Selecione “Próximo”
  3. CloudFront > Distribuições > Criar distribuição > Começar > Opções de distribuição > Nome da distribuição > Insira o nome da distribuição, ex: s3-yourdomain-subdomain-uploads
  4. CloudFront > Distribuições > Criar distribuição > Começar > Opções de distribuição > Descrição - opcional > Insira “s3-yourdomain-subdomain-uploads” (Opcional, mas ajuda na visibilidade)
  5. CloudFront > Distribuições > Criar distribuição > Começar > Opções de distribuição > Tipo de distribuição > Confirme a seleção “Site único ou aplicativo” > Selecione “Próximo”
  6. CloudFront > Distribuições > Criar distribuição > Especificar origem > Tipo de origem > Confirme a seleção “Amazon S3”
  7. CloudFront > Distribuições > Criar distribuição > Especificar origem > Origem > Origem S3 > Selecione “Navegar em S3” > Selecione o bucket de uploads “yourdomain-subdomain-uploads” > Selecione “Escolher” > Selecione “Próximo”
  8. CloudFront > Distribuições > Criar distribuição > Habilitar segurança > faça suas escolhas - para este guia > Selecione “Não habilitar proteções de segurança” > Selecione “Próximo”
  9. CloudFront > Distribuições > Criar distribuição > Revisar e criar > Confirme que “Revisar e criar:” está correto > Selecione “Criar distribuição” → A página de informações da distribuição recém-criada deve abrir em CloudFront > Distribuições > ID da distribuição
  10. CloudFront > Distribuições > ID da distribuição > Origens > Selecione a origem > Selecione “Editar”
  11. CloudFront > Distribuições > ID da distribuição > Editar origem > Controle de acesso à origem > ! Você deve permitir o acesso ao CloudFront usando esta política… > Selecione “Copiar política” > Vá para Criar o bucket de uploads 9. Amazon S3 > Buckets > yourdomain-subdomain-uploads > Permissões > Política do bucket

Incompleto: Nomes de domínio alternativos: s3-cdn.yourdomain.tld

Admin do Discourse

Atualizado até a versão do Discourse: 2025.12.0-latest

Faça essas alterações na Interface de Admin do Discourse

Configurações de Backup /admin/backups/settings

  1. Máximo de backups > Insira o número de backups a manter localmente
  2. Backup com uploads > Selecione “Incluir uploads nos backups agendados. Desabilitar isso fará o backup apenas do banco de dados.”

Configurações S3 /admin/site_settings/category/all_results?filter=S3

  1. S3 usar URL de CDN para todos os uploads > Selecione “Usar URL de CDN para todos os arquivos enviados para o s3 em vez de apenas para imagens.” (O Discourse vem desmarcado)

Editar Config (app.yml) URLs Não Personalizadas

Edite o app.yml fazendo as alterações abaixo para URLs personalizadas ou URLs Cloudfront não personalizadas.

Discourse URLs Não Personalizadas

Use isso para distribuições Cloudfront não personalizadas. Seu DISCOURSE_S3_REGION pode ser diferente.
DISCOURSE_CDN_URL: https://amazonassigned.cloudfront.net

Config de armazenamento S3 (não personalizada)

  ## Config de armazenamento S3
  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION:  us-east-1
  DISCOURSE_S3_ACCESS_KEY_ID: chave ofuscada
  DISCOURSE_S3_SECRET_ACCESS_KEY: chave ofuscada
  DISCOURSE_S3_CDN_URL: https://amazonassigned.cloudfront.net
  DISCOURSE_S3_BUCKET: your-bucket-name-uploads
  DISCOURSE_S3_BACKUP_BUCKET: your-bucket-name-backups
  DISCOURSE_BACKUP_LOCATION: s3

Discourse URLs Personalizadas

Configuração DNS

Se preferir usar URLs baseadas em yourdomain.com para os CDNs, você precisará fazer algumas alterações de DNS e ajustar suas URLs de CDN.

Dica: Não se esqueça de adicionar discourse-cdn.yourdomain.com e s3-cdn.yourdomain.com como um nome de domínio em “Nomes de domínio alternativos” para suas respectivas distribuições Cloudfront.

Configuração DNS se você quiser usar distribuições Cloudfront com marca de domínio.

DISCOURSE_CDN_URL

Registro existente:	A   discourseinstance.yourdomain.com   ip da instância  Nota: Este é o IP da instalação existente do Discourse.
Novo registro:		A   discourse-cdn-cloudfront.yourdomain.com   ip da instância
Novo registro: 		CNAME discourse-cdn.yourdomain.com  ->   amazonassigned.cloudfront.net

DISCOURSE_S3_CDN_URL

Novo registro:		CNAME s3-cdn-cloudfront.yourdomain.com  ->   amazonassigned.cloudfront.net
Novo registro: 	CNAME  s3-cdn.yourdomain.com  ->   s3-cdn-cloudfront.yourdomain.com

Editar Config (app.yml) URLs Personalizadas

Uma vez concluídas as alterações de DNS, você pode editar seu app.yml fazendo as alterações abaixo.

Altere DISCOURSE_CDN_URL e/ou DISCOURSE_S3_CDN_URL se estiver usando CNAMES de domínio para a distribuição Cloudfront (amazonassigned.cloudfront.net).

DISCOURSE_CDN_URL: https://discourse-cdn.yourdomain.com

Config de armazenamento S3 (personalizada)

## Config de armazenamento S3
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION:  us-east-1
DISCOURSE_S3_ACCESS_KEY_ID: chave ofuscada
DISCOURSE_S3_SECRET_ACCESS_KEY: chave ofuscada
DISCOURSE_S3_CDN_URL: https://s3-cdn.yourdomain.com
DISCOURSE_S3_BUCKET: your-bucket-name-uploads
DISCOURSE_S3_BACKUP_BUCKET: your-bucket-name-backups
DISCOURSE_BACKUP_LOCATION: s3

Edições Adicionais de Config (app.yml)

Independentemente da abordagem que você usar, URLs personalizadas ou Cloudfront, você precisará da seção after_assets_precompile abaixo para garantir que as coisas permaneçam atualizadas durante reconstruções subsequentes.

  hooks:
    after_code:
      - exec:
          cd: $home/plugins
          cmd:
            - git clone https://github.com/discourse/docker_manager.git
            -você pode ter mais plugins
    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

Reconstrua sua instância com ./launcher rebuild app

Após ./launcher rebuild app ser concluído com sucesso, execute esses rakes.

./launcher enter app

rake posts:rebake
rake uploads:migrate_to_s3
rake posts:rebake_uncooked_posts

rake s3:upload_assets
rake s3:expire_missing_assets

Se os rakes forem concluídos sem erros, então você está pronto para prosseguir.

Em alguns sites, a reconstrução inicial falhará com um erro relacionado a s3:upload_assets. Se isso acontecer,

verifique a configuração de “leitura” no bucket de uploads. Se estiver corretamente configurado, então,

comente ou remova a seção after_assets_precompile:

  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

e execute ./launcher rebuild app novamente. Em seguida, execute “rake s3:upload_assets” e “rake s3:expire_missing_assets”.

Se ambos os rakes forem concluídos sem erros, re-adicione ou descomente a seção after_assets_precompile, reconstrua novamente e execute todos os rakes listados acima.

Se qualquer um dos rakes der um erro ou a reconstrução falhar novamente, há algo errado no seu app.yml e/ou configurações da AWS S3 e/ou registros DNS. Boa caçada! :slight_smile:

s3-discourse-policy-your-iam-user.txt (697 Bytes)

1 curtida

Resposta do Suporte da AWS sobre: Confirmação da abordagem na regra de Limpeza

Analisei a configuração proposta da sua regra de Ciclo de Vida e tenho o prazer de confirmar que sua configuração está bem elaborada e segue as melhores práticas da AWS para gerenciamento de buckets de backup.

========== Avaliação da Regra de Ciclo de Vida ==========

Sua configuração é excelente e aborda as áreas chave para a limpeza de backups:

• Limpeza de Versões Não Atuais (92 dias): Este é um período de retenção sensato que equilibra os custos de armazenamento com as necessidades de recuperação. A retenção de 92 dias oferece tempo suficiente para validação do backup, ao mesmo tempo que evita o acúmulo indefinido de armazenamento.

• Remoção de Marcadores de Exclusão Expirados: Configurado corretamente para limpar automaticamente marcadores de exclusão órfãos, o que ajuda a otimizar os custos de armazenamento e o desempenho do bucket.

• Limpeza de Uploads Multipart Não Concluídos (3 dias): A configuração de 3 dias é ideal — curta o suficiente para evitar desperdício de armazenamento de uploads com falha, mas longa o suficiente para acomodar operações de backup grandes legítimas.

• Aplicação do Escopo: Aplicar a “todos os objetos no bucket” é apropriado para buckets de backup dedicados onde todo o conteúdo segue o mesmo padrão de ciclo de vida.

Resposta do Suporte da AWS sobre: Configuração do ciclo de vida dos buckets de backup

Revisão da Configuração do Ciclo de Vida do S3 para Buckets de Backup

Analisei sua configuração completa do ciclo de vida e posso confirmar que sua regra de “retenção de backup” está bem estruturada e segue as melhores práticas da AWS para gerenciamento de backup.

Principais descobertas da minha investigação:

  • Seu bucket possui duas regras de ciclo de vida complementares que funcionam juntas de forma eficaz
  • A regra de “retenção de backup” lida adequadamente com versões atuais e não atuais com cronogramas apropriados
  • A configuração inclui transições de armazenamento econômicas para versões não atuais
  • Todos os componentes da regra estão configurados corretamente com parâmetros de tempo apropriados
  • O bucket está configurado corretamente em us-east-1 com permissões adequadas

Avaliação da Configuração:

Sua regra de “retenção de backup” gerencia efetivamente seus objetos de backup durante seu ciclo de vida:

  • Transiciona versões não atuais para Glacier Instant Retrieval após 1 dia (otimização de custos)
  • Expira versões atuais após 7 dias (apropriado para backups regulares)
  • Exclui permanentemente versões não atuais após 91 dias (bom período de retenção)

Esta regra complementa sua regra de “limpeza”, que lida com:

  • Remoção de marcadores de exclusão expirados (evita marcadores órfãos)
  • Limpeza de uploads multipart não concluídos após 3 dias (evita desperdício de armazenamento)
  • Exclusão de versões não atuais após 92 dias (garante limpeza completa)

Ambas as regras se aplicam a todos os objetos no bucket, o que é apropriado para armazenamento de backup dedicado onde todo o conteúdo segue o mesmo padrão de ciclo de vida.

A expiração de 7 dias para versões atuais parece apropriada para cenários de backup regulares, mas você pode ajustar isso com base em seus requisitos específicos de retenção (15 ou 30 dias, se for necessária uma retenção mais longa).

Sua implementação está completa e segue as melhores práticas da AWS para gerenciamento de ciclo de vida do S3.


Acontece que existe uma maneira mais eficiente.

CloudFront > Distribuições > Criar distribuição > Especificar origem > Tipo de origem > Selecione “Outro” Refira-se a qualquer origem da AWS ou não-AWS através de sua URL publicamente resolúvel.

CloudFront > Distribuições > Criar distribuição > Especificar origem > Origem > Origem personalizada > Insira o domínio, por exemplo, subdomain.yourdomain.tld

CloudFront > Distribuições > Criar distribuição > Especificar origem > Configurações > Configurações de cache > Selecione “Personalizar configurações de cache”

CloudFront > Distribuições > Criar distribuição > Especificar origem > Configurações > Configurações de cache > Política de cache > No menu suspenso, selecione “CachingOptimized” > Selecione “Próximo”

Continue com as configurações de segurança, ignore as Etapas 10 a 14 originais

CloudFront > Distribuições > Criar distribuição > Revisar e criar > Selecione “Criar distribuição”