S3 업로드 문제 해결: 재빌드 후 사이트가 멈추고 R2 및 GCS 모두에서 net::ERR_... 오류로 JS 자산을 불러오지 못함

디스코스 팀 및 커뮤니티 여러분께,

셀프호스팅된 디스코스 인스턴스에서 외부 S3 호환 객체 스토리지를 사용하도록 설정하려고 시도하고 있지만, 매우 고질적이고 이례적인 문제에 직면했습니다. 도움이 될 수 있다면 감사하겠습니다.

제 환경:

  • 디스코스 버전: 표준 Docker 설치, 최신 tests-passed.

  • 호스트: [YOUR VPS PROVIDER and OS] (여기에 VPS 제공업체와 운영체제를 입력하세요)

  • 리버스 프록시: Caddy

목표: 모든 업로드(사용자 업로드 및 사이트 자산)를 로컬 스토리지에서 외부 제공업체로 이동하는 것입니다.

문제 요약: S3(Cloudflare R2 또는 Google Cloud Storage)를 위해 app.yml을 구성하고 ./launcher rebuild app을 실행한 후, 사이트가 초기 로딩 화면(파란색 스피너)에서 멈춥니다. 브라우저 개발자 도구를 확인해 보니 대부분의 핵심 JavaScript 자산이 외부 CDN URL에서 일반적인 네트워크 오류(net::ERR_...)와 함께 로드되지 않는 것을 볼 수 있습니다.

진행한 디버깅 단계:

  1. Cloudflare R2 시도:

    • Cloudflare R2 버킷을 구성하고 API 토큰(Object Read & Write)을 생성했으며, Cloudflare DNS를 통해 커스텀 도메인(s3.ryzelan.sbs)을 연결했습니다.

    • app.yml에 R2 자격 증명을 설정하고, 커스텀 도메인을 엔드포인트/CDN URL로 지정했으며, DISCOURSE_FORCE_HTTPS: trueDISCOURSE_S3_FORCE_PATH_STYLE: true를 설정했습니다.

  2. 핵심 테스트 - Google Cloud Storage로 전환:

    • Cloudflare 특정 문제를 배제하기 위해 모든 변경 사항을 되돌리고 S3 호환 키를 사용하여 Google Cloud Storage로 새로 설정했습니다.

    • GCS 구성으로 재빌드한 후, R2와 정확히 동일한 JavaScript 로드 실패 패턴을 확인했습니다.

현재 상태:

  • ./launcher rebuild app 프로세스는 터미널에 오류가 표시되지 않고 완료됩니다.

  • 재빌드 후 app 컨테이너가 정상적으로 실행 중입니다(docker ps로 확인함).

  • ./launcher logs app 명령어에서 오류가 표시되지 않으며, 모든 내부 서비스(unicorn, redis, postgres)가 정상적으로 실행 중인 것으로 보입니다.

  • 문제는 브라우저가 구성된 외부 CDN URL에서 JS 자산을 가져오려 할 때 발생하는 네트워크 수준의 실패인 것 같으며, 이는 어떤 제공업체(R2 또는 GCS)를 사용하든 발생합니다.

다음은 R2에 사용했던 최종 app.yml 구성 블록입니다(GCS 구성은 유사했습니다):

— Cloudflare R2 S3 구성 시작 (최종 버전) —

DISCOURSE_FORCE_HTTPS: true
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: “us-east-1”
DISCOURSE_S3_ENDPOINT: “https://s3.ryzelan.sbs
DISCOURSE_S3_CDN_URL: “https://s3.ryzelan.sbs
DISCOURSE_S3_ACCESS_KEY_ID: “REDACTED”
DISCOURSE_S3_SECRET_ACCESS_KEY: “REDACTED”
DISCOURSE_S3_BUCKET: “ryzelan-discourse”
DISCOURSE_S3_FORCE_PATH_STYLE: true

— Cloudflare R2 S3 구성 끝 —

질문: 새로운 디스코스 재빌드가 두 개의 서로 다른 주요 클라우드 제공업체에서 네트워크 오류와 함께 자체 자산을 로드하지 못하는 원인은 무엇일까요? 특정 VPS 네트워크 환경, Docker 네트워크, 또는 Caddy와 관련된 알려진 문제가 이 문제를 일으키고 있을 수 있나요?

소중한 시간 내어 주시고 통찰을 공유해 주셔서 감사합니다.

S3에 해당 에셋을 업로드하기 위해 bit를 포함했나요?

이렇게 하지 않으면 S3에 에셋이 전혀 존재하지 않아 사이트가 로드되지 않습니다.

@Ryze_Chen 문제가 해결되었나요?