호스트네임으로 포트 443에 접근할 수 없고 포트 80도 실패합니다

안녕하세요, 제가 직접 Discourse를 호스팅하는 것은 처음입니다. 공식 GitHub 설치 가이드를 따라 wget -qO- https://raw.githubusercontent.com/discourse/discourse_docker/main/install-discourse | sudo bash 명령을 실행했습니다. 서브도메인에 연결하는 단계까지 모두 잘 진행되었지만, 인증을 완료한 후에도 동일한 오류가 계속 발생합니다. 오류 메시지는 다음과 같습니다: “이 컴퓨터의 443 포트가 호스트네임: [Discourse 서브도메인]을 사용하여 접근할 수 없는 것 같습니다. 또한 [Discourse 서브도메인]의 80 포트에 대한 연결도 실패합니다.”

처음에는 app.yml 파일이 아예 존재하지 않아 온라인에서 확인 후 수정했습니다. 포트를 81로 변경하고 443도 변경해 다시 시도해 보았지만, 포트 변경을 하지 않은 것처럼 동일한 오류가 발생합니다.

또한 raspap이 문제를 일으키고 있는지 확인해 보니 80 포트를 사용 중이었습니다. 이를 81로 변경해 보았지만 여전히 동일한 오류가 나옵니다.

제가 어디를 잘못하고 있는 걸까요? 라즈베리파이 5를 사용 중이기 때문일까요? 라우터 설정에서 포트를 열어야 하나요? 완전히 헤매고 있습니다. 초보자의 질문이어서 죄송합니다. 아마도 이 분야에 익숙하지 않아서 그런 것 같습니다.

음… 다음 링크를 따르고 계신 건가요:

아니요, 하지만 현재 겪고 있는 문제를 해결해 줄 것 같아서 꼭 시도해 볼 겁니다. 감사합니다 :slight_smile:

포트 80 오류는 해결했지만, 443 포트가 여전히 작동하지 않는 이유는 아직 파악하지 못했습니다. raspap이 여전히 해당 포트를 사용 중일 수 있지만, 설정을 변경할 수 있을지는 잘 모르겠습니다.

Cloudflare 터널 설정을 하느라 정말 오랜 시간을 보낸 끝에, 이 가이드(Install Discourse on a residential internet with Cloudflare Tunnel)를 따라 포트 80 및 433 오류 없이 연결하는 데 마침내 성공했습니다.

그런데 5초 카운트다운이 지나고 동작을 시작하더니 다시 멈췄습니다. 설마 여기서 끝나는 건가 싶어서 도메인을 방문해 봤는데 응답이 없다고 나오고, 로컬호스트(localhost)에도 아무것도 표시되지 않습니다. 제가 잘못된 방식으로 시작하고 있는 건가요? 설정은 전혀 변경하지 않았고, 모든 것을 삭제했다가 다시 설치해 보았지만 소용이 없었습니다. 리빌드(Rebuild)를 해도 그냥 멈추고, doctor discourse를 실행하면 'Discourse 컨테이너 앱이 실행 중’이라고만 나옵니다. 그렇다면 다른 기기에서 실행 중인지 확인하기 위해 내트워크(내 네트워크)에서 어떻게 접근해야 할까요?

라즈베리파이의 IP 주소를 cURL로 요청하여 응답을 확인해 볼 수 있습니다.

또한 Cloudflare 대시보드에서 터널의 상태를 확인할 수도 있습니다.

curl: (7) (IP here) 포트 80에 연결 실패 (0ms 소요): 서버에 연결할 수 없음 오류가 발생합니다.

Cloudflare 대시보드에서는 상태가 정상이라고 표시됩니다.

참고로, 라즈베리파이용 핫스팟인 raspap도 함께 호스팅하고 있으며, 이 서비스에도 웹 대시보드가 있지만 포트는 81로 변경해 두었습니다.

즉, Discourse가 PI의 포트 80에서 접근 가능해야 하는데, 다른 머신에서 cURL로 접근할 수 없다는 거죠?

app.yml 파일을 공유해 주시겠어요?

Pi 자체에서 curl을 시도해 보았습니다. 또한 제 휴대폰에서도 해당 웹사이트에 접근할 수 없지만, Pi의 IP 주소와 포트 81을 통해 호스팅 중인 다른 사이트에는 접근할 수 있습니다.

제 app.yml 파일은 다음과 같습니다:

templates:

  - templates/postgres.template.yml

  - templates/redis.template.yml

  - templates/web.template.yml

  - templates/web.ratelimited.template.yml

  - templates/web.ssl.template.yml

  - templates/web.letsencrypt.ssl.template.yml

expose:

  - 80:80

  - 443:443

params:

  db_default_text_search_config: pg_catalog.english

  db_shared_buffers: 4096MB

env:

  LC_ALL: en_US.UTF-8

  LANG: en_US.UTF-8

  LANGUAGE: en_US.UTF-8

  DISCOURSE_HOSTNAME: forum.iambest.net

  DISCOURSE_DEVELOPER_EMAILS: (private email)

  DISCOURSE_SKIP_EMAIL_SETUP: '1'

  UNICORN_WORKERS: 8

volumes:

  - volume:

      host: "/var/discourse/shared/standalone"

      guest: "/shared"

  - volume:

      host: "/var/discourse/shared/standalone/log/var-log"

      guest: "/var/log"

hooks:

  after_code:

    - exec:

        cd: "$home/plugins"

        cmd:

          - git clone https://github.com/discourse/docker_manager.git

run:

  - exec: echo "Beginning of custom commands"

  - exec: echo "End of custom commands"

Install Discourse on a residential internet with Cloudflare Tunnel 의 가이드를 전혀 따르지 않으셨나요?

포트와 템플릿을 주석 처리하지 않으셨다는 말입니다.

아, 맞아요. 문제를 해결하던 중에 그게 원인인지 확신이 없어서 제거했거든요.

포트도 주석 처리해야 하는지 확신이 없었어서, 이번에는 주석 처리하지 않고 다시 시도해 봤더니 지금은 작동합니다… 하지만 이 화면이 정상적인 것 같지 않아서 좀 불안하네요.

가이드에 따라 로켓 관련 설정도 비활성화했습니다. 도메인에서도, 로컬호스트에서도 같은 문제가 발생합니다.

CSS 문제도 있고, 방화벽 문제도 있는 것 같습니다. ISP에 방화벽 제한이 있나요?

방화벽 제한을 설정하지 않았고 CSS도 건드리지 않았습니다. 사용 중인 라우터의 기능이 매우 제한적이어서 불행히도 방화벽 설정을 변경할 수 없습니다.

또한, 25번 포트와 455번 포트를 제외하고는 제한된 포트가 없는 것으로 보입니다.

또한, 어딘가에서 HTTPS 대신 HTTP를 사용하고 있는 것 같습니다. 가이드에 따라 app.yml에서 HTTPS를 강제하도록 설정했는데, 그럼에도 HTTPS로 사이트에 접근할 수 없는 이유를 모르겠습니다.

@Falco Cloudflare Tunnels를 사용할 때 LetsEncrypt 인증서가 필요합니까? 아니면 Cloudflare을 통해 자동으로 처리됩니까?