업그레이드 페이지가 완전히 비어 있습니다

업그레이드 페이지가 완전히 비어 있습니다.

./launcher rebuild app를 실행하여 v2.6.0beta4로 업그레이드했지만, 그 후에도 업그레이드 페이지는 여전히 비어 있습니다. 해당 페이지의 <body> 태그는 다음과 같습니다:

<body class="highlighter-context">


</body>

제안이 있을까요?

사이트 링크를 공유해 주시겠어요?

1개의 좋아요

비공개 포럼이에요. 공유하고 싶은 마음은 있지만, 그게 차이가 있을 거라고 생각해요, 그렇죠?

모든 서드파티 플러그인을 제거하고 다시 빌드하는 것을 권장합니다. 또한 안전 모드도 시도해 보세요:

1개의 좋아요

감사합니다. 이 방법들을 시도해 볼 시간이 생겼습니다. 안전 모드의 다양한 옵션을 사용했지만 도움이 되지 않았습니다. 모든 세부 플러그인을 비활성화하고 docker_manager만 포함해도 아무런 변화가 없었습니다. 여전히 하얀 화면만 표시됩니다.

올해 초에 같은 문제를 겪은 게시글을 보았지만, 원 게시 작성자가 더 이상 답변하지 않아 명확한 원인이나 해결책이 없습니다.

앱의 app.yml 파일을 민감한 정보를 제거한 상태로 게시하는 것을 권장합니다. 문제를 파악하는 데 도움이 될 것입니다.

## 이 파일은 올인원, 스탠드얼론 Discourse Docker 컨테이너 템플릿입니다
##
## 이 파일을 수정한 후에는 반드시 다시 빌드해야 합니다.
## /var/discourse/launcher rebuild app
##
## 편집 시 매우 주의하세요!
## YAML 파일은 공백 또는 정렬 오류에 매우 민감합니다!
## 필요할 경우 http://www.yamllint.com/ 에서 이 파일을 검증하세요

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"
  - "templates/web.socketed.template.yml"

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

params:
  db_default_text_search_config: "pg_catalog.english"

  ## db_shared_buffers는 총 메모리의 최대 25%로 설정하세요.
  ## 감지된 RAM 기반으로 bootstrap이 자동으로 설정하거나, 직접 덮어쓸 수 있습니다.
  db_shared_buffers: "128MB"

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

  ## 이 컨테이너가 어떤 Git 리비전을 사용해야 하나요? (기본값: tests-passed)
  #version: tests-passed

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

  ## 동시 웹 요청을 몇 개까지 지원할 수 있나요? 메모리와 CPU 코어 수에 따라 달라집니다.
  ## 감지된 CPU 기반으로 bootstrap이 자동으로 설정하거나, 직접 덮어쓸 수 있습니다.
  UNICORN_WORKERS: 2

  ## TODO: 이 Discourse 인스턴스가 응답할 도메인 이름
  ## 필수입니다. Discourse는 IP 주소만으로는 작동하지 않습니다.
  DISCOURSE_HOSTNAME: <공개 게시를 위해 제거됨>

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

  ## TODO: 초기 가입 시 관리자 및 개발자로 설정될 쉼표로 구분된 이메일 목록
  ## 예: 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: <공개 게시를 위해 제거됨>

  ## 새 계정을 검증하고 알림을 보내는 데 사용되는 SMTP 메일 서버
  # SMTP 주소, 사용자 이름, 비밀번호가 필요합니다.
  # 경고: SMTP 비밀번호의 '#' 문자는 문제를 일으킬 수 있습니다!
  DISCOURSE_SMTP_ADDRESS: smtp.mailgun.org
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: <공개 게시를 위해 제거됨>
  DISCOURSE_SMTP_PASSWORD: <공개 게시를 위해 제거됨>
  DISCOURSE_SMTP_ENABLE_START_TLS: true           # (선택 사항, 기본값 true)

  ## Lets Encrypt 템플릿을 추가했다면, 무료 SSL 인증서를 받으려면 아래 주석을 해제하세요
  LETSENCRYPT_ACCOUNT_EMAIL: <공개 게시를 위해 제거됨>

  ## 이 Discourse 인스턴스의 http 또는 https CDN 주소 (pull하도록 구성됨)
  ## 자세한 내용은 https://meta.discourse.org/t/14857을 참조하세요
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

  # S3 설정
  DISCOURSE_CDN_URL: <공개 게시를 위해 제거됨>
  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: "us-west-002"
  DISCOURSE_S3_ENDPOINT: https://s3.us-west-002.backblazeb2.com
  DISCOURSE_S3_ACCESS_KEY_ID: <공개 게시를 위해 제거됨>
  DISCOURSE_S3_SECRET_ACCESS_KEY: <공개 게시를 위해 제거됨>
  DISCOURSE_S3_CDN_URL: <공개 게시를 위해 제거됨>
  DISCOURSE_S3_BUCKET: <공개 게시를 위해 제거됨>
  DISCOURSE_S3_BACKUP_BUCKET: <공개 게시를 위해 제거됨>
  DISCOURSE_BACKUP_LOCATION: s3
  DISCOURSE_S3_INSTALL_CORS_RULE: false

