저희 그룹은 실제 도메인 이름을 결정할 때까지 2개월 동안 임시 도메인으로 Discourse를 운영해 왔습니다. 어제 저는 기존 도메인에서 새 도메인으로 모든 콘텐츠를 마이그레이션하려고 시도했습니다. 모든 텍스트 콘텐츠, 사용자 계정, 심지어 스레드 간 링크까지 올바르게 전송되었습니다. 하지만 지금은 다음과 같은 문제가 발생했습니다:
모든 과거 이미지 임베드가 사라진 것으로 보입니다.
새 이미지를 업로드할 수 없습니다.
저의 진행 과정은 다음과 같습니다:
새로운 DigitalOcean 드롭렛에 새로운 Discourse 앱을 생성했습니다.
새 도메인 이름을 해당 새 드롭렛에 연결했습니다.
두 Discourse 앱과 모든 플러그인이 최신 가용 소프트웨어 버전으로 업데이트되어 있는지 확인했습니다.
새 콘텐츠 추가를 방지하기 위해 기존 Discourse를 읽기 전용 모드로 설정했습니다.
기존 Discourse의 백업을 실행했습니다.
백업을 새 Discourse에 업로드했습니다.
Discourse 이메일 주소를 기존 도메인 이메일에서 새 도메인 이메일로 변경했습니다.
알림 테스트를 실행했으며, 새 Discourse에서 정상적으로 작동했습니다.
모든 Discourse 설정을 확인하여 기존 도메인 언급을 새 도메인으로 업데이트했습니다.
기존 서브도메인을 올바른 도메인으로 리다이렉트하도록 변경하고, 그곳에 임시로 노트와 새 Discourse 링크를 추가했습니다.
위와 같이 대부분의 콘텐츠가 완벽하게 전송된 것으로 보였습니다. 하지만 하루가 지난 후, 기존 이미지 임베드가 사라졌고 새 이미지를 업로드할 수 없다는 것을 알게 되었습니다. ‘alt’ 텍스트만 표시됩니다. 예시 스크린샷을 아래에 첨부합니다.
/var/www/discourse/public/uploads/default/original/1X/f7a6164ffa55af4ee2706d2386227183ef6c2d61.png
96 of 281 uploads are missing
/var/www/discourse/public/uploads/default/optimized/1X/997bc5536763d84a8d035ff7becd98277a158680_2_45x45.png
[…]
/var/www/discourse/public/uploads/default/optimized/1X/8944afba36549c9050ef074b391625ef93d4d0e3_2_1035x582.jpeg
/var/www/discourse/public/uploads/default/optimized/1X/8944afba36549c9050ef074b391625ef93d4d0e3_2_10x10.png
247 of 761 optimized_images are missing
rake uploads:recover_from_tombstone를 실행했습니다. 아무 출력도 없습니다.
솔직히 말해, 그 Rake 명령어들이 무엇을 하는지 잘 모르겠습니다.
또한 containers/app.yml 파일 내에서 DISCOURSE_HOSTNAME이 올바른(새) 서브도메인과 도메인으로 설정되어 있는 것을 확인할 수 있습니다.
하지만 게시물을 완료하고 페이지를 새로고침하면 게시물에서 사라지고, 빈 줄 하나만 남아 있는 것처럼 보입니다. 소스를 검사해보니 이미지 요소가 있으며, SRC 속성이 제 도메인 내의 경로로 설정되어 있습니다: https://discourse.my_domain_name.org/uploads/default/original/1X/61ae2bdeff3dfe334ad6803409560b667d7dc246.jpeg. 그리고 해당 경로를 새 탭에서 열면 NGINX 404 페이지가 로드됩니다.
원본 소스에서 이미지를 노트북으로 다운로드한 후 제 Discourse에 업로드하면(아래의 이 Discourse에서 하듯이), 제 Discourse에서 실패합니다.
디스코urses에 대해 제가 가진 아주 기본적인 이해(저는 완전 초보입니다)는 업로드된 이미지가 사이트에 저장되고, 최적화된 파일 크기의 버전도 함께 저장된다는 것입니다. 처음에는 사용자에게 원본 이미지가 표시되고, 일정 시간 후(제 경험상 24시간 이후) 포럼이 최적화된 이미지로 전환되는 것 같습니다.
저는 저장 공간이 부족해질까 봐 걱정되어 설정을 조금 실험해 보았습니다.
관리자 대시보드에서 확인해 보세요(Files 섹션 아래에 있습니다). 이미지 크기와 차원을 제어하는 다양한 설정이 있습니다. 이것이 문제의 이미지 문제와 관련이 있을 수 있습니다(제 이해가 맞다면요). 예를 들어, 포맷을 다시 설정한 이미지가 여전히 기준을 벗어나고 있을 수 있습니다.
Digital Ocean에서 Hetzner로 호스트를 이전할 때 제가 겪었던 문제는 일부 이미지(및 아바타)가 아예 표시되지 않는 것이었습니다(첫 번째 스크린샷과 비슷했습니다). 제 해결책은 FTP로 파일을 이동하는 것이었습니다(조악했지만 효과가 있었습니다). 왜 그런지 100% 확신은 없습니다. 처음에는 최적화된 이미지만 이동했는데 문제가 해결되지 않았지만, 모든 이미지를 이동하자 문제가 해결되었습니다.
메모리에 의존해서 작성하다 보니 폴더 이름 실수를 했네요. 폴더 구조는 다음과 같습니다: VAR/Discourse/Shared/Standalone/Upload
Digital Ocean에서는 FTP 클라이언트로 로그인하는 것이 매우 쉽습니다.
호스트: Discourse의 IP 주소
포트: 22
사용자 이름: root
비밀번호: SSH 비밀번호
말씀드린 대로 저는 전문가가 아니라 지난 몇 달간 이것저것 만져본 사람일 뿐입니다.
여기서 더 나은 조언(과 통찰)을 줄 수 있는 분들이 계십니다. 하지만 다른 모든 시도가 실패한다면, 제 접근법을 시도해 볼 가치가 있을 것입니다.
제 해결책은 FTP를 사용해 파일을 옮기는 것이었습니다(조악했지만 작동했습니다). 왜 그런지 100% 확신은 없습니다. 처음에는 최적화된 이미지만 옮겼는데 문제가 해결되지 않았지만, 모든 이미지를 옮기자 문제가 해결되었습니다.
두 개의 Discourse에 FTP로 접속하는 방법에 대해 더 자세한 설명을 해주셔서 감사합니다. uploads 파일은 이전 Discourse에서 약 125MB, 새 Discourse에서는 60MB였습니다. 그래서 이전 파일의 내용을 노트북 데스크톱으로 복사한 뒤, 중복되는 항목은 건너뛰며 폴더별로 새 Discourse에 복사했습니다.
놀랍게도 문제가 해결된 것 같습니다. Discourse 이전 전에 작성된 스레드와 트러블슈팅을 위해 오늘 새로 만든 스레드 모두에서 이미지 업로드가 정상적으로 작동하는 것으로 보입니다.
Discourse가 이동 과정에서 어떻게든 손실된 기존 콘텐츠 포인터를 재사용하고 있었던 것 같습니다. 따라서 동일한 이미지 파일을 다시 업로드하면 깨진 포인터를 재사용하여 반복적으로 실패했을 것입니다. 하지만 새 파일로 다시 저장하면 새 복사본과 새 포인터를 저장하기 때문에 성공했을 것입니다. 아마도 그렇습니다.
기본적으로 백업에는 최적화된 이미지가 포함되지 않습니다. 이러한 이미지는 다시 생성할 수 있기 때문입니다. 포함시키면 대역폭과 디스크 공간이 낭비됩니다.
사용자님의 경우, 백업을 생성하기 전에 include_thumbnails_in_backups 사이트 설정을 활성화하여 이미지를 포함시켰더라면 도움이 되었을 것입니다.
대안으로, 복원 후 rake posts:rebake_uncooked_posts를 실행하는 것도 작동했을 것입니다. 그렇지 않으면 최적화된 이미지가 백그라운드 작업에 의해 재생성되지만, 시간이 다소 걸립니다… 복원 종료 시점에 이를 정확히 알려주는 로그 메시지가 있습니다.