부트스트랩을 통과하지 못함

지금 두 개의 다른 VM에 Discourse를 설치했습니다.
공식 설치 지침을 따르고 있습니다.
하나는 Mac Pro에서 VMware Fusion 인스턴스로 실행되는 Debian 12이고, 다른 하나는 TrueNAS에서 실행되는 VM의 Ubuntu 24입니다.
둘 다 로컬 네트워크에서 실행되는 전용 서버이며 브리지 네트워크를 사용하고 고유한 접근 가능한 IP 주소를 가지고 있습니다.
TN 서버는 여러 다른 도커 컨테이너화 된 애플리케이션을 호스팅하고 있으며, 모두 LAN과 인터넷을 통해 정상적으로 작동하고 접근할 수 있습니다. Mac Pro는 기본적으로 위키를 호스팅하고 있습니다.
양쪽 모두에서 부트스트랩 기능이 완료되지만, 작동하는 사이트를 얻지 못합니다. 브라우저에서는 '서버에 응답 없음’만 표시됩니다.
docker ps에 따르면 컨테이너 "app"은 실행 중이며 80포트와 443포트에서 리스닝하고 있고, ufw는 해당 포트를 허용하고 있다고 보고합니다.
처음에는 Debian 사이트가 nginx 기본 환영 페이지를 표시했지만, 이제는 그것도 응답하지 않습니다.
저는 개발자나 웹 전문가가 아니어서 문제를 어떻게 해결해야 할지 모르겠습니다. Grok에게 도움을 요청했지만, 지금까지 아무것도 효과가 없었습니다.

어떤 도움이라도 정말 감사하겠습니다.

공용 인터넷에 공개되어 있고 도메인 이름이 해당 서버를 가리키고 있지 않다면, 표준 설치를 수행할 수 없습니다.

다음 링크를 참고해 보시기 바랍니다: Install Discourse on a residential internet with Cloudflare Tunnel

공개적으로 접근 가능한 정적 IP 주소와 해당 주소로 포인팅하는 도메인 이름을 보유하고 있습니다.
일반적으로 와일드카드 A 레코드를 사용하여 모든 호스트를 해당 IP로 포인팅하지만, 문제 해결 과정에서 Cloudflare DNS의 프록시된 주소와 Discourse가 호환되지 않을 수 있다는 게시물을 확인하여, 해당 도메인에 대해 전용 A 레코드를 생성하고 프록시를 비활성화했습니다.

discourse-setup을 실행하셨나요? 연결 테스트를 통과했나요?

‘bootstrap function’이라는 용어를 올바르게 사용하고 있나요?
같은 것에 대해 이야기하고 있는지 확인하고 싶어서요.
./discourse-setup 자체가 bootstrap인 거죠?
그렇다면 제가 “bootstrap를 수행하고, 컨테이너가 실행 중”이라고 하면, setup의 가장 처음에 이루어지는 연결 테스트가 통과했다는 뜻이 되나요?

이렇게 이해하는 게 맞을까요?

네, 대략 그렇습니다. app.yml을 생성한 후 ./launcher bootstrap app을 실행합니다.

DNS가 제대로 작동하지 않는 상태에서 여러 번 실행했다면 Let’s Encrypt의 요청 한도(rate limit)에 도달했을 가능성이 있습니다. 쉬운 해결 방법은 일주일 정도 기다리거나 다른 도메인 이름을 사용하는 것입니다.

그 외에는 해당 머신에서 다른 서비스가 실행되고 있지 않나요?

그리고 discourse-setup을 실행했을 때, 자체 연결이 불가능하다는 경고가 나오지 않았나요?

저는 각 VM에서 한 번만 실행했으며, 각각 다른 호스트 이름을 사용했습니다.

새로 생성된 VM으로, 다른 것은 아무것도 실행되지 않습니다. 실제 하드웨어에는 다른 것들이 실행 중이지만, 호스트와 별도의 내부 IP 주소를 사용하고 있습니다.

맞습니다.

설치 출력에서 발견한 오류는 다음과 같습니다. 치명적인 오류로 보이지는 않습니다:

690:M 30 Apr 2025 22:05:22.859 # Warning: Could not create server TCP listening socket *:6379: bind: Address already in use
690:M 30 Apr 2025 22:05:22.859 # Failed listening on port 6379 (TCP), aborting.
109:M 30 Apr 2025 21:59:42.411 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition...
2025-04-30 21:59:41.125 UTC [60] postgres@postgres ERROR:  database "discourse" already exists
2025-04-30 21:59:41.274 UTC [63] postgres@discourse ERROR:  role "discourse" already exists
WARN: Unresolved or ambiguous specs during Gem::Specification.reset:
      stringio (>= 0)
      Available/installed versions of this gem:
      - 3.1.7
      - 3.1.5
      - 3.1.1
WARN: Clearing out unresolved specs. Try 'gem cleanup <gem>'
Please report a bug if this causes problems.
The setting 'staticAddonTrees' will default to true in the next version of Embroider and can't be turned off. To prepare for this you should set 'staticAddonTrees: true' in your Embroider config.
The setting 'staticAddonTestSupportTrees' will default to true in the next version of Embroider and can't be turned off. To prepare for this you should set 'staticAddonTestSupportTrees: true' in your Embroider config.
Node.js heap_size_limit is less than 2048MB. Setting --max-old-space-size=2048 and CHEAP_SOURCE_MAPS=1
-e DISCOURSE_SMTP_DOMAIN=discourse.example.com
[BABEL] Note: The code generator has deoptimised the styling of /var/www/discourse/app/assets/javascripts/discourse/ember/ember-template-compiler.js as it exceeds the max of 500KB.
[BABEL] Note: The code generator has deoptimised the styling of /var/www/discourse/app/assets/javascripts/discourse/ember/ember.js as it exceeds the max of 500KB.

VM의 사양은 어떻게 되나요? 즉, vCPU와 RAM이 각각 얼마나 할당되어 있나요?

둘 다 2/2입니다

메모리를 4GB로 늘리면 도움이 될까요? 메모리 요구량이 증가했을 것 같습니다.

포트 80이 이미 사용 중이고 외부 IP가 하나뿐이라는 점을 고려하면, 설정 과정에서 도메인 확인은 통과되었지만 실제로 동작하려면 호스트 쪽 포트를 변경해야 한다는 사실을 고려하지 못했습니다.

내부에서는 NPM을 사용하고 있습니다.

동작하게 만드는 단계:

  1. HTTP용 호스트 쪽 포트를 7080으로 변경
  2. 트래픽을 프록시 매니저를 통해 전달할 예정이므로, LE 스크립트를 비활성화하여 절차를 간소화했습니다.
  3. 앱을 업데이트했습니다.
  4. 리버스 프록시에서 '외부 IP:80’을 '내부 IP:7080’으로 전달하고, 컨테이너가 포트를 역전시켰습니다… 그 후 포트들이 서로 자리를 바꾸고 원래 자리로 돌아왔습니다. (Hokey Pokey 동작)

지금까지 모든 것이 정상적으로 작동하는 것으로 보입니다.