## Docker 컨테이너는 상태가 없으며, 모든 데이터는 /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
          - git clone https://github.com/discourse/discourse-user-notes
          - git clone https://github.com/discourse/discourse-assign
          - git clone https://github.com/discourse/discourse-policy
          - git clone https://github.com/discourse/discourse-tooltips
          - git clone https://github.com/discourse/discourse-saved-searches
          - git clone https://github.com/discourse/discourse-knowledge-explorer
          - git clone https://github.com/discourse/discourse-voting
          - git clone https://github.com/discourse/discourse-translator
          - git clone https://github.com/angusmcleod/discourse-elections
          - git clone https://github.com/discourse/discourse-styleguide
          - git clone https://github.com/Ahmedgagan/discourse-custom-trust-level
          - git clone https://github.com/paviliondev/discourse-quick-messages
          - git clone https://github.com/paviliondev/discourse-locations
          - git clone https://github.com/discourse/discourse-calendar

  # 객체 저장소
  after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - su discourse -c 'bundle exec rake s3:upload_assets'

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

음… 여기서 제가 권하는 첫 번째 단계는 이 시스템을 서드파티 플러그인 없이 다시 구축하는 것입니다. /discourse/discourse에 있는 플러그인만 유지하세요.

그렇게 해서 정상 작동하면, 어떤 플러그인이 문제를 일으키는지 바이섹션(bisect)을 통해 찾아낼 수 있습니다.

음, docker_manage 플러그인은 discourse/discourse 경로가 아니지만, 이 플러그인을 비활성화하면 ...admin/upgrade 페이지가 존재하지 않습니다.

docker_manage 플러그인만 활성화해도 동일한 빈 업그레이드 페이지가 표시됩니다.

1개의 좋아요

GitHub - discourse/docker_manager: Plugin for use with discourse docker image · GitHub ?

미안해요, 맞아요. 제가 환각을 본 것 같네요. 그건 빼고, discourse/ 경로에 있는 게 맞습니다.

그래도 여전히 하얀 화면만 보입니다.

2.6.0.beta5가 사용 가능해졌지만(저는 2.6.0.beta4를 사용 중입니다), 여전히 업그레이드 페이지가 빈 화면으로 표시됩니다. 플러그인을 비활성화해 보았지만 해결되지 않아, 추가적인 조언을 주시면 감사하겠습니다.

Chrome 개발자 도구를 확인해 보세요. 페이지가 흰색으로 표시될 때 콘솔에 오류가 있나요? 제 추측으로는 CSP와 관련이 있을 것 같습니다.

1개의 좋아요

고맙습니다, 맞습니다—CDN을 통해 전달되는 스크립트 로딩을 거부하고 있습니다. URL을 정리한 상태입니다:

upgrade:1 Refused to load the script 'https://cdn-to-discourse.b-cdn.net/assets/docker-manager-app-32418f2f7cd50e6f4a0b8d13badc4e59f6a1ad74e7bed270f3a051478fed773d.js' because it violates the following Content Security Policy directive: "script-src https://forum.example.com/logs/ https://forum.example.com/sidekiq/ https://forum.example.com/mini-profiler-resources/ https://cdn-to-s3.b-cdn.net/assets/ https://cdn-to-s3.b-cdn.net/brotli_asset/ https://forum.example.com/extra-locales/ https://cdn-to-discourse.b-cdn.net/highlight-js/ https://cdn-to-discourse.b-cdn.net/javascripts/ https://cdn-to-discourse.b-cdn.net/plugins/ https://cdn-to-discourse.b-cdn.net/theme-javascripts/ https://cdn-to-discourse.b-cdn.net/svg-sprite/ https://matomo.example.com". Note that 'script-src-elem' was not explicitly set, so 'script-src' is used as a fallback.

보안 설정 페이지에는 "현재 호스트와 CDN은 기본적으로 포함됩니다"라고 나와 있습니다. 그럼에도 불구하고 CDN을 화이트리스트에 수동으로 추가해야 할까요?

기본 화이트리스트가 작동하지 않은 이유에 대한 최종 답변 없이 동일한 문제가 여기에서 제기된 것을 확인했습니다.

1개의 좋아요

안녕하세요,

관리자 CSP 설정(콘텐츠 보안 정책 script src)에 이 URL을 추가해야 한다고 생각합니다:

https://cdn-to-discourse.b-cdn.net/assets/

그 후 크롬 개발자 도구에서 에러를 다시 확인해 주세요.

네, 그렇게 하면 작동합니다. 그런데 기본 화이트리스트 기능이 자동으로 이렇게 처리되지 않는 이유가 궁금하네요.

저도 궁금한데요, CDN은 어떻게 설정되어 있나요? docker-manager 플러그인의 어떤 기능이 빠져 있는 것 같습니다.

cc @pmusaraj

4개의 좋아요

네, 맞습니다. docker_manager 플러그인이 템플릿에서 javascript_include_tag를 사용하여 두 개의 JS 파일을 로드하고 있었는데요, 이 태그는 DISCOURSE_S3_CDN_URL을 인식하지 못해 기본값인 DISCOURSE_CDN_URL을 사용하면서 CSP를 위반하고 있었습니다.

현재는 FIX: blank upgrade page when using S3 CDN and CSP · discourse/docker_manager@3d37fd6 · GitHub 커밋을 통해 수정되었습니다.

@paulrudy 님, docker_manager 플러그인을 업데이트하시면 더 이상 CSP에 https://cdn-to-discourse.b-cdn.net/assets/를 수동으로 추가할 필요가 없습니다.

6개의 좋아요

역시 효과가 있었습니다! @sam님과 @pmusaraj님께 감사합니다.

4개의 좋아요