로컬 Discourse를 로컬 Ghost 인스턴스에 임베드할 수 없음

안녕하세요,
로컬 Ghost 설치 환경에서 Discourse를 사용해 보고자 합니다.

대략적으로 가장 쉬운 방법으로 모든 것을 설정했습니다. "Docker를 사용하여 개발용 Discourse 설치하기 입문 가이드"를 따라 Discourse를 설치하고, Ghost CLI를 사용해 Ghost를 설정했습니다.

Ghost는 localhost:2368, Discourse는 localhost:9292에서 실행됩니다.

localhost:2368을 Customize/Embedding 허용 호스트에 추가했습니다(클래스 이름, 경로 허용 목록 또는 포스트 카테고리 설정 없이).

코드 스니펫을 추가한 후(물론 플레이스홀더를 올바르게 교체한 후) "Loading discussion…"라고 표시되는 Discourse 임베드가 생성됩니다. 하지만 몇 초 후 콘솔 오류가 기록됩니다.

Failed to execute ‘postMessage’ on ‘DOMWindow’: The target origin provided (‘http://localhost:9292’) does not match the recipient window’s origin (‘http://localhost:2368’).

무엇을 놓치고 있는 걸까요?

감사합니다!

(전문가나 팀이 아닙니다)

iframe이 로드되지 않으면 해당 오류가 발생합니다.

허용된 호스트에 localhost:2368을 추가할 때, 끝에 슬래시를 붙이거나 붙이지 않거나, 와일드카드를 사용하는 경우를 모두 시도해 보세요.

페이지는 로드될 수 있지만, 그 안의 콘텐츠가 외부로 링크를 하지 않아 로드 과정에서 이러한 문제가 발생할 수 있습니다.

그럼에도 불구하고 저는 곧 출시될 ghost를 직접 사용해 보고 싶었습니다. 이 주제를 계속 지켜보며, 이것이 여러분이 겪는 유일한 문제이기를 바랍니다. :slight_smile:

불행히도 아직 해결책을 찾지 못했습니다 :frowning:

비표준 포트에서 프로덕션 인스턴스를 실행하려는 것 같습니다. 이는 Discourse에서 지원되지 않습니다.

프로덕션 인스턴스요? 로컬에서 개발용으로 Discourse를 설치하는 가이드를 따랐는데, 로컬 사용에는 이게 적절한 설치 방식이 아닌가요? 설치 자체는 완벽하게 잘 되는데, 임베딩 부분에서만 문제가 생기고 있습니다.

실제 포트가 아닌 실제 호스트네임을 사용하여 이를 테스트하는 방법을 찾아야 할 것 같습니다.

nginx로 프록시를 설정해 봐야겠네요. 감사합니다.

Ghost와 Discourse 각각을 위한 nginx 프록시 두 개를 추가해 보았습니다. 각각 ghost.localhost와 discourse.localhost에서 실행 중입니다. 모든 URL을 프록시로 변경한 후, 오류가 다음과 같이 변했습니다:

Failed to execute ‘postMessage’ on ‘Window’: Invalid target origin ‘’ in a call to ‘postMessage’.

discourseUrl에 http://discourse.localhost/ 대신 http://localhost:9292/를 사용하면 더 이상 오류가 발생하지 않지만, 댓글이 무한 루프에 갇혀 있습니다(몇 초마다 일부 요청을 보내며 “Loading discussions” 상태가 계속 유지됨).

nginx 설정은 비교적 간단합니다:

server {
  listen 80;
  server_name discourse.localhost;

  access_log /var/log/nginx/discourse.localhost-access.log;
  error_log /var/log/nginx/discourse.localhost-error.log;
  
  location / {
    proxy_pass         http://127.0.0.1:9292;
    proxy_set_header   X-Forwarded-For $remote_addr;
    proxy_set_header   Host $http_host;
  }
}

ghost 설정의 경우 discourse 대신 ghost를 사용하시면 됩니다.