그럼 지금은 잘 작동하는 거야?
완벽합니다. 오래 걸렸지만, 작동한다는 사실 외에도 Discourse 설정에 대해 정말 많은 것을 배웠습니다!
감사합니다!
알겠습니다. 해당 설정을 수행할 때 작성했던 단계별 가이드를 공유하기로 했습니다.
How To Configure Discourse Forum S3 Backup And S3 CDN (Itechguides.com)
이 가이드의 단계는 DigitalOcean Space와 StackPack CDN을 사용하는 경우에 해당합니다.
@pfaffman 이 추가 백업 문제에 대해 도움을 주실 수 있을까요?
S3 백업 및 클론 구성을 완료한 후에도 자동 백업이 실행되지 않습니다. 아래 스크린샷에 제 구성이 표시되어 있습니다.
수동으로 백업을 실행하는 것은 가능합니다. 문제는 예약된 자동 백업이 실행되지 않는다는 점입니다.
모르겠어요. sidekiq 작업을 확인해서 실행 중인지 확인해 보세요. 작동할 거예요.
안녕하세요,
제 게시물을 수정해 주셔서 감사합니다. 하지만 오해의 소지가 있는 정보를 방지하기 위해 제 게시물을 직접 수정할 수 없습니다.
안녕하세요,
조금 막혀서 혼란스럽습니다. 누군가 도와주실 수 있을까요?
처음에는 bitnami 설치를 사용하다가, 앞으로 많은 문제를 일으킬 것 같아 표준 설치로 재설치했습니다.
백업을 복원했고, 2.8에서 2.9 베타로 전환했음에도 불구하고 모든 것이 정상적으로 작동했습니다.
구글 버킷에서 백업을 다시 테스트해 보았지만 여전히 완벽하게 작동했습니다.
S3 설정은 모두 웹 인터페이스를 통해 수행했으며, ENV 변수를 사용하지 않았습니다.
GDPR 규정을 준수하기 위해 유럽에 새로운 백업 버킷(여기서는 discourse-backup-eu라고 하겠습니다)을 생성했습니다. 이제 ENV 변수를 변경할 수 있게 되었으므로, DISCOURSE_S3_ENDPOINT를 https://storage.googleapis.com으로 설정하고 앱을 재빌드한 후, 웹 인터페이스에서 백업 버킷 이름을 변경하고 백업을 다시 실행했습니다. 유럽의 새 백업 버킷에 백업 파일이 표시되는 것을 보고 매우 기뻤습니다.
이제 업로드된 파일이 다른 버킷으로 저장되도록 하여 VM 디스크 공간이 차지되는 것을 피하고 싶었습니다.
따라서 새로운 버킷(discourse-uploads라고 하겠습니다)을 구성하고 공개로 설정한 후, 해당 새 버킷의 서비스 계정에 Storage Legacy Bucket Owner 역할을 추가했습니다.
그 다음, 여기에 설명된 대로 클라우드 CDN이 활성화된 백엔드 버킷을 사용하도록 기존 로드 밸런서(여기서는 https://www.example.com이라고 하겠습니다)에 규칙을 추가했습니다. 규칙은 /discourse-uploads/*가 버킷 discourse-uploads를 가리키도록 설정했습니다.
버킷 루트에 있는 test.jpg로 CDN을 테스트해 보았지만 https://www.example.com/discourse-uploads/test.jpg를 통해 접근할 수 없었습니다. 버킷 안에 discourse-uploads라는 하위 폴더를 만들고 test.jpg를 그 안으로 이동시켜야만 https://www.example.com/discourse-uploads/test.jpg를 통해 테스트 이미지를 볼 수 있었습니다.
웹 UI에서 "s3 upload bucket"의 더미 버킷 이름(백업을 설정할 때 이전에 설정해야 했던 것)을 discourse-uploads로 변경하고, CDN URL에 https://www.example.com/discourse-uploads를 입력한 후 "enable s3 uploads"를 체크했습니다.
그 이후로 이미지를 업로드하려고 하면 브라우저 창에 "Invalid Argument"라는 팝업이 나타났습니다(기본적으로 같은 내용을 말하는 JSON 콘텐츠를 가진 422 에러에서 비롯된 것입니다).
모든 게시물을 다시 생성(rebake)해 보았지만 효과가 없었고, 여전히 에러가 발생했습니다.
그래서 웹 UI 대신 ENV 변수를 사용해야 한다고 판단했습니다.
다음과 같은 설정을 사용했습니다:
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: whatever
DISCOURSE_S3_INSTALL_CORS_RULE: false
FORCE_S3_UPLOADS: 1
DISCOURSE_S3_ENDPOINT: https://storage.googleapis.com
DISCOURSE_S3_ACCESS_KEY_ID: MY_KEY_ID
DISCOURSE_S3_SECRET_ACCESS_KEY: MY_ACCESS_KEY
DISCOURSE_S3_CDN_URL: https://www.example.com/discourse-uploads
DISCOURSE_S3_BUCKET: discourse-uploads/discourse-uploads
DISCOURSE_S3_BACKUP_BUCKET: discourse-backup-eu
DISCOURSE_BACKUP_LOCATION: s3
앱을 재빌드했습니다.
그런데 버킷에 자원이 업로드되지 않아 404 에러가 발생하면서 더 이상 discourse를 열 수 없게 되었습니다.
https://www.example.com/discourse-uploads/assets/admin-31467dc73634cbfb81799737c43df0e2939307d893ef32713f1d0770bcb3532c.br.js
버킷의 하위 폴더로 직접 업로드하는 것이 다소 무리한 시도라고 생각했습니다. OP(원문 게시자)는 작동한다고(최소한 백업 버킷의 경우) 제안했지만요.
ENV 변수를 다음과 같이 변경했습니다.
DISCOURSE_S3_BUCKET: discourse-uploads
(나중에 하위 폴더로 업로드해야 하는 문제를 피하기 위해 호스트 규칙을 조정할 수 있을 것이라고 생각하며)
그리고 아무것도 업로드되는지 확인하기 위해 재빌드했지만, 버킷에 아무것도 업로드되지 않았고 404 에러로 인해 discourse가 여전히 열리지 않았습니다.
따라서 제 질문은 다음과 같습니다:
- 웹 UI와 ENV 변수가 충돌합니까?
- 자원이 버킷에 업로드되어야 하는 시점은 언제입니까?
- 어떻게 디버깅할 수 있습니까? 로그에 에러가 보이지 않습니다.
- 설정에서 버킷의 하위 폴더를 설정할 수 있습니까?
- 이 문제가 해결되면, 이전에 업로드된 이미지가 버킷으로 전송됩니까? rebake를 수행하면 이전에 업로드된 이미지의 URL은 어떻게 보일까요?
감사합니다!
이 부분을 포함하셨나요?
며칠 전 그 작업을 위한 템플릿을 PR로 제출했지만, 아무런 관심을 받지 못한 것 같습니다.
또한 버킷을 변경하는 것은 어렵습니다. 기존 버킷의 모든 자산을 새 버킷으로 복사하는 것뿐만 아니라, 새 버킷을 사용하도록 데이터베이스도 업데이트해야 합니다. 이에 대한 게시글이 있는 것 같습니다.
ENV 변수를 사용하신다면(사용하시는 것이 좋습니다) 해당 설정들은 더 이상 웹 UI에서 보이지 않습니다.
게시물이 기존 주제에 병합되었습니다: Google Cloud S3 팁
네, 맞습니다. 제 기억이 맞다면, 위쪽에서 구글이 특정 기능(목록 접근 권한일까요?)을 허용하지 않는다는 논의가 있었어요. 대신 어떤 ‘레거시’ 기능을 사용하는 우회 방법이 있었는데, 그게 제가 기억하는 내용입니다. 찾으려면 위쪽 100개 메시지까지 스크롤해야 할 겁니다. 만약 해당 방법이 작동한다면, 다음에 이 정보가 필요한 사람이 더 쉽게 찾을 수 있도록 OP(원본 게시글)에 어떻게 해결했는지 업데이트해 주시면 좋겠습니다.
다시 한번 답변해 주셔서 감사합니다!
Google 버킷에 대한 경고는 백업용으로 사용할 때 파일 목록을 가져올 수 없어서 발생한 것이었습니다.
이미 이 문제를 해결하는 방법에 대해 게시한 적이 있습니다.
OP(원문 게시글)에 해당 정보를 업데이트하라는 건가요? 제가 그렇게 할 수 있다고 생각하지 않습니다.
다시 말씀드리지만, 백업은 작동하지만 자산 업로드는 작동하지 않습니다. OP에 따르면 Storage Legacy Bucket Owner 권한이 없어도 이 기능이 작동해야 한다고 했습니다.
여기 회귀(regression) 문제가 있는 것 같습니다. @Falco 님은 어떻게 생각하시나요?
리グレ션이 발생한 것 같습니다. 구글에서만 필요한 커스텀
을 추가한 것이 확실합니까?
아, 네. 누군가 이미 했을 거라고 생각했거든요. ![]()
제가 바로 그걸 제안한 겁니다. 위키이므로 충분히 가능하다고 생각하지만, 정확히 어떤 신뢰 등급(trust level)이 관련되는지는 100% 확신하지는 못하겠습니다.
답변 주셔서 감사합니다. 말씀하신 내용을 포함해서 설정했습니다:
서브폴더를 포함하고 포함하지 않는 두 가지 경우를 모두 시도해 보았습니다.
DISCOURSE_S3_BUCKET: discourse-uploads/discourse-uploads
그리고
DISCOURSE_S3_BUCKET: discourse-uploads
다시 한번 감사합니다
@tuanpembual 이 처음에 시도했지만, Storage Legacy Bucket Owner 대신 Storage Legacy Object Owner라고 언급했어요
저는 '기본 사용자’일 뿐인데, 아마 그래서 수정할 수 없는 것 같습니다.
질문에 대한 답변을 요약해 보겠습니다:
- Web UI와 ENV 변수가 충돌합니까?
- 에셋은 언제 버킷에 업로드되어야 합니까?
app.yml의 hook 섹션에 이 스니펫을 추가하면, 재빌드(rebuild app) 중 after_assets_precompile 단계에서 업로드됩니다.
- 어떻게 디버깅할 수 있습니까? 로그에서 에러를 볼 수 없습니다.
다음 명령을 실행하여 확인하십시오:
cd /var/discourse
sudo ./launcher enter app
sudo -E -u discourse bundle exec rake s3:upload_assets --trace
- 설정에서 버킷의 하위 폴더를 지정할 수 있습니까?
업로드와 백업에 서로 다른 버킷을 반드시 사용해야 합니까?
아니요, 그럴 필요는 없지만 보통 가장 쉬운 설정 방법입니다. 기본적으로 두 개의 서로 다른 버킷을 사용하거나 백업 버킷에 접두사(prefix)를 사용해야 합니다. 예를 들어, 다음과 같은 조합이 작동합니다:
- 서로 다른 버킷
- s3_upload_bucket:
your-uploads-bucket- s3_backup_bucket:
your-backups-bucket
- 서로 다른 접두사
- s3_upload_bucket:
your-uploads-bucket/uploads- s3_backup_bucket:
your-uploads-bucket/backups
- 이 작업이 정상적으로 작동하게 되면, 이전에 업로드된 이미지가 버킷으로 전송됩니까? rebake를 수행하면 이전에 업로드된 이미지의 URL은 어떤 형태가 됩니까?
Discourse 인스턴스에서 S3 업로드를 활성화했습니다(이미 상당 기간 운영 중). 기존 로컬 업로드 파일은 어떻게 처리해야 합니까?
기존 업로드 파일을 S3로 마이그레이션하려면 몇 가지 rake 태스크를 실행할 수 있습니다. 이를 수행하려면 SSH 접근 권한, 루트 권한이 필요하며, discourse 앱에 진입해 있어야 합니다(관리자 일괄 작업 참고). 또한 app.yml에 몇 가지 환경 변수를 설정해야 합니다. 겁먹을 일이 아닙니다.
이 모든 준비가 끝나면 rake 태스크를 실행할 준비가 됩니다:
rake uploads:migrate_to_s3 rake posts:rebake이 작업이 완료되고(업로드가 정상적으로 작동하면) 더 이상 백업에 업로드 파일을 포함할 필요가 없습니다. 그리고 보너스로, 재앙적인 상황이 발생했을 때 명령줄에서 백업 복원이 가능해집니다(app.yml 사본을 어딘가에 보관해 두세요).
안녕하세요. 오브젝트 스토리지 제공사를 찾고 있었는데, 원포스터(OP)에서 일부 제공사의 경우 "CORS를 건너뛰고 수동으로 설정해야 한다"고 언급되어 있더라고요. 저는 CORS나 그 설정에 대해 잘 모르는데, 이런 설정이 필요한 제공사는 피하는 게 좋을까요, 아니면 설정이 간단할까요?
물어봐야 한다면 (나도 그랬을 텐데), 다른 걸로 갈 거예요.
확인만 하고 싶은데, 아래 단계
rake uploads:migrate_to_s3
rake posts:rebake
를 완료한 후 로컬 업로드 폴더를 전부 삭제해도 되는 거죠?

