디스코스 팀 및 커뮤니티 여러분께,
셀프호스팅된 디스코스 인스턴스에서 외부 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_...)와 함께 로드되지 않는 것을 볼 수 있습니다.
진행한 디버깅 단계:
-
Cloudflare R2 시도:
-
Cloudflare R2 버킷을 구성하고 API 토큰(Object Read & Write)을 생성했으며, Cloudflare DNS를 통해 커스텀 도메인(
s3.ryzelan.sbs)을 연결했습니다. -
app.yml에 R2 자격 증명을 설정하고, 커스텀 도메인을 엔드포인트/CDN URL로 지정했으며,DISCOURSE_FORCE_HTTPS: true와DISCOURSE_S3_FORCE_PATH_STYLE: true를 설정했습니다.
-
-
핵심 테스트 - 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와 관련된 알려진 문제가 이 문제를 일으키고 있을 수 있나요?
소중한 시간 내어 주시고 통찰을 공유해 주셔서 감사합니다.
