업로드를 위해 S3 호환 객체 저장소 제공자 구성하기

Contabo S3 지원/호환성이 추가될 예정인가요? 아니면 작동하도록 하는 우회 방법을 찾으신 분이 계신가요?

2개의 좋아요

우리는 Discourse 유지보수 팀으로서 AWS S3만 지원합니다. 여기에 나열된 프로바이더들은 우리가 또는 커뮤니티가 S3 API를 Discourse와 호환되도록 구현하는 데 충분한지 테스트한 것입니다.

OP의 언급에 따르면, @tuxed가 Contabo를 테스트해 보았으나 부족함이 있는 것으로 나타났습니다. Contabo가 S3와의 구현 준수성을 발전시킬지 여부는 비즈니스 이익에 부합한다고 판단할 경우에만 해당되며, 우리가 대신 해결해 줄 수 있는 문제가 아닙니다.

4개의 좋아요

여전히 버그가 있나요? 왜 Digitalocean CDN이 좋지 않나요?

1개의 좋아요

링크를 확인해 보셨나요?

CDN이 메타데이터를 인식하지 못하는 것 같습니다. 하지만 작동하는지 확인해 볼 수는 있겠죠! 시도해 보시면 알려주세요. 얼마 전 수정되었을지 궁금했습니다. 문서 내용을 보면, 당분간 제가 직접 시도해 볼 일은 없을 것 같습니다.

2개의 좋아요

DigitalOcean의 포럼에 CDN 지원을 쉽게 추가할 수 있는 방법을 찾고 있습니다. S3가 더 쉬우면 그 옵션을 선택하겠습니다.

이전에 잘 작동하지 않았던 설정은 위험을 감수하고 싶지 않습니다.

2개의 좋아요

권장하는 해결 방법은 그들의 CDN을 사용하지 않는 것입니다. 위의 지시에 따라 bunny.net와 같은 서비스를 CDN으로 사용하면 됩니다. 저렴하고 간단합니다.

AWS S3는 cdck에서 사용하는 서비스이므로 테스트와 지원 측면에서 약간 더 우수합니다. 하지만 이미 AWS에 익숙하지 않다면, Spaces 버킷이 좋은 해결책이 될 수 있습니다. 다만 DigitalOcean CDN은 사용하지 않는 것이 좋습니다.

2개의 좋아요

저도 이 과정을 거쳤습니다 - CDN 설정, 지금은 이미지를 로컬에 유지 - 처음에는 Fastly를 사용했고, 그 후에는 이름이 기억나지 않는 다른 서비스를 사용했습니다. 결국 bunny.net로 정착했습니다. 설정이 매우 쉽습니다. Discourse에 특화된 사용 가이드도 있습니다. 우리는 DO에서 자체 호스팅을 하고 있으며 이미지 용량이 100GB 이상입니다. 캐시 히트율이 65%이며 계속 상승하고 있습니다.

2개의 좋아요

s3 configure tombstone policy는 aws.amazon에서만 작동합니까?

1개의 좋아요

아니요. backblaze에서만 발생하는 문제입니다.

2개의 좋아요

3개의 게시물이 새로운 주제로 분리되었습니다: 사용자 프로필 사진 업로드 문제 해결책 탐구

후, 어디서부터 시작해야 할지 모르겠네요. Cloudflare를 캐싱과 DNS에 사용하고 있고, Backblaze B2를 스토리지로 사용하고 있습니다. 작동은 하게 되었지만, 부분적으로만 작동합니다. ./launcher rebuild app를 실행하는 동안 에셋이 업로드되는 것을 보고, 작동하는 것 같아서 정말 기뻤습니다. 재빌드가 성공적으로 완료된 후에도 사이트를 접근할 수 없었습니다. 페이지 중앙에 움직이는 점들만 표시될 뿐입니다.

Backblaze의 Deliver Public Backblaze B2 Content Through Cloudflare CDN 문서에 따라, Friendly URL 오리지인 f000.backblazeb2.com을 가리키는 Proxied CNAME 레코드 gtech-cdn을 설정했습니다.

CNAME gtech-cdn → f000.backblazeb2.com

