Erro ao enviar backup para B2

Estou com problemas para fazer backup da minha instância do Discourse, a instância está configurada para fazer upload para o B2 do Backblaze.

Log de erro:

Making sure archive does not already exist...
Creating empty archive...
Archiving data dump...
Archiving uploads...
Skipping uploads stored on S3.
Removing tmp '/var/www/discourse/tmp/backups/default/2026-01-16-151337' directory...
Gzipping archive, this may take a while...
Uploading archive...
EXCEPTION: failed to abort multipart upload: SSL_read: unexpected eof while reading. Multipart upload failed: Checksum Type mismatch occurred, expected checksum type: CRC32, actual checksum type: null; Checksum Type mismatch occurred, expected checksum type: CRC32, actual checksum type: null; Checksum Type mismatch occurred, expected checksum type: CRC32, actual checksum type: null; Checksum Type mismatch occurred, expected checksum type: CRC32, actual checksum type: null; Checksum Type mismatch occurred, expected checksum type: CRC32, actual checksum type: null; Checksum Type mismatch occurred, expected checksum type: CRC32, actual checksum type: null; Checksum Type mismatch occurred, expected checksum type: CRC32, actual checksum type: null; Checksum Type mismatch occurred, expected checksum type: CRC32, actual checksum type: null; Checksum Type mismatch occurred, expected checksum type: CRC32, actual checksum type: null; Checksum Type mismatch occurred, expected checksum type: CRC32, actual checksum type: null
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/multipart_file_uploader.rb:103:in `rescue in abort_upload'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/multipart_file_uploader.rb:90:in `abort_upload'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/multipart_file_uploader.rb:86:in `upload_parts'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/multipart_file_uploader.rb:59:in `upload'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/file_uploader.rb:42:in `block in upload'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/user_agent.rb:90:in `metric'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/file_uploader.rb:40:in `upload'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/customizations/object.rb:477:in `block in upload_file'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/user_agent.rb:90:in `metric'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/customizations/object.rb:476:in `upload_file'
/var/www/discourse/lib/backup_restore/s3_backup_store.rb:48:in `upload_file'
/var/www/discourse/lib/backup_restore/backuper.rb:351:in `upload_archive'
/var/www/discourse/lib/backup_restore/backuper.rb:41:in `run'
script/discourse:115:in `backup'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.4.0/lib/thor/command.rb:28:in `run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.4.0/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.4.0/lib/thor.rb:538:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.4.0/lib/thor/base.rb:584:in `start'
script/discourse:397:in `\u003ctop (required)\u003e'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:59:in `load'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:59:in `kernel_load'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:23:in `run'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli.rb:452:in `exec'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/command.rb:28:in `run'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor.rb:538:in `dispatch'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli.rb:35:in `dispatch'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/base.rb:584:in `start'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli.rb:29:in `start'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/exe/bundle:28:in `block in \u003ctop (required)\u003e'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/exe/bundle:20:in `\u003ctop (required)\u003e'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `\u003cmain\u003e'
Deleting old backups...
Cleaning stuff up...
Removing archive from local storage...
Removing '.tar' leftovers...
Marking backup as finished...
Notifying 'system' of the end of the backup...
Finished!
[FAILED]

",“target_locale”:“pt_BR”}

Isto funcionou anteriormente?

Sim, funcionou até meados de dezembro.

Presumindo que parou de funcionar após uma atualização, você sabe a versão em que estava funcionando (saber o nome do arquivo do último backup bem-sucedido ajudaria) e a versão em que você está agora?

Vou tentar encontrar os arquivos antigos, eu estava fazendo uma limpeza e apaguei antes de verificar :man_facepalming:t2:.

Eu sei que este v20251209012613 já estava falhando. Tentarei recuperar os arquivos mais antigos para ver quando parou de funcionar.

Acabei de fazer o backblaze funcionar em uma instalação nova, e pelo que parece você está em uma versão mais antiga do Discourse - a versão do ruby na sua stacktrace é 3.3.0 e na minha é 3.4.0. Não sei se faria diferença, já que as versões das gems aws-sdk-core e aws-sdk-s3 parecem ser as mesmas, mas achei que valia a pena mencionar.

Tentei novamente e obtive o mesmo erro.

