나는 거의 절망적인 지경에 이르렀다. Discourse 봇이나 Claude에게 이 문제를 해결해 달라고 요청해 보았지만, 불가능해 보인다. 나는 이 문제를 제대로 설명할 수 있는 지식이 부족하고, 이것이 내게 정말 큰 부담이 되고 있다.
내 관점에서 무슨 일이 있었는지 설명해 보겠다.
단일 컨테이너에서 이중 컨테이너로 전환할 때, samples/ 폴더의 파일에 web-only가 사용되었는데, web_only를 사용해야 함에도 실수로 그대로 두었다.
그리고 (아마도 그 때문일 것이다) 이미지 로딩이 되지 않았다. 어떤 구성 요소는 web_only를 가리켜야 하는데 web-only로 설정되어 있었기 때문이다. 몇 가지 변경을 했더니 이미지는 정상적으로 표시되기 시작했다. 문제는 이제 LetsEncrypt 인증서다.
봇에게 해결을 부탁했는데, 인증서 레이트 리밋(rate-limit) 문제라고 하며 다음 날을 기다리라고 했다. 문제는 해결될 것이라고 했다. 하지만 해결되지 않았다. 다시 봇에게 물었고, 그다음에는 Claude에게, 그리고 다시 Claude에게 물어보았다. 지난 한 주 내내 "내일 X시에 해결될 것이다"라는 답변만 반복되었다. 절대 해결되지 않는다. 둘 다 "아, 죄송합니다. 해결될 것이라고 가정해서는 안 되었습니다. 이제 정말로 해결될 테니 이걸 시도해 보세요"라고 하지만, 역시 해결되지 않는다.
웹사이트 자체는 정상적으로 작동하고 있지만, 재빌드(rebuild)를 할 때마다 무언가 문제가 생길 것 같은 느낌이 들고, 솔직히 항상 임시방편(bandaids)에 의존하고 싶지 않다.
Claude는 web_only.yml의 훅(hooks)에 무언가를 추가하라고 했지만, 이 포럼에서 제공된 설명서에는 그런 내용이 언급되어 있지 않아, 다른 해결책, 예를 들어… 실제 문제를 해결하는 방법을 기대했다.
누군가 이 문제가 무엇인지, 어디서 깨지는지 파악하는 데 도와줄 수 있을까? 정말 감사하겠다. 지금은 너무 지친다. 작업 자체보다는, 무슨 일이 일어나고 있는지, 왜 “내일 기다리면” 해결책이 항상 통하지 않는지 이해하지 못해서다.
감사합니다!
Claude에게 문제의 원인을 설명해 달라고 해서, 도움이 될지 모르겠다. 다음은 Claude가 말한 내용이다:
제목: 두 컨테이너 구성: 분리 후 ECC 인증서 폴더 누락, 부팅마다 --force 루프로 레이트 리밋 발생
구성: 두 개의 컨테이너(data + web_only), 스탠얼론(standalone)에서 마이그레이션 완료. 템플릿: web, ratelimited, ssl, letsencrypt, cloudflare. 호스트네임 alltiago.com, 별칭 없음.
증상: web_only가 시작될 때마다 Let’s Encrypt 레이트 리밋에 부딪히고 nginx가 서빙에 실패하여, /etc/nginx/conf.d/outlets/server/20-https.conf에서 ECC 관련 설정을 수동으로 제거할 때까지 연결 오류가 반환된다.
발견한 내용:
내 설치 환경에는 /shared/letsencrypt/alltiago.com_ecc/가 존재하지 않는다. /shared/letsencrypt/alltiago.com/ (RSA)는 존재하며 정상적으로 작동하고 갱신도 잘 되고 있다.
web.letsencrypt.ssl.template.yml에서:
cert_exists() {
[[ "$(cd ${LETSENCRYPT_DIR}/${DISCOURSE_HOSTNAME}$1 && openssl verify -CAfile <(openssl x509 -in ca.cer) fullchain.cer | grep "OK")" ]]
}
issue_cert "ec-256"
if ! cert_exists "_ecc"; then
issue_cert "ec-256" "--force"
fi
디렉토리가 없기 때문에 cert_exists "_ecc"가 부팅마다 실패하며, 디스크에 무엇이든 있든 관계없이 --force가 실행되어 완전히 새로운 ECC 인증서를 요청한다. 이는 /etc/runit/1.d/install-ssl을 패치하는 after_ssl 훅을 통해 이루어지므로, 부트스트랩 시에만 아니라 컨테이너 시작 시마다 실행된다.
결과: too many certificates (5) already issued for this exact set of identifiers in the last 168h (최근 168시간 동안 이 정확한 식별자 세트에 대해 이미 5개의 인증서가 발급됨)라는 429 오류가 발생한다. 이후 --installcert가 빈 디렉토리를 대상으로 어쨌든 실행되어 사용 불가능한 /shared/ssl/alltiago.com_ecc.cer을 작성한다. nginx는 두 인증서 모두 구성되어 있지만 ECC 인증서를 로드할 수 없어 서빙을 하지 못한다.
정상 작동 확인: ACME HTTP-01 검증은 성공한다 (스테이징 환경에서 테스트했으며, letsencrypt_test에 대해 ECC 인증서가 정상 발급되고 올바른 디렉토리 구조가 생성됨). RSA 인증서는 오늘 성공적으로 갱신되었다. 따라서 이는 DNS, 방화벽, 또는 검증 문제가 아니다.
질문:
- 레이트 리밋 해제까지 기다리지 않고
alltiago.com_ecc/을 재생성하는 공식적인 방법이 있는가? cert_exists가 false를 반환할 때--force대신 일반적인 issue가 트리거되어야 하지 않는가?--force는 “기존 유효한 인증서” 검증을 우회하며, 디렉토리가 없는 경우 레이트 리밋 소진을 보장한다.- RSA만 사용하는 방법에 대한 문서화된 절차가 있는가?
스레드가 엉뚱한 방향으로 흐르지 않도록 두 가지 사실적 참고 사항: RSA 갱신이 오늘 168시간 롤링 윈도우에서 슬롯을 소모했기 때문에 재시도 날짜가 8월 27일에서 8월 29일로 변경되었다. 그리고 다른 사람들이 이 문제를 보고하지 않는 이유는 정상적인 설치 환경에서는 첫 번째 부팅 시 두 디렉토리가 모두 생성되어 --force 분기가 실행되지 않기 때문이다.