Problemas com backups multissite no S3--backups armazenados na raiz

Tenho uma instância multissite em uma AWS EC2. Tenho backups configurados da seguinte forma:

DISCOURSE_S3_BACKUP_BUCKET: lc-sitename
DISCOURSE_S3_SECRET_ACCESS_KEY: secret-key
DISCOURSE_S3_ACCESS_KEY_ID: key-id
DISCOURSE_BACKUP_LOCATION: s3

Os backups para as instâncias multissite estão sendo armazenados na raiz do bucket, mas não aparecem na lista na interface do usuário. Os backups para o site principal são armazenados em default, como esperado. Isso significa que os backups estão invisíveis para restauração e não são podados de acordo com as configurações.

A seção multissite se parece com isto:

        site:
           adapter: postgresql
           database: site
           pool: 25
           timeout: 5000
           host: data
           password: secret
           host_names:
             - community.site.org

Pode ser que, se DISCOURE_USE_S3 não estiver definido, os backups acabem no lugar errado? (Tentei definir use_s3 no discourse.conf, mas não reiniciei o unicorn, em vez disso, executei um backup pela linha de comando e ele ainda o colocou na raiz, não no nome do sub-site).

Houve algum problema com uploads no S3 (configuração incorreta do bucket, talvez), então o S3 é apenas para backups.

1 curtida

Passei mais uma hora e meia nisso.

Um dos sites multisite está colocando corretamente seus uploads backups no diretório correto, mas dois não estão.

Os que não estão indo para o lugar certo tiveram bancos de dados restaurados de uma instância de site único, então minha suposição é que há algo no banco de dados que está forçando o backup a ir para a raiz da pasta de backup em vez do nome do site (ou o padrão para o site padrão).

@gerhard desculpe incomodar, mas você se importaria de dar uma olhada rápida para ver se há algo ridiculamente óbvio que estou ignorando?

Sim, o armazenamento de uploads é por design, se um backup era de uma instância de site único, ele é restaurado de forma diferente.

      was_multisite = BackupMetadata.value_for("multisite") == "t"
      upload_path = "/#{Discourse.store.upload_path}/"
      uploads_folder = was_multisite ? "/" : upload_path

Mas isso não era sobre onde os backups foram colocados, e sim sobre onde as imagens são restauradas?

1 curtida

Sim.

Está certo.

Mas, ops:

Como eu disse (corretamente) antes, esta instância está (atualmente?) usando S3 apenas para backups e não para uploads.

São os backups de 2 de 3 sub-sites que estão sendo colocados na raiz do bucket de backup. O site principal os está enviando para default, como esperado, e um dos instances multisite está enviando-os para o diretório sitename.

1 curtida

Hmm, esse é um comportamento estranho. Você quer dizer backups que são carregados do navegador ou backups criados pelo sistema?

Não vejo motivo para backups criados pelo sistema acabarem no lugar errado. O código parece bem direto.

s3_helper é configurado com o bucket e o nome do multisite corretos.

Quero dizer que fazer um backup da interface web ou da tarefa rake para dois dos 3 hosts multissite (que foram ambos migrados de outro servidor) carrega o backup para a raiz do bucket s3 de backup em vez de para sitename/backupname.

Parece bizarro para mim também.

Vou tentar adicionar alguns puts a essas funções para ver se consigo rastreá-lo.

Acho que eu fiz puts do source_path e ele tinha o caminho completo correto no SO, mas quando é carregado para o S3, o nome do site não está mais no caminho.

Vou olhar mais atentamente novamente na próxima semana. Os backups estão lá, eles apenas não estão onde o Discourse os encontrará.