Configuração:

  AWS_REQUEST_CHECKSUM_CALCULATION: WHEN_REQUIRED
  AWS_RESPONSE_CHECKSUM_VALIDATION: WHEN_REQUIRED
  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: "us-west-004"
  DISCOURSE_S3_INSTALL_CORS_RULE: false
  DISCOURSE_S3_CONFIGURE_TOMBSTONE_POLICY: false
  DISCOURSE_S3_ENDPOINT: 'https://s3.us-west-004.backblazeb2.com'
  DISCOURSE_S3_ACCESS_KEY_ID: '******'
  DISCOURSE_S3_SECRET_ACCESS_KEY: '******'
  DISCOURSE_S3_CDN_URL: 'https://******3.c******a.com'
  DISCOURSE_S3_BUCKET: c******a
  DISCOURSE_S3_BACKUP_BUCKET: 'c******a/backup'
  DISCOURSE_S3_UPLOAD_BUCKET: 'c******a'
  DISCOURSE_BACKUP_LOCATION: s3

Stacktrace:

Gzipping archive, this may take a while...
Uploading archive...
EXCEPTION: failed to abort multipart upload: SSL_read: unexpected eof while reading. Multipart upload failed: Checksum Type mismatch occurred, expected checksum type: CRC32, actual checksum type: null; Checksum Type mismatch occurred, expected checksum type: CRC32, actual checksum type: null; Checksum Type mismatch occurred, expected checksum type: CRC32, actual checksum type: null; Checksum Type mismatch occurred, expected checksum type: CRC32, actual checksum type: null; Checksum Type mismatch occurred, expected checksum type: CRC32, actual checksum type: null; Checksum Type mismatch occurred, expected checksum type: CRC32, actual checksum type: null; Checksum Type mismatch occurred, expected checksum type: CRC32, actual checksum type: null; Checksum Type mismatch occurred, expected checksum type: CRC32, actual checksum type: null; Checksum Type mismatch occurred, expected checksum type: CRC32, actual checksum type: null; Checksum Type mismatch occurred, expected checksum type: CRC32, actual checksum type: null
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/multipart_file_uploader.rb:103:in 'Aws::S3::MultipartFileUploader#abort_upload'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/multipart_file_uploader.rb:86:in 'Aws::S3::MultipartFileUploader#upload_parts'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/multipart_file_uploader.rb:59:in 'Aws::S3::MultipartFileUploader#upload'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/file_uploader.rb:42:in 'block in Aws::S3::FileUploader#upload'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/user_agent.rb:90:in 'Aws::Plugins::UserAgent.metric'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/file_uploader.rb:40:in 'Aws::S3::FileUploader#upload'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/customizations/object.rb:477:in 'block in Aws::S3::Object#upload_file'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/user_agent.rb:90:in 'Aws::Plugins::UserAgent.metric'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/customizations/object.rb:476:in 'Aws::S3::Object#upload_file'
/var/www/discourse/lib/backup_restore/s3_backup_store.rb:48:in 'BackupRestore::S3BackupStore#upload_file'
/var/www/discourse/lib/backup_restore/creator.rb:434:in 'BackupRestore::Creator#upload_archive'
/var/www/discourse/lib/backup_restore/creator.rb:41:in 'BackupRestore::Creator#run'
script/discourse:115:in 'DiscourseCLI#backup'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/thor-1.4.0/lib/thor/command.rb:28:in 'Thor::Command#run'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/thor-1.4.0/lib/thor/invocation.rb:127:in 'Thor::Invocation#invoke_command'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/thor-1.4.0/lib/thor.rb:538:in 'Thor.dispatch'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/thor-1.4.0/lib/thor/base.rb:584:in 'Thor::Base::ClassMethods#start'
script/discourse:397:in 'top (required)'
/usr/local/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:59:in 'Kernel.load'
/usr/local/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:59:in 'Bundler::CLI::Exec#kernel_load'
/usr/local/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:23:in 'Bundler::CLI::Exec#run'
/usr/local/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/cli.rb:452:in 'Bundler::CLI#exec'
/usr/local/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/command.rb:28:in 'Bundler::Thor::Command#run'
/usr/local/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in 'Bundler::Thor::Invocation#invoke_command'
/usr/local/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor.rb:538:in 'Bundler::Thor.dispatch'
/usr/local/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/cli.rb:35:in 'Bundler::CLI.dispatch'
/usr/local/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/base.rb:584:in 'Bundler::Thor::Base::ClassMethods#start'
/usr/local/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/cli.rb:29:in 'Bundler::CLI.start'
/usr/local/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/exe/bundle:28:in 'block in <top (required)>'
/usr/local/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/lib/bundler/friendly_errors.rb:117:in 'Bundler.with_friendly_errors'
/usr/local/lib/ruby/gems/3.4.0/gems/bundler-2.6.4/exe/bundle:20:in '<top (required)>'
/usr/local/bin/bundle:25:in 'Kernel#load'
/usr/local/bin/bundle:25:in '<main>'
Deleting old backups...
Cleaning stuff up...
Removing archive from local storage...
Removing '.tar' leftovers...
Marking backup as finished...
Notifying 'system' of the end of the backup...
Finished!
[FAILED]