Discourse 복구 데이터 마이그레이션 실패

[2026-05-11 02:05:14] 데이터베이스에 다시 연결하는 중...
[2026-05-11 02:05:14] 사이트 설정을 다시 로드하는 중...
[2026-05-11 02:05:14] 스태프가 아닌 사용자의 발신 이메일을 비활성화하는 중...
[2026-05-11 02:05:14] 시드 푸를 실행하는 중...
[2026-05-11 02:05:31] 읽기 전용 모드를 비활성화하는 중...
[2026-05-11 02:05:31] 카테고리 캐시를 정리하는 중...
[2026-05-11 02:05:31] 번역을 다시 로드하는 중...
[2026-05-11 02:05:31] 업로드를 다시 매핑하는 중...
[2026-05-11 02:05:31] 업로드를 복원하는 중. 시간이 좀 걸릴 수 있습니다...
[2026-05-11 02:05:33] 예외: 한 번에 하나의 기본이 아닌 체크섬만 지정할 수 있습니다.
[2026-05-11 02:05:33] /var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-core-3.244.0/lib/seahorse/client/plugins/raise_response_errors.rb:17:in 'Seahorse::Client::Plugins::RaiseResponseErrors::Handler#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/plugins/sse_cpk.rb:24:in 'Aws::S3::Plugins::SseCpk::Handler#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/plugins/dualstack.rb:21:in 'Aws::S3::Plugins::Dualstack::OptionHandler#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/plugins/accelerate.rb:43:in 'Aws::S3::Plugins::Accelerate::OptionHandler#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-core-3.244.0/lib/aws-sdk-core/plugins/checksum_algorithm.rb:167:in 'Aws::Plugins::ChecksumAlgorithm::OptionHandler#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-core-3.244.0/lib/aws-sdk-core/plugins/jsonvalue_converter.rb:16:in 'Aws::Plugins::JsonvalueConverter::Handler#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-core-3.244.0/lib/aws-sdk-core/plugins/invocation_id.rb:16:in 'Aws::Plugins::InvocationId::Handler#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-core-3.244.0/lib/aws-sdk-core/plugins/idempotency_token.rb:19:in 'Aws::Plugins::IdempotencyToken::Handler#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-core-3.244.0/lib/aws-sdk-core/plugins/param_converter.rb:26:in 'Aws::Plugins::ParamConverter::Handler#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-core-3.244.0/lib/seahorse/client/plugins/request_callback.rb:89:in 'Seahorse::Client::Plugins::RequestCallback::OptionHandler#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-core-3.244.0/lib/aws-sdk-core/plugins/response_paging.rb:12:in 'Aws::Plugins::ResponsePaging::Handler#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-core-3.244.0/lib/seahorse/client/plugins/response_target.rb:24:in 'Seahorse::Client::Plugins::ResponseTarget::Handler#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-core-3.244.0/lib/aws-sdk-core/plugins/telemetry.rb:39:in 'block in Aws::Plugins::Telemetry::Handler#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-core-3.244.0/lib/aws-sdk-core/telemetry/no_op.rb:29:in 'Aws::Telemetry::NoOpTracer#in_span'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-core-3.244.0/lib/aws-sdk-core/plugins/telemetry.rb:53:in 'Aws::Plugins::Telemetry::Handler#span_wrapper'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-core-3.244.0/lib/aws-sdk-core/plugins/telemetry.rb:39:in 'Aws::Plugins::Telemetry::Handler#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-core-3.244.0/lib/seahorse/client/request.rb:72:in 'Seahorse::Client::Request#send_request'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/client.rb:17315:in 'Aws::S3::Client#put_object'
/var/www/discourse/lib/file_store/to_s3_migration.rb:216:in 'block (2 levels) in FileStore::ToS3Migration#migrate_to_s3'
[2026-05-11 02:05:33] 롤백을 시도하는 중...
[2026-05-11 02:05:33] 롤백하는 중...
[2026-05-11 02:05:34] 정리를 진행하는 중...
[2026-05-11 02:05:34] discourse_functions 스키마에서 함수를 삭제하는 중...
[2026-05-11 02:05:34] 임시 '/var/www/discourse/tmp/restores/default/2026-05-11-020447' 디렉토리를 삭제하는 중...
[2026-05-11 02:05:34] sidekiq의 일시정지를 해제하는 중...
[2026-05-11 02:05:34] 복원을 완료로 표시하는 중...
[2026-05-11 02:05:34] 'niege'에게 복원 종료 알림을 보내는 중...