해당 문서에는 Page Rules에 대한 내용도 언급되어 있는데, Page Rules를 켜고 끄기를 반복해 봤지만 효과가 없었습니다.

관련된 설정 항목은 다음과 같습니다:

  DISCOURSE_HOSTNAME: mmhmm.com

  DISCOURSE_CDN_URL: https://mmhmm.com

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: us-west-000
  DISCOURSE_S3_ENDPOINT: https://s3.us-west-000.backblazeb2.com
  DISCOURSE_S3_ACCESS_KEY_ID: <secret>
  DISCOURSE_S3_SECRET_ACCESS_KEY: <secret>
  DISCOURSE_S3_CDN_URL: https://gtech-cdn.mmhmm.com
  DISCOURSE_S3_BUCKET: gtech-uploads
  DISCOURSE_S3_BACKUP_BUCKET: gtech-uploads/backups
  DISCOURSE_BACKUP_LOCATION: s3

**hooks:** 섹션 아래에...

  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

제게 혼란을 주는 것 중 하나는 DISCOURSE_S3_CDN_URL과 DISCOURSE_CDN_URL 두 변수에 무엇을 입력해야 하는지입니다. 제가 제공한 정보에 기반하여 올바르게 설정된 것일까요?

브라우저 개발자 도구 콘솔을 보면 .js 스크립트에서 404 오류가 발생하고 있습니다. URL이 제대로 생성되지 않는 것으로 보입니다. /assets 앞에 /file/<버킷명>이 있어야 하지 않나요? 이를 수동으로 추가하여 올바른 URL을 만들면 작동합니다:

https://gtech-cdn.mmhmm.com/file/gtech-uploads/assets/google-universal-analytics-v4-e154af4adb3c483a3aba7f9a7229b8881cdc5cf369290923d965a2ad30163ae8.br.js

도움 주시면 정말 감사하겠습니다!!!

1개의 좋아요

https://gtech-cdn.mmhmm.com 도메인이 해석되지 않으므로, 이것이 가장 먼저 해결해야 할 문제입니다.

Cloudflare을 CDN으로 그렇게 사용할 수 있는지는 확실하지 않지만, 제가 틀렸을 수도 있습니다.

1개의 좋아요

죄송합니다. mmhmm.com이 가짜 도메인이라는 점을 언급했어야 했는데 그러지 못했네요. 이 도메인은 ping 요청에는 응답합니다.

Cloudflare를 CDN으로 사용할 수 없다는 부분에 대해서는 잘 이해가 되지 않습니다. 제가 링크한 기사는 명확하게 Cloudflare를 CDN으로 사용하는 방법을 다루고 있습니다. 만약 이것이 사실이 아니라면, 다시 한번 묻자면 DISCOURSE_S3_CDN_URL과 DISCOURSE_CDN_URL이라는 두 변수에는 어떤 값을 사용해야 하나요?

감사합니다,

가짜 URL을 주면 가짜 답변만 받을 수 있습니다.

해당 URL에서 기대하는 데이터를 제공하고 있나요? 포럼 URL에서 데이터를 가져올 수 있나요?

s3 cdn은 작동할 것 같습니다. 포럼 cdn의 경우 포럼 URL을 사용하고 있어 확실하지 않습니다.

일반적인 cdn은 포럼과 다른 URL을 사용하며, 데이터가 동적인지 추측해야 할 필요가 없이 정적 데이터라는 점을 전제로 작동합니다.

1개의 좋아요

여러 포럼에 제 정보를 여기저기 뿌리는 것을 최대한 자제하고 있으니, 이 문제에 대해 말을 아끼는 점 양해 부탁드립니다.

포럼은 "https://mmhmm.com"에 위치해 있으며, 이는 프록시(캐시)가 적용된 Cloudflare DNS 레코드입니다. Discourse를 Backblaze 사용하도록 설정하기 전까지는 모든 기능이 정상적으로 작동했습니다.

