복원 후 아바타가 사라졌습니다. 어떻게 다시 가져올 수 있나요?

Discourse를 클린 설치한 후, 같은 밤에 백업했던 데이터를 복구했습니다(백업과 복구를 모두 Discourse 인터페이스를 통해 수행했습니다).

백업에는 데이터베이스와 업로드 파일이 포함되어 있었습니다.

복구 후, 클린 설치로 인해 설정이 변경되었을 것으로 판단하여 Discourse 앱을 재빌드했지만 문제가 발생했습니다.

프로필 이미지를 커스텀한 모든 사용자의 아바타가 사라졌습니다.

이미지 최적화와 관련이 있는 것 같으며, 재현을 위해 launcher rebuild app 외에 다른 작업이 필요할 수도 있습니다.

하지만 누락된 단계를 찾지 못했습니다.

기본 아바타(Discourse에 포함된 아바타)를 잃어버린 사람들의 스레드는 찾았지만, 우리의 경우와 다릅니다. 아바타를 변경하지 않은(이미지를 업로드하지 않은) 사람들은 여전히 알파벳 아바타를 사용하고 있습니다.

업데이트:

다음 명령을 실행해 보았지만 도움이 되지 않았습니다.

./launcher enter app
rake posts:rebake

posts:rebake가 잘못된 명령일까요?

@arinaf,

어찌된 일인지 오늘 저에게도 같은 일이 발생했습니다. nginx 리버스 프록시를 통해 유닉스 도메인 소켓으로 연결된 환경에서요. 모든 것이 완벽했지만, 커스텀 아바타 이미지가 아이콘(사람 아이콘)으로 표시되고, 알파벳 아바타는 정상적으로 표시되었습니다.

문제 해결을 위해 표준적인 2컨테이너 구성(nginx 프론트엔드 없음, 유닉스 소켓 없음)으로 돌아가자 문제가 사라졌습니다.

그런데 다시 nginx 리버스 프록시를 통한 유닉스 소켓 구성으로 돌아가자 문제가 재발했습니다.

아무런 실마리도 없어서… 잠시 쉬어가는 중입니다 :slight_smile:

분명히 데이터에는 문제가 없습니다. nginx 리버스 프록시 없이 완벽하게 작동하기 때문이죠. 그런데 이상하게도 nginx 리버스 프록시가 없을 때만 정상 작동합니다. LOL. (양쪽 방식 모두 완벽하게 작동하다가 갑자기 이런 이상한 아바타 문제가 발생했거든요…)

제 설정은 정확히 그와 같습니다. 다른 소프트웨어(ghost 블로그)를 Docker 컨테이너에서 실행하고 있기 때문입니다.
nginx를 리버스 프록시로 사용하고 있습니다.

명백히, 백업 복원은 겉보기보다 간단하지 않습니다.

썸네일 저장 문제라고 생각하여 rebakes를 여러 번 시도해 보았지만, 결과는 좋지 않았습니다.

말씀하신 내용을 시도해 보겠습니다. 문제가 리버스 프록시 때문인지 확인해 보기 위해서입니다(왜 간섭을 일으키는지 모르겠지만, 시도해 볼 가치가 있다고 생각합니다).

음… 문제는 백엔드 데이터베이스와 관련이 없다고 생각합니다. DB를 복원하거나 (raking을 수행하거나) 해도 마찬가지입니다.

리버스 프록시를 끄고 프록시 없이 두 개의 컨테이너만 실행하면 문제가 사라집니다. 모든 경우에서 DB가 동일하므로 DB 문제일 가능성은 낮습니다.

12시간 동안 인터넷에서 접속이 끊길 예정이므로, 나중에 다시 확인하여 @ariznaf 님의 설정에서 어떤 일이 있었는지 살펴보겠습니다.

컨테이너 외부에서 HTTPS를 사용 중인가요?

아바타에 어떤 URL이 사용되는지 확인하기 위해 페이지 소스를 검사해 보셨나요?

force_https가 활성화되어 있지 않은 것 같습니다.

지금 바로 진행할 수 없습니다. 처음부터 다시 시작해야 하기 때문입니다.

원본 서버에서 Discourse를 종료한 상태로 모든 파일을 복사하려고 시도했지만, 이 역시 작동하지 않았습니다(데이터베이스 관련 문제 발생).

다시 처음부터 시작하여 깨끗한 Discourse를 설치한 후, Discourse로 만든 백업 파일을 복원하는 방법을 시도해 보겠습니다.

확인해 보겠습니다. 감사합니다.

데이터베이스를 복구하거나 한 호스트에서 다른 호스트로 마이그레이션하는 작업이 예상보다 더 어려워지고 있습니다.

