OVH의 베어 메탈 서버에 Fedora Server 38을 실행 중인 상태에서 Discourse를 새로 설치하려고 했습니다. 설치는 정상적으로 완료되었지만, app.yml에서 지정했던 호스트네임 forums.dogsrv.dev를 사용하여 접속할 수 없습니다.
OVH 엣지 방화벽은 비활성화되어 있고, firewalld와 iptables도 비활성화되어 있으며, DNS는 정상적으로 해석됩니다. 이 시점에서 더 무엇을 확인해야 할지 막막한데, 혹시 아이디어가 있으신가요?
/var/discourse/shared/standalone/log/var-log/nginx/production.log 파일을 확인해 보세요. 제 생각에는 DNS 또는 기타 문제로 인해 인증서 발급이 지연되어 Let’s Encrypt에서 레이트 리미팅(rate limiting)이 발생했을 가능성이 있습니다.
만약 그렇다면 일주일 정도 기다리거나 다른 서브도메인(예: forums 대신 forum)을 사용하는 것이 좋습니다.
discourse-setup을 실행해 보셨나요?
이상하게도 해당 폴더에 production.log 파일이 없지만, error.log 파일은 존재하며 이 오류가 반복적으로만 기록되어 있습니다.
2023/06/02 07:27:34 [emerg] 289163#289163: cannot load certificate "/shared/ssl/forums.dogsrv.dev.cer": PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE)
실제로 해당 인증서 파일을 확인해 보니 빈 파일이었습니다.
처음에는 discourse-setup을 실행했지만, 항상 다음과 같은 오류가 발생했습니다.
Hostname for your Discourse? [forums.dogsrv.dev]:
Checking your domain name . . .
WARNING: Port 443 of computer does not appear to be accessible using hostname: forums.dogsrv.dev.
WARNING: Connection to http://forums.dogsrv.dev (port 80) also fails.
이것은 .dev TLD가 기본적으로 Google의 HSTS 사전 로드 목록에 포함되어 있기 때문이라고 추측하여, app.yml을 수동으로 설정하고 ./launcher rebuild app을 실행했는데, 이는 정상적으로 작동하는 것처럼 보였습니다.
서브도메인을 forum으로 변경하고 앱을 다시 빌드해 보았지만, 여전히 동일한 문제가 발생하며 forums 대신 forum이라는 텍스트가 포함된 동일한 오류가 계속 나옵니다.
Docker 외부의 방화벽에서 포트가 열려 있나요?
네, firewalld와 iptables가 완전히 비활성화되어 있습니다. 서버에서 직접 apache나 nginx를 수동으로 설치하고 설정하면, 포트 80과 443 모두에서 트래픽이 허용되는 것을 확인할 수 있습니다. 하지만 HSTS 때문에 모든 HTTP 요청에 HTTPS 리라이팅이 활성화되어야 하고, 작동하는 SSL 인증서가 필요합니다. 현재 이것이 문제가 되고 있는 부분입니다.
그렇다면 포트 80과 443을 열어야 하는 것 아닌가요?
아직도 수신 트래픽에 무언가가 개입하고 있는 것 같습니다. DNS에 Cloudflare를 사용 중이신가요?
아니요, 구글을 사용합니다.
Discourse-setup가 실행하는 테스트가 실패하는 경우, 그 이유를 찾아야 합니다. Let’s Encrypt가 인증서를 할당할 수 없다는 점이 명확하며, 이는 테스트가 올바른 결과를 보여주고 있음을 의미합니다.
nginx와 apache를 설치하는 방법을 알고 있으므로 Let’s Encrypt가 인증서를 발급하도록 시도해 볼 수 있지만, 포트 80과/또는 443이 차단되어 있다는 점은 이미 명확합니다.
음, 문제는 discourse-setup이 최신 버전의 netcat을 사용할 때 깨진다는 것이었습니다. 이는 이 풀 리퀘스트에서 확인할 수 있습니다: https://github.com/discourse/discourse_docker/pull/697
-p 플래그를 제거하면 discourse-setup이 포트에 연결할 수 없다고 잘못 보고하는 문제를 해결할 수 있으며, 이후 앱이 성공적으로 재구축되고 이제 제 설치 환경에 완벽하게 연결할 수 있습니다.
도와주셔서 감사합니다.
동작하게 되어 기쁩니다! 재빌드 시 인증서를 가져오지 못했던 이유에 대해 혼란스럽습니다. 재빌드를 수행하고 discourse-setup 단계를 건너뛰셨을 것이라 생각했거든요.