Ghost Discourse 연동

Ghost와 Discourse 간 통합 설정에 어려움을 겪고 있습니다.

Discourse 버전: 2.8.0.beta1, Ubuntu에서 Docker 사용 - nginx 없음

NAT가 적용된 가정용 LAN 환경에서 단일 IP 라우터 뒤에 독립형 시스템으로 Traefik을 사용 중입니다. Traefik은 http/s 라우팅을 허용합니다.

Traefik은 Docker 라벨 대신 traefik_dynamic.toml 파일로 구성되어 있습니다. 공유 Docker 네트워크는 없습니다. (Traefik 구성에 관심이 있으신 분은 제게 메시지를 주세요. 리버스 프록시로 꽤 잘 작동합니다.)

Ghost도 최신 버전(4.6.4)이며 별도의 호스트에서 실행됩니다. (두 호스트 모두 Proxmox에서 실행 중인 Ubuntu VM이며, VERSION="20.04.2 LTS (Focal Fossa)"입니다.)

Ghost 문서 사이트와 Discourse 포럼에서 제공되는 다양한 튜토리얼 페이지를 따라 진행했습니다.

Firefox 웹 개발자 도구에 따르면 해당 페이지는 다음 페이지 소스를 반환합니다:

<div class="comment container small">

<div class="discourse-comments"></div>
    <script type="text/javascript">
     if (window.location.pathname.indexOf('/p/') < 0) {
      DiscourseEmbed = { discourseUrl: 'https://discourse.mydomain/', discourseEmbedUrl: 'https://ghost.mydomain/testing-new-stuff/' };

  (function() {
    var d = document.createElement('script'); d.type = 'text/javascript'; d.async = true;
    d.src = DiscourseEmbed.discourseUrl + 'javascripts/embed.js';
    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(d);
  })();
}
</script>
</div>

그러나 실제 댓글은 반환되지 않습니다. Discourse 호스트가 embed.js를 반환하는 것을 볼 수 있지만, 페이지에는 아무것도 표시되지 않습니다. (죄송합니다. 웹 개발자 출신이 아닙니다.)

즉, 스크립트는 전달되고 있지만 아무것도 반환되지 않는 것으로 보입니다.

새로 설치한 Discourse이며 아직 학습 모드(bootstrap mode)에 있습니다. 따라서 아직 토픽이 거의 없습니다.

app.yml은 아래에 첨부되어 있습니다.

임베드된 호스트 설정은 토픽 생성을 위한 Discourse 관리자 계정으로 설정되어 있다고 생각하며, 경로 허용 목록(path allowlist)은 현재 “”(빈 문자열)입니다.

testing이라는 카테고리를 생성하여 게시물에 카테고리로 추가했습니다.

또한 도움이 될 수도 있으므로 app.yml에 DISCOURSE_ENABLE_CORS: true를 추가했습니다. 프록시와 http://ghost.mydomain, http://ghost.mydomain을 CORS 원본(cors origins)에 추가했습니다.

이 문제를 디버깅하는 방법에 대해 조언해 주실 수 있는 분이 있을까요?

app.yml:
#
templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Lets Encrypt(https)를 추가하려면 이 두 줄의 주석을 해제하세요
#  - "templates/web.ssl.template.yml"
#  - "templates/web.letsencrypt.ssl.template.yml"

## 이 컨테이너가 노출해야 하는 TCP/IP 포트는 무엇인가요?
## Apache나 nginx와 같은 다른 웹서버와 Discourse가 포트를 공유하려면,
## 자세한 내용은 https://meta.discourse.org/t/17247을 참조하세요
expose:
  - "8081:80"   # http
    #  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## db_shared_buffers는 총 메모리의 최대 25%로 설정하세요.
  ## bootstrap이 감지된 RAM에 따라 자동으로 설정되거나, 직접 오버라이드할 수 있습니다
  db_shared_buffers: "2048MB"

  ## 정렬 성능을 향상시킬 수 있지만, 연결당 메모리 사용량이 증가합니다
  #db_work_mem: "40MB"

  ## 이 컨테이너가 사용할 Git 리비전 (기본값: tests-passed)
  #version: tests-passed

env:
 LC_ALL: en_US.UTF-8
  LANG: en_US.UTF-8
  LANGUAGE: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  DISCOURSE_ENABLE_CORS: true

  ## 동시에 지원되는 웹 요청 수? 메모리와 CPU 코어에 따라 다릅니다.
  ## bootstrap이 감지된 CPU에 따라 자동으로 설정되거나, 직접 오버라이드할 수 있습니다
  UNICORN_WORKERS: 2

  ## TODO: 이 Discourse 인스턴스가 응답할 도메인 이름
  ## 필수 항목입니다. Discourse는 IP 주소만으로는 작동하지 않습니다.
  DISCOURSE_HOSTNAME: mydiscoursehost.mydomain

  ## 컨테이너가 위에서 지정된 것과 동일한 호스트네임(-h 옵션)
  ##으로 시작되도록 하려면 주석을 해제하세요 (기본값 "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: 초기 가입 시 관리자 및 개발자로 설정될 쉼표로 구분된 이메일 목록
  ## 예: 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'myemailaddress@mydomain'

  ## 새 계정을 검증하고 알림을 보내는 데 사용되는 SMTP 메일 서버
  # SMTP 주소, 사용자 이름, 비밀번호는 필수입니다
  # 경고: SMTP 비밀번호에 '#' 문자가 있으면 문제가 발생할 수 있습니다!
  DISCOURSE_SMTP_ADDRESS: smtp.mailgun.org
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: postmaster@mydomain
  DISCOURSE_SMTP_PASSWORD: "mypostmasterpassword7"
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (선택 사항, 기본값 true)
  DISCOURSE_SMTP_DOMAIN: mydomain
  DISCOURSE_NOTIFICATION_EMAIL: noreply@mydomain

  ## Lets Encrypt 템플릿을 추가했다면 무료 SSL 인증서를 받으려면 아래 주석을 해제하세요
  #  LETSENCRYPT_ACCOUNT_EMAIL: notused

  ## 이 Discourse 인스턴스의 http 또는 https CDN 주소 (추출하도록 구성됨)
  ## 자세한 내용은 https://meta.discourse.org/t/14857을 참조하세요
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com
 
  ## IP 주소 조회를 위한 maxmind 지리 위치 IP 주소 키
  ## 자세한 내용은 https://meta.discourse.org/t/-/137387/23을 참조하세요
  #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456

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

## 플러그인은 여기에 설치합니다
## 자세한 내용은 https://meta.discourse.org/t/19157을 참조하세요
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## 빌드 후 실행할 사용자 지정 명령
run:
  - exec: echo "Beginning of custom commands"
  ## 첫 번째 가입 시 'From' 이메일 주소를 설정하려면 주석을 해제하고 변경하세요:
  ## 첫 번째 가입 이메일을 받은 후, 해당 줄의 주석을 다시 처리하세요. 한 번만 실행하면 됩니다.
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "End of custom commands"