확인 완료: Images lost when migrating to self-hosting, posts:rebake는 아무런 좋은 결과를 내지 않습니다.
문제
공식 지침을 따라 Lightsail 인스턴스를 생성하고, Discourse UI에서 데이터베이스를 다운로드하여 적용함으로써 80% 정도까지 진행했습니다. 기존 버전은 유지하면서 셀프호스팅 인스턴스로 전환하려는 것이었습니다.
이전 포럼의 라이브 복사본을 확보한 후 이미지 전환을 시작했습니다. 이를 위해 먼저 구독을 취소하고 이미지를 가져와 마이그레이션했습니다.
새 이미지는 셀프호스팅 인스턴스에 업로드되므로, 전환 날짜 이전에 호스팅 인스턴스에서 업로드된 것만 업로드하면 됩니다. 즉, 이미지가 포함된 데이터베이스 덤프는 이미 마이그레이션을 완료했으므로 만료되었기 때문에 사용하지 않았습니다.
이 시점과 관련하여 두 가지 동작을 관찰했습니다.
- 백업(특히 SQL 덤프)에 참조된 리소스는 Discourse 인프라를 가리킵니다.
- 백업 이후에 생성된 참조 리소스, 예를 들어 새 게시물의 이미지는 올바르게 참조되어 우리의 인프라에서 발견됩니다.
결과적으로, 동일한 해시로 평가되는 리소스를 다시 업로드하면 Discourse 인프라에 링크됩니다. 예를 들어, 동일한 파일로 파비콘을 수정하려는 시도는 작동하지 않습니다. 그러나 다른 임의의 이미지를 업로드하면 작동합니다.
현재 상태
제가 이해하기로는, upload://<X>는 b62 디코딩(그리고 sha1?)을 거쳐 폴더 public/uploads에 매핑됩니다. 우리는 이 이미지들을 모두 가지고 있습니다:
Discourse 팀이 제공한 덤프에는
default/original/1X가 포함된 지퍼 파일이 있으며, 현재/var/www/discourse/public/uploads/default/original/1X에서 볼 수 있습니다. 후자의 폴더에는 현재 329개의 항목이 포함되어 있고, 제공된 덤프에는 249개의 항목이 포함되어 있었습니다—이것은 저에게는 좋은 신호입니다.
즉, 폴더에서 업로드를 직접 찾을 수 없더라도 데이터는 발견 가능해야 합니다. 저는 이 관계를 이해하여 매핑을 어떻게든 수정하고자 합니다. 처음에는 단순한 문자열 치환처럼 보였고, 일부 이미지에서는 실제로 그렇게 작동했습니다. 그러나 일부는 이제 이전에 접근할 수 없는 이미지가었던 곳에서 투명한 PNG(transparent.png)로 대체되었습니다.