두 분 모두 감사합니다.

리버스 프록시를 사용하지 않고 대상 플랫폼이 대표성을 갖추며 올바르게 구성되어 있다면, 보통 매우 간단합니다.

다만 그 사이에 Discourse 자체나 사용 중인 플러그인(저는 공식 플러그인 몇 개와 토픽 목록 미리보기, 그리고 일부 컴포넌트만 사용 중입니다)에 업그레이드가 있었다면 이야기가 달라집니다. 제가 복원을 시뮬레이션해 볼 때마다 매번 어떤 형태로든 문제가 발생했거든요.

백업 시스템은 간단하고 직관적이지만, 모든 것을 다른 서버로 이전해야 할 때만큼은 충분히 견고하지 못하다고 느낍니다.
또한 유연성도 부족합니다.

게다가 완료되는 데도 너무 오래 걸립니다(이 정도 크기의 사이트인데도 전체 백업 용량이 겨우 3GB입니다).

저희 이전 포럼은 데이터가 100GB가 넘었었는데, 현재 시스템으로는 그렇게 큰 포럼을 백업하는 것이 불가능했을 것입니다.

다양한 크기로 조정된 아바타 이미지는 백업에 포함되지 않으며, 원본만 포함됩니다. 예약된 작업이 모든 아바타의 조정된 버전을 생성하는 데에는 시간이 좀 걸립니다.

아, 알겠습니다.
정말 감사합니다.
백그라운드에서 재구축된다는 걸 몰랐네요.
그럼 기다리는 수밖에 없겠군요.

rake posts:rebuild 같은 명령어를 쓰면서 짜증이 올라오고 있었습니다.

머리가 아플 뻔한 걸 많이 구해주셨네요. 정말 감사합니다.

포럼에서 /sidekiq/scheduled로 이동하여 CreateMissingAvatars 작업 옆의 “Trigger” 버튼을 누르면 처리 속도를 높일 수 있습니다.

와, /sidekiq 안에 이렇게 숨겨진 세상이 하나 있네요 :slight_smile:

말씀해 주신 방법을 시도해 보고 있습니다.

CreateMissingAvatars 작업은 예약되어 있고 실행되기는 하는데, 거의 즉시 종료됩니다. 완료되는 데 단 몇 ms밖에 걸리지 않아요. 수동으로 실행해 보기도 했습니다(Trigger 사용) 하지만, 다시 한번 즉시 OK 결과와 함께 종료됩니다.

하지만 아바타는 여전히 잘못되어 있습니다.
지금 제 원래 설정을 사용 중인데, discourse가 소켓을 통해 리스닝하고 nginx가 리버스 프록시로 작동하는 방식입니다.

이제 nginx를 제거하고 discourse를 80과 443 포트에서 직접 실행해 볼 예정입니다.

@ariznaf

12시간 동안 인터넷을 끊고 있다가 오늘 아침에 일어나서 socket-only.yml 구성으로 다시 전환했는데, 모든 것이 다시 정상으로 돌아왔습니다.

즉, 이 방대한 discourse-verse의 이쪽 끝에서는 다시 두 컨테이너, nginx 리버스 프록시에서 유닉스 소켓으로 모든 것이 잘 돌아가고 있습니다.

우리는 이상 징후가(발견된) 약 6시간 전에 nginx 프론트엔드 구성으로 전환했는데, 그때까지는 모든 것이 정상이었습니다.

@riking의 이 유용한 힌트(항상 감사드립니다, Kane)에 기반하여

리사이즈된 아바타 이미지들은 백업에 포함되지 않으며, 오리지널만 포함됩니다. 예약된 작업이 모든 아바타의 리사이즈 버전을 생성하는 데 시간이 좀 걸릴 것입니다.

Screen Shot 2020-04-17 at 9.06.09 AM

제 최선의 추측은 nginx로 전환할 때 많은 아바타 이미지가 이미 캐시에 저장되어 있었고 재생성 과정이 끝나지 않았기 때문에 문제를 인지하지 못했다는 것입니다. 시간이 지나면서 해당 이미지들의 캐시가 만료되었고, 그때 이상 징후가 나타나기 시작했습니다.

그래서 저는 인터넷을 끊고(socket-only.yml 컨테이너는 백그라운드에서 여전히 실행 중이지만 비활성 상태) 12시간 동안 자리를 비웠다가 아침에 일어났을 때, @riking이 언급했듯이 sidekiq가 밤새 그 마법을 부린 것을 확인했습니다(여기서는). (참고로, Kane은 meta의 모든 주제에서 항상 훌륭한 지원을 해주고 있습니다.)

이 시나리오는 @riking이 제안한 내용을 확인시켜 주는 것으로 보입니다.

솔직히, Discourse를 사용할수록 더 좋아집니다. 이러한 작은 문제들과 이상 징후들은 매우 흥미롭고, 두 컨테이너 구성은 정말 훌륭합니다.

현재 우리의 컨테이너는 다음과 같습니다:

# ls -l containers
-rw-r--r-- 1 discourse root 1124 Apr 15 11:29 data.yml
-rw-r--r-- 1 discourse root 3939 Apr 16 07:45 socket-only.yml
-rw-r--r-- 1 discourse root 3784 Apr 16 07:28 socket.yml
-rw-r--r-- 1 discourse root 3921 Apr 15 11:50 web-only.yml

이 구성이 좋은 점은 예를 들어 이 아바타 재생성 이상과 같은 문제를 발견하더라도, socket-only.yml에서 web-only.yml로 쉽게 오가며 전환할 수 있다는 것입니다.

이 경우, 우리는 (재생성 중에) web-only로 다시 전환했고, 프로세스가 완료된 후(모든 컨테이너가 여전히 실행 중이었기 때문에) 다시 원래대로 전환했습니다. 컨테이너를 재빌드할 때, 이 컨테이너와 구성 사이를 매우 쉽게 전환할 수 있습니다.

20년간 LAMP 포럼을 운영해 온 입장에서, 시스템 관리 측면에서 Discourse에 점점 더 깊은 인상을 받고 있습니다.

부록 (편집자 주);

물론 여기 meta에서의 제 페이지 등급과는 비교할 수 없을 정도로 훌륭하지만, 기본 두 컨테이너 구성(리버스 프록시 없이)이 기본값이 되어야 한다고 생각합니다. 설정이 매우 쉬우며, 두 개의 yml 파일이 있다는 것으로 인한 인식되는 "페널티"보다 이 구성에서 얻는 이점이 훨씬 많기 때문입니다.

제 쪽에서는 인터페이스로 만든 백업만 사용하여 복원을 시도해 보았습니다.

댓글에서 언급했듯이 아바타 이미지와 기타 사소한 항목들이 손실되었습니다.

@riking 님이 제공한 가이드를 따르려고 노력했지만 성공하지 못했습니다.

프로세스 실행을 강제하여 아바타 이미지를 새로고침해 보았지만, 몇 밀리초 만에 OK 상태로 종료되었고 아바타가 생성되지 않았습니다.

컨텐츠 이전이 급한 상황이어서 기존 서버에서 포럼을 중지하고, tar를 사용하여 컨테이너와 공유 디렉터리의 모든 내용을 복사한 후, 새 서버에 Discourse를 설치(초기 구성 없이)하고 해당 공유 및 컨테이너 디렉터리를 복사한 뒤 앱을 다시 빌드했습니다.

이제 새 서버에서 모든 것이 정상적으로 작동하고 있습니다.

백업에서 복원하는 작업은 예상보다 더 문제가 되고 있습니다(설치만 다시 하고 인터페이스에서 복원하면 된다는 설명에 따르면 간단해 보이기 때문이죠).

복원 시 무엇이 잘못되는지, 그리고 Discourse 버전이 백업 당시 버전보다 여러 버전 앞서 있는 경우에도 오래된 백업에서 복원할 때 시스템이 정상적으로 시작되도록 하는 방법에 대해 조사해야 합니다.

저는 Discourse를 매우 좋아합니다.

기타 전통적인 포럼에서 온 사용자로서, 원하는 것을 찾기 어려울 때가 있습니다.

깔끔한 인터페이스는 이러한 경우 찾기를 돕지 못합니다.

하지만 마침내 찾으면, 그곳은 본래 있어야 할 자리이며, 지능적인 방식으로 처리됩니다.

우리가 겪는 문제는 백업에서 복원할 때뿐입니다.

그리고 캐싱을 많이 사용할 때 가끔 문제가 발생합니다.

Discourse는 웹 브라우저에서 처음 로드될 때 시간이 좀 걸리지만, 그 후에는 매우 빠릅니다. 대부분의 처리가 사용자 자신의 기기에서 이루어지며, 캐싱(아바타, 이미지, CSS 등)을 많이 사용하기 때문입니다.

앱은 이미 컴퓨터에 있는 정보를 다시 가져오지 않으며, 이는 서버의 부담을 크게 줄여줍니다(제 경험상 그렇게 보입니다).

서버를 다른 곳으로 이전하거나 Discourse를 처음부터 다시 설치할 때, 뷰를 새로고침해도 여전히旧的한 콘텐츠를 볼 수 있습니다.

웹 탐색기의 탐색 기록을 정리하기 전까지는 이를 제거할 수 없었습니다.

이 문제로 인해 꽤 오랫동안 혼란을 겪었습니다.

참고로, 백업에서 저장된 썸네일 이미지를 선택할 경우 아바타 이미지도 저장됩니까?

저장하는 것이 더 좋다고 생각하시나요?

우리 포럼은 크지 않지만, 36,000개의 이미지를 수집하는 데 꽤 오랜 시간이 걸렸습니다.

@ariznaf님, 안녕하세요.

저희 전체 백업도 동일한 용량으로, gzip 압축을 풀어도 약 3GB입니다.

따라서 지금까지는 위 게시물(#13)에서 언급하신 문제들을 경험해 본 적이 없습니다.

명령줄을 통해 복원하시나요, 아니면 UI를 통해 복원하시나요?

저희는 컨테이너에서 명령줄을 통해서만 복원합니다. 당신도 마찬가지일 것으로 추정됩니다.

좋은 소식입니다. 축하드립니다.

관심 가져주셔서 감사합니다.

튜토리얼의 지침을 따르며 인터페이스를 사용했습니다. 명령줄에서 복구하는 방법은 모르겠습니다(백업은 discourse 인터페이스를 통해 수행했습니다).

설명드리겠습니다:

서버를 a.domain.com에서 b.domain.com으로 이전해야 했습니다.
discourse 포럼은 HTTPS와 사용자 지정 SSL(도메인 전체 SSL 인증서)을 통해 액세스합니다.
Discourse는 소켓을 사용하여 설치되었으며 HOST NAME이 a.domain.com으로 설정되어 있습니다.
nginx를 리버스 프록시로 구성하여 http(80) 트래픽을 https(443)로 영구 리다이렉트하고, https(443)는 https 트래픽에 대해 리버스 프록시로 작동하며 이를 discourse가 리스닝 중인 소켓으로 리다이렉트합니다.

S3 버킷에 a.domain.com의 백업(인터페이스를 통해)이 하나 있었습니다. 데이터베이스와 업로드 파일은 포함되었지만 썸네일은 제외되어 있습니다(약 3GB).

nginx를 설치하고 a.domain.com의 구성 파일을 복사한 후, 호스트 이름을 a.domain.com에서 b.domain.com으로 변경했습니다.

GitHub에서 클론하여 discourse를 설치했습니다(30분 설치 튜토리얼에서 권장하는 방식).
이후 discourse setup을 실행했습니다(nginx는 정지된 상태로). HOSTNAME을 b.domain.com으로 구성했습니다.

관리자로 로그인하여 새로운 b.domain.com 설치에 액세스했습니다.
인터페이스를 사용하여 S3 버킷에 액세스하도록 백업을 구성하고, 관리자 복구 기능을 활성화한 후, 마지막 백업을 복구했습니다.

그 후 discourse에서 로그아웃됩니다. 새로운 사용자, 설정 등이 생성되었기 때문입니다.

명령줄로 돌아가 app.yml을 편집하고 원래 서버(a.domain.com)의 구성을 복사한 후, 호스트 이름만 b.domain.com으로 변경했습니다.

그 다음 ./launcher rebuild all을 실행하고, 완료된 후 nginx를 시작했습니다.

discourse 포럼에 액세스할 수 있지만 아바타가 사라졌고, 이미지 썸네일과 관련하여 몇 가지 다른 문제가 있습니다.

@ariznaf 님, 이렇게 자세한 정보를 공유해 주셔서 감사합니다.

솔직히 S3와 같은 클라우드 저장소 서비스를 선호하지 않습니다. 그래서 우리 팀은 'S3 사용자’가 아니므로, 이 주제에 대한 추가적인 아이디어는 접어두는 것이 더 나을 것 같습니다…

아바타가 사라졌다고 하셨는데, 페이지 소스를 확인해서 어디서 요청되고 있는지 살펴보셨나요?

아직 S3에 남아 있나요?

왜 서브도메인을 변경해야 했나요?

정리하자면, 물리적 서버와 DNS 주소 모두 변경하신 건가요?

라이킹은 시스템이 섬네일을 다시 생성해야 한다고 말합니다. 하지만 작업은 이미 완료된 것으로 보였습니다.

다시 시도해 보겠습니다. 이제 저는 다른 방식으로 해결했습니다.

S3에는 백업만 저장하고, 이미지와 업로드 파일은 로컬에 저장합니다.

하지만 문제가 무엇인지 확인하기 위해 복구 테스트를 수행해야 합니다.

시스템이 이미지를 어디서 가져오려는지 확인해 보겠습니다.

하지만 흰색 실루엣 이미지가 표시되었으므로 깨진 링크가 아니라, 아마도 섬네일이 없기 때문에 시스템이 변경한 것으로 보입니다.