포럼 이동 후 S3 에셋이 깨졌습니다

안녕하세요,

방치된 Discourse 포럼을 이전해야 했습니다. 다행히 관리자 계정이 여러 개 있어서 백업 다운로드를 진행할 수 있었습니다. 자산을 S3 버킷에 저장하고 있었는데, 이게 다소 문제가 되었습니다. 여기서 기능 요청을 하나 드리겠습니다:

백업에 S3 자산을 포함할 수 있도록 해 주세요

(포스트를 rebake하기 전이든 후이든 확실하지는 않지만) S3 자산 URL이 내부 URL로 재작성되어 있다는 사실을 발견했습니다. 그래서 데이터베이스 파일에서 모든 original 및 optimized S3 URL을 추출하고 (수동으로) 다운로드했습니다. 올바른 위치에 파일을 옮긴 후, 누락된 모든 이미지가 정상적으로 표시되었습니다. … 이를 위한 자동화 기능이 있다면 좋겠습니다.

현재까지 발견한 버그는 세 가지입니다:

  1. 미리보기 이미지는 깨져있지만, 확대된 이미지는 정상 작동
  1. 미리보기 이미지는 정상 작동하지만, 마우스를 올리면 확대되는 기능이 없음
  • /t/microlongrange-openhd-edition/379 … 첫 게시물에는 링크를 2개만 달 수 있습니다
  1. 그라바타(Gravatar)가 깨져 있음 (무관할 수도 있음):
    -

새 게시물에서는 문제가 발견되지 않았습니다.

훌륭한 프로젝트를 만들어 주셔서 감사합니다.
Limitless Green

이는 버그가 아니라 잘못된 설정으로 보입니다. 복원하기 전에 새 호스트에 동일한 S3 버킷을 설정했나요?

백업을 복원했는데, 여기에는 구성 파일도 포함되어 있었습니다. 이렇게 한 후 (그리고 HTTPS를 강제 적용한 후) S3 버킷에서 이미지를 전혀 가져오지 못했습니다.

이제 S3 구성을 완전히 제거했습니다.

이것이 구성 전체를 덮어쓰는 것인가요?

app.yml에서 이전에는 ENV 변수를 사용하여 구성되었을 경우를 제외하고는 S3 설정도 포함됩니다 …

그 기능을 수행하는 숨겨진 설정이 있습니다. Cdck는 호스팅을 계획하고 있다고 알려진 고객들에게 이 설정을 활성화해 줍니다.

S3 설정은 업로드용 오브젝트 스토리지 사용 (S3 & Clones) 문서에 설명된 대로 환경 변수를 통해 수행하는 것이 가장 좋습니다.

복원 후 s3 upload bucket와 s3 cdn url 설정을 적용했습니다.
(구) 서버의 app.yml 파일에 접근할 수 없습니다.

오, 좋네요! :grinning: 어디에 있나요?
backup 섹션에서 제가 찾은 유일한 적합한 옵션은 다음과 같았습니다:
grafik
(이미 체크되어 있었습니다)

분명하지 않을 수 있지만: 저는 당장 S3를 원하지 않습니다. 그리고 저는 거기서 에셋을 가져와야 했습니다. 이 서버가 얼마나 오래 유지될지 아무도 모릅니다. :sweat_smile:

SSH를 통해 서버에 액세스할 수 없다면 숨김 설정을 변경할 수 없습니다.

좋습니다. 제 경우와 같은 상황에서 지금 무엇을 해야 할까요?
이러한 이미지 미리보기가 깨지는 원인은 무엇일 수 있나요?

아직 늦지 않았다면(즉, 포럼에 트래픽이 발생했고 그 데이터를 잃고 싶지 않다면) 그리고 S3 자격 증명을 가지고 있다면, 아마도 S3 자격 증명을 app.yml에 넣고 복원 과정을 다시 실행할 것입니다. 그 다음에는 숨김 설정을 하고, 백업을 한 후, S3가 없는 서버에 복원하는 것이 가능할 것입니다.

하지만 그런 상황은 아닌 것 같습니다. 당시 정확히 무엇을 했는지 본인이도 정확히 기억하지 못하기 때문에, 정확히 어떤 문제가 있는지 파악하기 어렵습니다.

데이터가 누락된 경우(그리고 S3 자격 증명을 가지고 있다면), S3 도구를 사용하여 업로드된 파일 전체를 다운로드한 다음 데이터베이스를 해킹하여 해당 파일들을 가리키도록 수정하는 방법을 시도해 볼 수 있습니다. 하지만 저는 그 정도 수준이 아니어서 여기서 어떻게 해야 하는지 설명해 드리기 어렵습니다.

아아, 불행히도 S3 자격 증명이 없네요 :frowning:

재현 단계를 알려드릴 수 있습니다:

  1. Traefik 뒤에서 discourse_docker를 사용하여 새로운 Discourse 포럼을 설치했습니다.
  2. 구 포럼의 백업을 수행했습니다 (일부 오래된 에셋 포함).
  3. 새 포럼에 백업을 복원했습니다.
  4. HTTPS를 강제 적용했습니다.
  5. dump.sql (백업)에서 에셋 URL을 추출했습니다.
  • egrep -o 'discuss-openhdfpv.eu-central-1.linodeobjects.com\/original\/1X\/[0-9a-z_]{0,}\.[0-9a-zA-Z]{0,}' ./dump.sql >> original.txt
  • egrep -o 'discuss-openhdfpv.eu-central-1.linodeobjects.com\/optimized\/1X\/[0-9a-z_]{0,}\.[0-9a-zA-Z]{0,}' ./dump.sql >> optimized.txt
  1. 에셋을 다운로드했습니다: cat optimized.txt | parallel --gnu "wget -nc -P ./optimized/1X/ {}" (original도 동일하게 처리).
  2. S3 설정을 제거했습니다.
  3. rake posts:rebake를 실행했습니다.

무엇을 찾아야 하는지 알면 데이터베이스에서 SQL 작업을 수행할 수 있습니다.