Google Cloud 포트 문제 관련 토론은 없나요?

안녕하세요 여러분! Google Cloud에서 Discourse를 설치하고 실행하기 위해 몇 번 시도해 보았습니다. 현재 세 번째 시도 중이며, VM 인스턴스(Ubuntu 18.04 minimal)를 생성한 후 터미널을 통해 Discourse를 수동으로 설치하고 있습니다. 가이드를 따랐는데 모든 것이 정상적으로 진행되는 것처럼 보이지만, ./discourse-setup를 완료한 후에도 사이트에 접근할 수 없습니다.

또한 Google 마켓플레이스의 “원클릭” 배포 솔루션(Google 자체 및 Bitnami)을 사용하여 Discourse를 설치해 보기도 했습니다. 이렇게 설치했을 때는 Discourse 랜딩 페이지에 접근할 수 있었습니다.

Google과 포트 설정 사이에 문제가 있는 것 같고(이 때문에 사전에 준비된 설치 방식에서는 이런 문제가 발생하지 않았을 것 같으며), 이 부분에 대해 제가 아는 것이 너무 적어서 혼자 디버깅하기가 어렵습니다. 혹시 의견 주실 분 있으신가요?

이것이 방화벽과 관련이 있을까요?
제 이해로는 G Cloud에서 VM에 대한 공개 액세스를 허용하려면 두 개의 확인란을 선택해야 합니다. 필요하면 나중에 동일한 설정을 할 수도 있습니다.

Bhanu님, 제안해 주셔서 감사합니다!

해당 항목들은 이미 체크되어 있습니다!

그래도 작동하지 않습니다. 사이트를 ping 해보니 모든 것이 정상인 것 같습니다:

사이트에 SSH로 접속하여 netstat으로 포트 상태를 확인하니 다음과 같은 결과가 나옵니다:
ports
하지만 저는 netstat에 대해 잘 모릅니다.

이제 내가 웹 서버를 실행하고 있지 않은 건 아닌지 의심이 듭니다. Discourse를 설치하기 전이나 후에 Nginx를 설치해야 하는 건가요? 이 스레드의 생각 흐름을 따라갔는데, 제 문제와 동일합니다.

자, 이제 이것이 문제라는 생각이 듭니다. Nginx가 설치되어 있는 것 같았지만 실행 중이 아니었습니다. docker-proxy의 PID 14311과 14295를 종료한 후 Nginx를 실행했습니다. 이제 Nginx가 포트 80에 바인딩되어 있고, 제 사이트를 접근하면 Nginx가 반겨줍니다!
이제 Docker/Discourse를 다시 실행하는 것만 남았습니다.

또한 구버전 Ubuntu에서 Discourse/Nginx를 설치하는 이 가이드도 찾았습니다. 그들은 어째서인지 Docker의 포트를 80번에서 변경한 것 같습니다. 아마 여기에서 충돌이 발생하는 것일지도 모릅니다.

어떤 식으로든 Nginx가 포트 80에서 실행되고, Docker-proxy가 http는 8060번 포트, https는 9443번 포트에서 리스닝하도록(다른 튜토리얼의 제안에 따라) 설정하는 데 성공했습니다. 하지만 이렇게 달성한 후에도 다시 막막해졌습니다. Discourse는 정말 멋진 포럼처럼 보이지만, 저 같은 초보자에게는 Google Cloud에 설치하는 것이 불가능한 것 같습니다.

Discourse에는 이미 nginx 서버가 내장되어 있으므로, Discourse 호스팅 외에 서버를 다른 목적으로 사용할 계획이 없는 한 전용 웹 서버를 실행할 필요가 없습니다. 서버에 공용 IP 주소가 할당되어 있는지, 그리고 해당 IP가 포트 22, 80, 443에 대한 외부 연결을 허용하도록 구성되어 있는지 확인해 주시겠습니까?

참고: VPC firewall rules  |  Cloud Next Generation Firewall  |  Google Cloud Documentation

네. Google에서 실행 중인 제 VM 인스턴스는 공개 IP를 보유하고 있으며, 22, 80, 443 포트에 대한 트래픽을 허용하고 있습니다.

제가 80 및 443 포트에서 실행 중이던 docker-proxy 프로세스의 PID를 종료한 후, 80 포트에서 Nginx를 시작했을 때 제 사이트의 Nginx 랜딩 페이지에 접근할 수 있었던 점도 이를 뒷받침한다고 생각합니다.

즉, 설치 자체에 문제가 있다는 뜻입니다.
새로 설치한 것이라면, VM을 삭제하고 다시 설정하는 것이 훨씬 쉬울 수 있습니다.

사실 이미 3번이나 설치했는데, 매번 포트가 바인딩되지 않습니다. 3번의 설치는 성공적으로 완료되었지만, 포럼에 접근해 본 적은 한 번도 없습니다. 그래서 구글 버전을 사용하려고 알아보고 있습니다. (구글 버전은 작동하지만 SMTP를 설정할 수 없습니다.) 그리고 구글 버전에서 SMTP를 설정할 방법을 찾아보려 합니다.

설치가 완료된 후에 SMTP를 설정할 수 있을까요?
이 링크의 "11단계"를 따르면 discourse.conf 파일을 [만들 수 있고(존재하지 않으므로),] 수정할 수 있습니다. 그렇게 한 후, "discourse 서비스"를 다시 시작하고 이메일 설정을 테스트할 수 있을 것 같습니다.

즉, Discourse를 다시 설치할 필요가 없다는 뜻이 맞나요?

하지만 실행 중인 서비스를 살펴보면, 내 Discourse 포럼이 분명히 정상 작동 중임에도 불구하고 "discourse"라는 이름의 서비스는 보이지 않습니다.


여기서 Discourse가 보여야 하지 않나요? Discourse 서비스를 다시 시작할 수 있도록, 대신 재시작할 수 있는 다른 서비스가 있을까요?

죄송합니다. Google 클라우드 이미지가 어떻게 설정되어 있는지 전혀 모르겠습니다. 저는 10회 이상의 설치를 수행해 보았으며(지난주에도 한 번 포함), 아마도 VM 구성 방식과 관련이 있을 것이라 꽤 확신합니다.

공식 설치 가이드를 따르기 전에 제가 수행하는 준비 단계는 다음과 같습니다:

  1. Compute Engine에서 HTTP 및 HTTPS 트래픽을 허용하도록 설정합니다.
  2. DNS를 설정하고 확인합니다.
  3. SSH를 통해 VM에 연결할 수 있는지 확인합니다.

이 과정이 정상적으로 작동한다는 것을 보증합니다.

참고: 저는 Gcloud에서 Discourse를 설치할 때 일반적으로 Ubuntu의 최소(minimal) 버전을 사용합니다.

Discourse 공식 표준 설치를 수행하지 않으셨나요?

음. 이상하네요. 하지만 Google Cloud에서 실제로 가능하다는 것을 확인해 주셔서 감사합니다. 저도 Discourse가 잘 설치된다고 생각하며, 문제의 원인이 VM/포트라고 봅니다. 그럼 내일 네 번째로 시도해 보겠습니다. 매번 해당 준비 단계를 수행했는데도 말이죠. Bhanu님, 감사합니다.

@pfaffman 네, 했습니다.

그리고 실제로 HTTP/HTTPS 트래픽을 허용하는 대상은 "Computer Engine"이 아니라 "VM 인스턴스"인 것이 맞죠?

Compute engine는 구글 용어로 VM을 가리키는 말인 것 같습니다.

Discourse-setup을 실행할 때 포트가 확인됩니다. 해당 테스트가 통과되고 있나요?

지금 바로 확인해 보겠습니다. 기존 인스턴스와 프로젝트를 삭제하고 Google Cloud에서 새 프로젝트와 인스턴스를 시작했습니다. 이제 Discourse를 설치해 보고 확인한 포트 정보를 보고하겠습니다!

자, 며칠 후 이야기입니다. 이제 잘 작동합니다!

같은 과정을 한 번 더 수행했는데, 이번에는 각 단계를 더 신중하게 진행했습니다.
Google Cloud에서 인스턴스와 프로젝트를 삭제하고, 새 프로젝트로 처음부터 다시 시작했습니다.

그 후 새 프로젝트와 새 인스턴스를 생성했습니다. Ubuntu 18.04 LTS minimal을 사용했고, HTTP/HTTPS를 활성화했습니다. 위에서 링크한 공식 가이드를 따르기 전에, Bhanu의 조언대로 연결성을 테스트했습니다. Google Cloud의 "환영 튜토리얼"을 따랐는데, 여기에는 포트 80에서 파이썬 서버 스크립트를 실행해 보는 과정도 포함되어 있습니다.

“공식 가이드” 진행 과정에서 SMTP 설정을 매우 신중하게 수행했습니다. 이유를 모르겠지만 Mailgun을 사용하지 않고 대신 Sendinblue를 사용하기로 결정했습니다. 아주 잘 작동합니다!

이번에 무엇이 달라졌는지는 정확히 모르지만, 이제 잘 작동합니다. 스레드에서 함께 논의해 주셔서 감사합니다!

이전 게시물을 수정할 수 없는 이유는 모르겠지만, модератор가 두 게시물을 병합할 수도 있을 것 같습니다.
추가로 말씀드리고 싶은 것은, 제 문제와 해결책이 제가 너무 조급했기 때문이었을 수도 있다는 점입니다.

잘못된 플러그인을 설치한 탓에 최근 Discourse 인스턴스를 초기화하고 다시 설치해야 했습니다. 이 새로운 인스턴스를 시작했을 때 새로운 IP를 받게 되었습니다. 그래서 호스팅 서비스로 가서 서브도메인 discourse.mydomain.com을 Google Cloud 인스턴스의 IP로 가리키는 A레코드/DNS를 업데이트했고, 이후 Google Cloud SSH로 돌아가 설치를 실행했습니다.

./discourse-setup을 처음 실행하면 포트 80과 443에 바인딩할 수 있는지를 확인합니다. 하지만 어떤 이유에서인지 다시 80과 443 포트에 바인딩을 거부했습니다. who.is를 통해 DNS를 조회해 보니 서브도메인은 해당 IP로 정상적으로 해석되었고 모든 것이 정상이었지만, 여전히 작동하지 않았습니다. ./discourse-setup을 3번 실행해 봤지만 실패했고, netstat -ltnpu로 확인해 보았지만 특별한 점은 없었습니다. 5분을 더 기다린 후 네 번째로 실행해 보니 이번에는 작동했습니다.

이전 게시글을 수정할 수 없습니다. 하지만 실제로 다시 설치하는 과정에서 문제가 있었습니다. 이번에는 방화벽에 다음과 같은 허용 규칙도 추가했습니다:

SMTP는 아마도 필요하지 않았을 것 같지만, 80과 443 포트에 대한 “Egress(출력)” 규칙은 필요한 것 같습니다.

포트 25는 항상 차단되지만, 기본적으로 모든 포트가 열려 있으므로 아웃바운드 규칙을 설정할 필요가 없다고 생각합니다.