Cloudflare R2에 대한 개발이 아직 없는 건가요? 제 생각에는 꽤 괜찮아 보였는데…
위쪽에 있는 관련 메모를 읽으셨나요? gzip 파일과 호환되지 않으며, 이를 변경할 계획이 있다는 언급도 없었습니다. 업로드를 제외한 모든 것과 작동하는 건가요?
직접 시도해 보셨나요? 제대로 작동했나요?
네, 읽었습니다. 하지만 2년 전의 일이었고, 일부 사항이 변경되었을 수 있습니다.
오늘 직접 시도해 보기 위해 R2를 활성화하고 사이트를 추가했습니다. 다만 Discourse 단계에서 이 부분을 어떻게 설정해야 할지 확실하지 않습니다. 아직 Cloudflare에서 키나 시크릿 코드를 어디서 가져와야 하는지 찾지 못했기 때문입니다. 실험 중인데, 작은 힌트라도 도움이 될 것 같습니다 ![]()
나도
버킷은 활성화되어 있지만, 아직 Discourse가 이를 지원하지 않을 수도 있어요. 하지만 이 기능이 지원되길 바랍니다.
이 페이지에서 키를 가져오는 방법을 설명합니다: Authentication · Cloudflare R2 docs
여러 가지를 시도해 보았지만 항상 이 오류가 발생합니다:
Aws::S3::Errors::BadRequest
무엇을 놓치고 있는지 궁금합니다.
R2 패널에서 이미지를 업로드하면 해당 이미지가 특수한 CDN URL로 열립니다. 문제는 사이트에서 이미지가 로드되지 않는다는 것입니다. CORS를 생성하고 모든 메서드를 활성화했습니다.
[
{
"AllowedOrigins": [
"https://SITENAME.com"
],
"AllowedMethods": [
"GET",
"POST",
"HEAD",
"DELETE",
"PUT"
]
}
]
어떤 아이디어라도 있을까요?
가능합니다. 하지만 2년 전 Cloudflare의 공식 입장은 변경될 가능성이 낮다는 것이었으므로, R2에 정말 관심이 있는 사람은 직접 확인해 봐야 할 것입니다. 다만, gz 파일만 제외하고는 모든 것에 작동할 수 있을 것 같습니다. 제 생각에는 gz 파일은 백업에 해당합니다.
하지만 s3 백업 기능을 포기하는 것은 상당한 손실인 것 같습니다.
올바른 키나 엔드포인트를 가지고 있지 않은 것 같습니다.
솔직히 현재 내 디스커스 사이트에는 Cloudflare를 사용하고 있으며, 모든 것을 한 곳에서 관리할 수 있다는 점은 일반적으로 좋은 점입니다. 그래서 R2를 사용하면서 Amazon을 별도로 다루는 것은 다소 번거로울 수 있습니다. 한동안 Amazon S3 설치를 시도해 보았지만, 어떤 이유에서인지 스타일 파일이 로드되지 않았습니다. (괜찮습니다, 다시 시도해 보겠습니다) 하지만 Cloudflare를 무시하는 것은 좋지 않으며, 특히 Cloudflare 지원 포럼에서 디스커스를 사용할 때 더욱 그렇습니다 ![]()
보통은 s3로 에셋을 푸시하는 스탠스를 추가하지 않았을 때 발생합니다. (use_s3 변수를 설정한 경우, s3 유사 서비스가 작동하려면 이것도 필요합니다.)
그렇다면 다른 방법을 시도해서 문제를 해결했나요? 어떤 조치를 취했나요? Configure an S3 compatible object storage provider for uploads에서 다른 사람들이 한 것처럼 정리해서 작성해 주실 수 있나요?
백업에도 정상적으로 작동하나요?
할 수 있는 모든 방법을 시도해 보았습니다. 설정을 변경하여 실험적으로 진행해 보았지만, 매번 이 오류가 발생하며 오류를 살펴보면 이미지가 로드되지 않은 것 같습니다.
오류 코드에서도 특별한 내용을 찾을 수 없었습니다. 대부분의 기능이 하나의 패널(Cloudflare)에서 처리된다면 매우 매력적이고 효율적일 것 같습니다.
백업용으로 시도해 보았으며, 죄송합니다. 실패하자마자 다시 Amazon으로 돌아갔습니다. 이 부분에 대해 저보다 더 성공적인 사례를 가진 분이 계시다면 매우 기쁠 것입니다. ![]()
R2 패널에서 이미지를 업로드하면 접근할 수 있습니다. 하지만 Discourse를 통해 이미지를 업로드하면 위의 오류가 발생합니다.
그래서, 아마도 문서에 나와 있는 것과 달리 작동하지 않는 것이 아닌가 싶습니다.
아니면 제가 당신에게 사과를 해야 할지도 모릅니다. 제가 실제로 작동하게 만든 것 같긴 하지만, 당신이 작동하게 만들 수 있도록 설명서를 작성할 수 있다고 약속할 시간은 없습니다.
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: 'auto'
DISCOURSE_S3_ENDPOINT: https://=ACCOUNT_ID=.r2.cloudflarestorage.com
DISCOURSE_S3_ACCESS_KEY_ID: '=ACCESS_KEY_ID='
DISCOURSE_S3_SECRET_ACCESS_KEY: '=SECRET_ACCESS_KEY'
DISCOURSE_S3_CDN_URL: '=S3_CDN_URL='
DISCOURSE_CDN_URL: '=CDN_URL='
DISCOURSE_S3_BUCKET: '=BUCKET='
DISCOURSE_S3_BACKUP_BUCKET: '=BUCKET=/backups'
DISCOURSE_BACKUP_LOCATION: 's3'
업로드를 S3로 푸시하는 rake 작업을 수행하는 스타너(stanza)를 잊지 마세요.
이것을 시도해 보고 당신에게 작동하는지 확인해 보세요. 빠른 테스트 결과 업로드, 자산, 백업 모두 작동하는 것으로 나타났습니다. 따라서 gzip 파일 관련 문제는 더 이상 적용되지 않는 것 같습니다.
지역(auto)과 마지막 URL을 수정한 후에는 정상적으로 작동했습니다. 하지만 문제가 있습니다. 재생성하면 스타일 파일이 로드되지 않아 당연히 사이트가 열리지 않습니다. 그러나 업로드용으로만 열면 사이트에서 이미지를 업로드할 수 있고, CDN URL을 통해 접근할 수 있습니다. 유일한 문제는 스타일 파일이 CDN에서 서빙되도록 하고 싶은 것입니다. 이를 어떻게 할 수 있을까요? 이것이 우리가 해결해야 할 유일한 문제라고 생각합니다.
S3에 에셋을 전송하려면 다음 지침을 따르세요:
CDN으로 무엇을 사용하셨나요? Cloudflare을 사용하셨다면 어떻게 구성하셨나요?
after_assets_precompile:
- exec:
cd: $home
cmd:
- sudo -E -u discourse bundle exec rake s3:upload_assets
- sudo -E -u discourse bundle exec rake s3:expire_missing_assets
위 내용을 추가했습니다. 재컴파일하면 사이트의 모든 링크가 CDN URL로 변경됩니다. 그러나 이 스타일 파일은 Cloudflare에 업로드되지 않습니다. 그래서 app.yml 파일에 업로드 영역 설정을 추가하고 그 방식으로 컴파일했습니다. 관리자에서 S3를 활성화하면 새로 업로드된 이미지는 Cloudflare R2에 업로드되고 접근이 가능합니다.
유일한 문제는 app.yml 파일을 컴파일하기 전에 s3 설정을 추가하면 새로 생성된 스타일 파일이 로드되지 않는 것처럼 보인다는 점입니다. 하지만 사이트의 URL과 CDN URL은 변경됩니다.
CORS:
[
{
"AllowedOrigins": [
"https://domain.com"
],
"AllowedMethods": [
"GET",
"POST",
"PUT",
"HEAD",
"DELETE"
]
}
]
이 문제가 Argo와 관련이 있을까요? 하지만 현재 이미지는 아무 문제 없이 로드되고 있습니다.
디버깅을 하려면 컨테이너에 진입하여 거기서 rake 태스크를 실행해 보고 어떤 일이 일어나는지 확인해 볼 수 있습니다.
어제 이 문제로 약 4시간을 보냈기 때문에, 이 프로젝트에 대한 무료 지원은 이제 거의 한계에 도달한 것 같습니다.
CORS 관련 사항은 잘 모르겠습니다. 문제가 CORS 때문이 아닌지 확인하기 위해 어디서든 모든 것을 허용하도록 설정해 보세요. 제 테스트 사이트에서는 CORS에 대해 아무것도 설정하지 않았습니다.
k8s에서 이 것을 실행하고 계신가요?
시간을 잡아드려서 죄송합니다. 가능하다면 금전적으로라도 도움을 드리고 싶습니다. 당신의 시간을 소중히 생각합니다.
k8s가 무엇인지 잘 모르겠습니다. 저는 제 서버에서 작업을 하고 있으며, argo를 활성화했습니다. R2도 활성화되어 있습니다. 지금은 모든 것이 아주 잘 작동하고 있지만, 새로운 컴파일을 한 후 스타일 파일(js, css 등)이 R2에 로드되지 않습니다. 나중에 필요한 테스트를 다시 실행해서 여기에 추가하겠습니다. 성공적으로 해결할 수 있다면, 문제를 찾는 방법이나 정상적으로 작동하게 만드는 방법에 대해 자세히 설명드리겠습니다.
Argo란 무엇인가요?
표준 설치인 경우 컨테이너 내에서 rake 명령을 실행할 수 있습니다.
./launcher enter app
rake ...
USE_S3 부분을 포함하고 있는지 확인하셨나요? (CDN에서 예상되는 에셋을 만드는 것이 바로 그것이라고 생각하므로, 포함하고 계실 것 같습니다)
Argo: Overview · Cloudflare Argo Smart Routing docs
컴파일 전에 USE_S3 설정을 추가했습니다. 아래는 예시입니다:
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: 'auto'
DISCOURSE_S3_ENDPOINT: 'https://xxxxxxxxxxxxxxxxx.eu.r2.cloudflarestorage.com'
DISCOURSE_S3_ACCESS_KEY_ID: 'xxxxxxxxxxxxxxxxx'
DISCOURSE_S3_SECRET_ACCESS_KEY: 'xxxxxxxxxxxxxxxxx'
DISCOURSE_S3_CDN_URL: 'https://cdn.domain.com'
DISCOURSE_CDN_URL: 'https://cdn.domain.com'
DISCOURSE_S3_BUCKET: 'cloudflaredomain'
DISCOURSE_S3_BACKUP_BUCKET: 'cloudflaredomain/backups'
DISCOURSE_BACKUP_LOCATION: 's3'
재컴파일 후, 모든 URL이 예상대로 cdn url로 변경되었습니다. 유일한 문제는 이 자산들이 R2로 로드되지 않는다는 점입니다. 이미 다음 설정을 추가해 두었습니다:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
after_assets_precompile:
- exec:
cd: $home
cmd:
- sudo -E -u discourse bundle exec rake s3:upload_assets
- sudo -E -u discourse bundle exec rake s3:expire_missing_assets
app.yml의 시작 부분입니다:
templates:
#- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
## Uncomment the next line to enable the IPv6 listener
#- "templates/web.ipv6.template.yml"
#- "templates/web.ratelimited.template.yml"
## Uncomment these two lines if you wish to add Lets Encrypt (https)
# - "templates/web.ssl.template.yml"
# - "templates/web.letsencrypt.ssl.template.yml"
- "templates/cloudflare.template.yml"
## which TCP/IP ports should this container expose?
## If you want Discourse to share a port with another webserver like Apache or nginx,
## see https://meta.discourse.org/t/17247 for details
expose:
- "80:80" # http
- "443:443" # https
이제 컨테이너에 진입하여 자산을 S3로 업로드해 보겠습니다.