Let's Encrypt를 활성화하지 않고 설치한 후 Discourse 웹사이트가 로딩되지 않습니다

열린 SSH 세션 앞에서 위험할 정도로 아는 게 있다고 생각합니다. 며칠 전에는 설치를 무사히 마쳤고, 제대로 작동했습니다.

하지만 오늘은 다시 설치해야 했습니다(개발 서버를 사용 중이지, 프로덕션 서버가 아닙니다). 같은 단계를 거쳤는데, ./discourse-setup을 실행하고 설치가 완료된 후 웹사이트에 접속해도 아무것도 뜨지 않습니다.

./launcher start app도 실행해 보았지만, 여전히 아무 반응이 없습니다.

설치 문제를 해결하기 위해 일반적으로 확인해야 할 것들은 무엇인가요?

./discourse-setup 또는 ./launcher start app 실행 후 메시지나 오류가 전혀 발생하지 않나요?

환경이 어떻게 다른지 알려 주세요.

리버스 프록시를 사용 중인가요? CloudFlare를 사용하나요?

프로덕션 인스턴스는 어디에 호스팅하고 있나요?

아니요, 설치가 성공적으로 완료된 것 같습니다. docker info를 확인해 보니 컨테이너도 실행 중인 것을 볼 수 있습니다.

AWS에서 Amazon Linux 2를 사용 중이며, 며칠 전에도 동일한 운영체제에서 이 작업이 정상적으로 작동했습니다. 해당 도메인의 DNS에는 CloudFlare만 사용되고 있습니다.

제가 수행한 정확한 순서는 다음과 같습니다. 설치 과정에서 안내에 따라 amazon-linux-extras를 통해 git, docker, ncat이 설치되었지만(며칠 전에는 동일한 환경에서 정상적으로 작동하는 개발 포럼을 운영했으므로 이는 문제가 되지 않아야 합니다).

  1. git 설치
  2. docker 설치 및 시작
  3. ncat 설치
  4. discourse 설치
  5. nginx 1.12 설치

왜 그렇게 하셨나요?

좋은 질문이네요. :joy: 4단계 이후로 작동이 안 돼서 그렇게 한 거예요… 하하. 제거해야 할까요?

네. 제거하세요.

아마도 DNS 문제일 것입니다.

curl localhost의 반환 값은 무엇인가요?

tail /var/discourse/shared/logs/var-log/nginx/access.log의 출력 결과는 어떻게 되나요?

Discourse에는 컨테이너 내부에 웹 서버가 포함되어 있습니다.

curl: (7) Failed to connect to localhost port 80: Connection refused

tail: cannot open ‘/var/discourse/shared/logs/var-log/nginx/access.log’ for reading: No such file or directory

일반적인 설치 방법을 따랐지만, shared 폴더가 아예 존재하지 않는 것을 확인했습니다.

도움 주셔서 감사합니다! 말씀드린 것처럼, 저는 위험할 정도로 아는 것이 많습니다… 그리고 항상 좋은 방향으로만 작용하지는 않죠. :smiling_face_with_sunglasses:

죄송합니다.

tail /var/discourse/shared/standalone/logs/var-log/nginx/access.log

아직도 문제가 있다면,

find /var/discourse/shared -name access.log

을 실행하여 로그 파일이 어디에 있는지 확인해 보세요.

여기서 찾았습니다:

/var/discourse/shared/standalone/log/var-log/nginx/

access.log는 없었지만 error.log는 있었습니다.

그 안에는 동일한 줄이 반복되어 있었습니다(실제 도메인은 여기에서 example.com으로 대체됨):

2020/04/08 19:46:34 [emerg] 2112#2112: cannot load certificate "/shared/ssl/example.com.cer": PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE)

이 도메인에 대한 인증서가 이미 있으므로 Let’s Encrypt를 통한 인증서 발급 과정을 거치지 않았습니다. 그럼에도 불구하고 Let’s Encrypt 과정을 진행해야 하나요?

인증서가 필요합니다.

직접 인증서를 설치하는 방법을 검색하여 찾아볼 수 있지만, 그 과정이 매우 번거롭다는 안내가 있습니다. 아니면 Let’s Encrypt를 통해 무료로 그리고 전혀 수고 없이 인증서를 발급받을 수 있습니다.

와, 정말로 성공했네요.

답변해 주신 @pfaffman님과 다른 모든 분들께 감사드립니다. :+1:

사실, 그 말은 취소하겠습니다. Chrome이 창을 마지막에 성공적으로 로드된 페이지를 표시하는 모드로 열었지만, 시크릿 모드에서 새로고침을 해보니 여전히 작동하지 않는 것을 확인했습니다. 제 실수였네요. :man_facepalming:

Let’s Encrypt 인증서를 설정하는 방법에 대한 링크가 있을까요? 제가 무엇을 했는지(또는 하지 않았는지) 검토해야 합니다.

단순히 discourse-setup만 실행하세요. Let’s Encrypt 관련 질문이 나오면 아무 이메일 주소를 입력하거나, 갱신이 필요하다고 판단될 때 이메일을 받으려면 본인 이메일 주소를 입력하세요.

네, 제가 그렇게 했습니다… 설치 가이드에 따라 그렇게 한 줄 알았는데, 여전히 빈 페이지만 표시됩니다.

Discourse가 /shared/ssl/ 디렉터리에서 인증서를 찾고 있는 것 같은데, 실제 인증서 위치는 **/shared/standalone/ssl/**입니다.

제 app.yml 설정은 다음과 같이 되어 있습니다:

   ## Docker 컨테이너는 상태가 없으며(stateless), 모든 데이터는 /shared에 저장됩니다
volumes:
  • volume:
    host: /var/discourse/shared/standalone
    guest: /shared
  • volume:
    host: /var/discourse/shared/standalone/log/var-log
    guest: /var/log

다음 내용을 시도해 볼 수 있습니다.

cd /var/discourse
rm -r shared/standalone/ssl shared/standalone/letsencrypt
./launcher rebuild app

rm 명령어는 기억에 의존해 작성한 것입니다. 해당 경로가 존재하지 않는다면, 제가 입력해야 했던 정확한 명령어를 찾아주세요.

그러니까 Let’s Encrypt의 경우 1주일에 10개의 인증서 발급 제한에 걸린 것 같습니다. 이 단계 이후로 진행할 수 없는 이유 중 일부가 이것 때문인 것 같습니다.

여러 번의 재빌드 후에 이 문제를 경험한 다른 사람의 사례를 찾았습니다: Trouble with SSL after lots of rebuilds - #14 by pfaffman

그래서 지금 제가 할 수 있는 다른 선택지가 없으니, 이미 가지고 있는 제 인증서를 설치해야 하는 것 같습니다?