이 문제는 어떻게 해결할 수 있나요?

S3 호환성에 문제가 있는 것 같습니다.

복원하려는 인스턴스가 Discourse 최신 버전과 일치합니까?

여기에 문제가 있는 것 같습니다.
/var/www/discourse/lib/file_store/to_s3_migration.rb
216번째 줄에서 put_object로 전송되는 페이로드와 관련이 있을 수 있습니다.

완전한 해결책은 확신이 서지 않지만, 작동하게 하려면 S3를 비활성화(enable_s3_uploads: false)하고 로컬에서 복원 및 추출을 수행한 후, 다시 S3를 활성화하고 rake uploads:migrate_to_s3 명령을 실행해야 할 것 같습니다.

@Lilly
서버 만료로 인해 새 서버로 마이그레이션이 필요합니다. 먼저 Discourse 데이터를 백업했습니다.
app.yml을 새 서버에 동기화한 후, 새 서버에서

./launcher rebuild app

을 실행했습니다.
그런 다음 백업 데이터를 새 서버의 /var/discourse/shared/standalone/backups/default 디렉토리에 업로드하고,

./launcher enter app
discourse enable_restore
discourse restore xxxxxxxxxxxxxxxxxxxxx.tar.gz

명령을 사용했으나 복구가 실패했습니다. 새 Discourse를 다시 구축한 후 백엔드에서 복구를 시도했지만 여전히 실패했습니다. 첨부 파일에 복구 로그가 포함되어 있습니다.
log.txt (124.0 KB)

사용 중인 객체 저장소와 같은 환경에 대해 알려주세요.

Ubuntu 24.04.4 LTS (x86_64)

Cloudflare R2

@supermathie Cloudflare R2를 사용하면 호환되지 않나요?

네, R2와 호환성 문제가 있는 것 같습니다.

테스트는 하지 않았지만, 아래 방법을 시도해 볼 수 있습니다:

환경 변수는 컨테이너의 app.yml 파일에서 env 블록에 설정됩니다. DISCOURSE_S3_ACCESS_KEY_ID와 같은 항목들이 이미 있는 바로 그 자리입니다. 거기에 두 개의 변수를 추가하세요:

env:
  LANG: en_US.UTF-8
  # ... 기존 변수들 ...
  DISCOURSE_S3_BUCKET: your-r2-bucket
  DISCOURSE_S3_ACCESS_KEY_ID: ...
  DISCOURSE_S3_SECRET_ACCESS_KEY: ...
  DISCOURSE_S3_ENDPOINT: https://<account>.r2.cloudflarestorage.com

  # Cloudflare R2의 aws-sdk-s3 체크섬 호환성 문제 수정
  AWS_REQUEST_CHECKSUM_CALCULATION: when_required
  AWS_RESPONSE_CHECKSUM_VALIDATION: when_required

그 후 컨테이너를 다시 빌드하세요:

./launcher rebuild app

@gerhard
이 방법을 시도해 보았지만 여전히 작동하지 않습니다.
현재 문제는 제 서버가 이미 종료된 상태이며, 백업 데이터와 app.yml 파일만 남아 있다는 것입니다.

이러한 값은 가이드에 명시되어 있습니다.

다른 문제가 있는지 확인할 수 있도록 편집된 ENV 블록을 여기에 게시해 주시겠습니까?

지금은 데이터를 복구하는 방법을 찾고 있지만, rake uploads:migrate_to_s3 명령이 계속 오류가 나고 있습니다.

aws-sdk-s3를 하향 업그레이드해 보셨나요: