어젯밤에 Discourse 업그레이드를 진행하던 중 앱을 다시 빌드했는데, 이로 인해 수많은 Postgres 오류가 발생했습니다. 이는 최근 업그레이드 때문이라는 것을 깨달았지만, 여전히 권한 거부(permission denied) 오류 등 다른 문제들이 계속 발생했습니다(그리고 네, 모든 파일의 권한을 700으로 chown 했으므로 전역적인 문제가 아니었습니다). 그래서 기존 /var/discourse 폴더를 임시로 사용할 위치로 이동하고, 적어도 postgres를 최신 상태로 만들기 위해 Discourse를 새로 설치해 보았습니다.
여기서부터가 흥미진진합니다. 3일 전에 UI를 통해 생성한 사이트 백업(DB만, 업로드는 다른 볼륨에 저장됨)이 있다고 생각했습니다. 적어도 그렇게 믿었습니다. 현재 제가 가지고 있는 파일은 wacky-writers-forum-2021-04-06-033906-v20210328233843.sql.gz인데, 이것이 실제 백업이 있어야 할 tar.gz 파일이 아님을 이제야 깨달았습니다.
현재 모든 사용자를 랜딩 페이지로 리다이렉트해 놓은 상태이며, 3일 전 서버에서 실제 .tar.gz 파일을 여전히 복구할 수 있는지, 그리고 정확히 어떻게 해야 하는지 알려줄 사람이 있기를 바랍니다.
백업과 업로드를 Digital Ocean 블록 스토리지에 저장하고 있으며, 이전 설치 환경에서 정상 작동하던 discourse 폴더도 가지고 있습니다. 하지만 이를 /var/discourse로 되돌리거나 복사하면 postgres 오류를 포함해 모든 것이 다시 깨져 버립니다. 9시간 동안 계속 작업하고 있는데 이제 거의 한계입니다. 누군가 도와주거나, 적어도 올바른 방향으로의 힌트만이라도 주실 수 있을까요? 방금 1,000명 사용자 마크를 달성했는데, 정말로 정말로 이 모든 것을 잃고 싶지 않습니다.
이를 수정하여, 제 업로드와 백업이 메인 discourse 폴더에 로컬로 저장되어 있지 않다고 말씀드리겠습니다. (이것이 문제의 시작점이었고, DigitalOcean Spaces로의 이동을 시도하고 있었기 때문입니다.) 따라서, 불행히도 저는 S3 설정을 전혀 하지 않았습니다. 왜냐하면 저는 단순히 마운트된 스토리지에 저장하고 있었기 때문입니다.
백업은 mnt/my_storage/shared/standalone에 저장되고 있었지만, 그곳에서 백업을 찾아보니 wacky-writers-forum-2021-04-06-033906-v20210328233843.sql.gz 파일만 있습니다. 더 나은 아이디어가 없어서 실제로 그 파일에서 복원을 시도해 보았지만(아마도 잘못된 방법이었을 것입니다), 권한 거부(permission denied) 오류가 발생했습니다. 아마도 그 백업이 실제로 생성되는 방식과 관련이 있을 것 같습니다.
EXCEPTION: lib/discourse.rb:93:in `exec': Failed to copy archive to tmp directory.
cp: cannot open '/var/www/discourse/public/backups/default/wacky-writers-forum-2021-04-06-033906-v20210328233843.sql.gz' for reading: Permission denied
해당 .sql.gz 파일에서 복원이 성공적으로 완료되었습니다. (좋아요! 다시 한번 Richard님께 감사드립니다.)
app.yml이 모든 것이 다운되기 전과 동일한 설정인지 확인했습니다.
./launcher rebuild app 실행
Postgres 13으로 재빌드가 성공적으로 완료되었습니다 (드디어)
하지만 현재 사이트 자체에 접속하면 여전히 다운된 상태입니다. Cloudflare를 사용 중이며, 현재 개발 모드(Development Mode)를 켜 두었고 DNS 캐시도 플러시했습니다. 모든 것이 제대로 된 곳으로 가리키고 있습니다. Cloudflare 템플릿은 app.yml에 있습니다.
DNS가 올바르게 해석되고 있고, 호스트네임도 최신 상태이며, Discourse 설치 시에도 적절한 URL을 사용했습니다. 이제 아이디어가 바닥난 상태입니다.
이것이 정상적인가요? (정상적이지 않을 것 같은데, 지난 24시간 동안 Discourse에 대해 알고 있다고 생각했던 모든 것이 뒤집어졌습니다 )
수정2: 마지막 수단으로 미뤄 왔지만, 이제 완전히 새로운 서버를 세팅하여 Discourse를 깨끗하게 설치해 볼 생각입니다. 제가 이것저것 만지면서 무언가 엉망이 되었을지 걱정되고, 무엇이 깨진 것인지 파악이 되지 않습니다. 다행히에도 백업과 모든 업로드 파일이 블록 스토리지에 남아 있어, 운이 좋다면 이를 새로운 드롭렛(Droplet)에 연결하여 거기서 이전 작업을 진행할 수 있을 것입니다. 혹시 추가적인 제안이나 팁이 있으시다면, 제 경험보다 더 풍부한 전문 지식을 가진 분들의 조언을 듣고 싶습니다.
수정3: 새로운 서버를 세팅하고 IP가 전파되었음에도 (nslookup과 ping 모두 정상, whatsmydns.net에서도 정상) 포럼이 로드되지 않습니다. 여전히 연결 오류가 발생합니다. IP 주소를 Discourse 인스턴스에 연결하는 대신 정적 페이지를 로드하려고 시도하는 것 같습니다. 물론 이 경우 그런 페이지는 존재하지 않습니다.
거의 24시간 동안 고군분투한 끝에, 복구를 진행한 후 사이트가 로드되지 않던 이유를 찾았습니다.
리셋과 재설치를 반복하고 그 외에도 여러 가지 작업을 하다 보니 레이트 리밋에 걸렸더군요. 그래서 SSL 템플러트를 임시로 주석 처리해 두었고, 일주일 후에 다시 활성화할 예정입니다.
현재는 깨진 이미지들을 수정하기 위해 모든 게시물을 다시 처리(rebake)하는 동안 사이트는 "기능"은 하고 있습니다. 오늘 저를 도와주신 Jay와 Richard에게 진심으로 감사드립니다. 정말 혼자서는 도저히 해결할 수 없었던 부분을 함께 헤쳐 나가 주셨기 때문입니다.
이제 S3를 설정할 때 다시 이런 걱정 없이 이번 주 안에 작업을 마무리할 수 있도록 진짜 백업을 다운로드하는 일만 남았습니다.