앞서 언급했듯이 "https://gtech-cdn.mmhmm.com"은 이름이 해석(resolve)되고 ping에도 응답합니다. CNAME 레코드의 대상인 f000.backblazeb2.com 역시 이름이 해석됩니다. 해당 B2 Friendly URL 원본은 문서에서 사용하도록 안내한 것입니다. 하지만 그것이 문제가 아닙니다. 문제는 Discourse가 .js 파일의 URL을 제공하면서 경로에서 “/file/gtech-cdn” 부분이 누락된 잘못된 URL을 사용하고 있다는 점입니다. 이 누락된 정보를 수동으로 추가하면 .js 파일의 텍스트가 정상적으로 로드됩니다.

물론, 여전히 이 두 변수가 어떻게 작동해야 하는지 파악하는 데 어려움을 겪고 있습니다. 저는 시각적으로 배우는 편이라 Cloudflare CDN, Discourse, Backblaze B2 간의 상호작용에서 어떤 일이 일어나야 하는지 이해하는 데 플로우차트나类似的한 도구가 정말 도움이 될 것 같습니다.

도와주셔서 감사합니다.

아, 그리고 마지막에 언급하신 일반 CDN에 대해 말씀드리겠습니다.

Backblaze의 글에서는 버킷당 두 개의 페이지 규칙을 생성하도록 안내하고 있습니다(제 경우 1개의 버킷을 사용 중입니다). 제 이해가 맞다면, 이는 처리 방식이 방화벽 규칙과 유사하다고 볼 수 있습니다.

규칙 1은 https://gtech-cdn.mmhmm.com/file/*/*에 대해 표준 캐싱을 사용하도록 지정합니다(이는 Cloudflare에서 별도로 1개월로 설정되어 있습니다).
규칙 2는 규칙 1의 패턴과 일치하지 않는 모든 요청을 리디렉션(302 - 임시 리디렉션)합니다.

따라서 mmhmm.com에 접속한다고 해서 모든 것이 캐시되는 것은 아닙니다… 적어도 제 이해는 그렇습니다.

수정: 이 방법은 작동하지 않았습니다.

이 문제에 대해 조금 더 집중해 보니, Backblaze 기사가 제안한 Friendly URL 대신 S3 URL을 CNAME 대상으로 사용하는 것이 명백한 이유로 더 적절하다고 판단했습니다. 지금은 DNS 레코드의 TTL이 만료되기를 기다리고 있습니다.

이 훅에 대해:

rake --tasks 덤프에서 s3 관련 항목을 찾지 못했습니다. 이 내용은 여전히 유효한 건가요, 아니면 제가 어떤 플러그인을 놓치고 있는 건가요?

수동으로 실행할 때 이것도 확인됩니다:
uploads:migrate_to_s3

rake aborted!
FileStore::ToS3MigrationError: Some uploads could not be migrated to the new scheme. You need to fix this manually. (FileStore::ToS3MigrationError)
/var/www/discourse/lib/file_store/to_s3_migration.rb:156:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:59:in `migrate'
/var/www/discourse/lib/tasks/uploads.rake:126:in `migrate_to_s3'
/var/www/discourse/lib/tasks/uploads.rake:106:in `block in migrate_to_s3_all_sites'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rails_multisite-6.0.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rails_multisite-6.0.0/lib/rails_multisite/connection_management/null_instance.rb:36:in `each_connection'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rails_multisite-6.0.0/lib/rails_multisite/connection_management.rb:21:in `each_connection'
/var/www/discourse/lib/tasks/uploads.rake:104:in `migrate_to_s3_all_sites'
/var/www/discourse/lib/tasks/uploads.rake:100:in `block in <main>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => uploads:migrate_to_s3
(See full trace by running task with --trace)
root@ubuntu-s-2vcpu-4gb-nyc2-01-app:/var/www/discourse# 
root@ubuntu-s-2vcpu-4gb-nyc2-01-app:/var/www/discourse# rake uploads:migrate_to_s3
Please note that migrating to S3 is currently not reversible! 

6개의 게시글이 새로운 주제로 분리되었습니다: Cloudflare R2: 설정 탐색 및 구성 오류 처리

Cloudflare가 이제 정상 작동하는 것 같습니다:

Cloudflare R2: Navigating Setup and Handling Configuration Errors - #13 by pfaffman 참고하세요.

2개의 좋아요