Move your Discourse Instance to a Different Server

여기서 겪은 마이그레이션의 가장자리 사례(edge case)를 하나 추가합니다. 다른 분들에게 도움이 될 수 있기를 바랍니다.

독립형 Discourse 인스턴스를 새로운 VPS로 이전하는 과정에서 Let’s Encrypt/SSL 관련 가장자리 사례에 부딪혔습니다. 따라서 이 가이드를 따르는 다른 분들에게 도움이 될 수 있도록 정확한 진단 및 복구 단계를 정리해 보았습니다.

제 경우, app 내부의 nginx가 시작되지 않았는데, 그 이유는 /var/discourse/shared/standalone/ssl/에 있는 두 개의 .cer 파일이 모두 0바이트 파일이 되었기 때문이었습니다:

PEM_read_bio_X509_AUX() failed

재구축(rebuilding)을 시도하자 인증서 발급이 다시 시도되었고, 반복된 시도 끝에 Let’s Encrypt의 인증서 발급 속도 제한(rate limit)에 도달했습니다. 기존 서버에서 여전히 유효한 인증서 파일만 복사해서는 충분하지 않았습니다. app를 시작하면 다시 0바이트 파일로 대체되었기 때문입니다.

결국 문제를 해결한 방법은 app를 중지한 뒤, 기존 서버에서 작동하는 /var/discourse/shared/standalone/ssl/ 디렉터리 뿐 아니라 해당 /var/discourse/shared/standalone/letsencrypt/ 상태까지 모두 복사한 다음 컨테이너를 다시 시작하는 것이었습니다.

전체 순서를 여기에서 문서화했습니다:

이것은 공식 마이그레이션 또는 HTTPS 문서의 대체물이 아니라, 이 특정 마이그레이션에 대한 진단/복구 노트입니다.

관련된 0바이트 .cer 실패 모드에 대해 다루는 오래된 Meta 토픽도 있습니다: