브라우저에서 업그레이드 후 S3에 에셋 업로드

사이트의 이미지와 자산(js)을 S3로 이동한 후, /admin/upgrade 인터페이스를 사용하여 포럼을 업그레이드했습니다. 업그레이드는 정상적으로 진행되었지만, 자산이 S3 버킷에 업로드되지 않은 것으로 보이며, 그 결과 셸에서 앱을 다시 빌드할 때까지 사이트가 이용 불가능한 상태였습니다.

셸에서는 이를 대신 처리하는 훅이 있습니다. 웹 인터페이스에도 이러한 기능이 있으면 좋겠습니다. 이미 해당 기능이 있는지 잘 모르겠습니다. 있다면 알려주시면 감사하겠습니다. :slight_smile:

  after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets

아니요, 관리 영역에서 S3로 자산을 이동할 수 없습니다. 새 설치 환경이 아니라면, 이 마이그레이션 시점에 추가적인 작업이 필요하기 때문에 SSH를 통해 직접 수행해야 합니다.

아, 그렇군요. S3로 전환하기 전까지는 다운타임 없이 업그레이드되는 무중단 방식이 마음에 들었어요. JS는 S3로 서빙하지 않고 이미지만 S3로 서빙하는 방법이 있을까요?

S3를 통해 JavaScript를 서빙할 수 없습니다. S3로는 미디어(이미지/문서/비디오 등)를 업로드하고 서빙하는 것만 가능합니다.

JavaScript의 경우 CloudFront와 같은 CDN이 필요합니다.

네, 저는 JS를 S3에서 직접 서빙하는 것이 아니라, S3에 저장한 후 CDN을 통해 서빙하고 있습니다. 제가 묻고자 했던 것은 JS를 로컬에 저장하고 CDN을 통해 서빙하면서, 미디어만 S3에 저장할 수 있는지에 대한 것이었습니다.

또다시 완전히 잘못 이해하고 계신 것 같습니다.
Discourse JS는 Discourse 설치본이 풀 소스로 사용되어 CDN을 통해 직접 서빙되도록 설계되어 있습니다. JS를 S3에 어떻게 올리는지는 모르겠지만, JS는 재빌드 시 재생성됩니다. S3를 통해 서빙되는 파일은 아마도 오래된 버전일 것이며, 더 많은 문제를 초래하게 될 것입니다.

이 링크(Configure an S3 compatible object storage provider for uploads)를 따라 S3 설정을 한 이후부터 이런 문제가 발생하기 시작했습니다.

그래서 업데이트된 자산을 S3에 업로드하기 위해 after_assets_precompile 훅을 추가한 것입니다.

이를 어떻게 수정해야 할까요? 로컬 서버를 통해 자산을 접근하려고 하면 404 오류가 발생합니다. S3를 통해서만 접근해야 합니다. 그렇지 않았다면 CDN에 엣지 라우팅 규칙을 설정하여 로컬 도메인을 통해 자산 요청을 처리했을 것입니다.

게시물 제목을 읽으면 "업로드용 객체 저장소"라고 되어 있으니, 제목만으로도 충분히 알 수 있습니다.

"로컬 도메인"이라고 한 것은 무슨 뜻인가요? Discourse가 어디에 설치되어 있나요?

로컬 도메인이라고 한 것은 내 discourse가 설치된 서버를 의미합니다. 예를 들어 js 파일이 s3가 아니라 nginx 서버에 로컬로 저장되어 있는 경우를 말합니다.

불행히도, 해당 주제에서 언급된 내용은 그렇게 하지 않습니다. 해당 주제가 실제로는 "업로드용 객체 저장소 사용(using object storage for uploads)"이라고 명명되어 있음에도 불구하고, 그 주제의 지침에 따라 포럼을 설정하면 자산을 S3로 푸시(push)해야 합니다.

Discourse 설치 서버에 JS 파일을 유지할 수 있도록 설정하는 방법은 무엇인가요?