안녕하세요, Min.IO 서버로 S3 백업을 활성화하려고 시도하고 있습니다. app.yml을 문서에 맞게 변경한다고 생각하고 수정한 후 재빌드(rebuild)를 하면, 완료 후 브라우저에서는 화면 중앙에 4개의 색점만 표시되고 있습니다. 콘솔을 확인하면 다음과 같은 오류가 나타납니다;
Uncaught ReferenceError: I18n is not defined
at admin?v=103a67b2358b…86c5a58d96d4e91:1:1
wizard?v=ab2295f1774…85b733472935c34a0:1
Uncaught ReferenceError: I18n is not defined
at wizard?v=ab2295f1774…b733472935c34a0:1:1
Min 서버에는 리전(region)을 설정해 두었고, 'assets’라는 공개(public) 버킷과 'discourse-data’라는 비공개(private) 버킷, 그리고 그에 맞는 자격 증명을 설정했습니다. 일부 예제에서는 따옴표를 사용하지 않으므로 혹시 몰라 따옴표를 제거해서도 시도해 보았지만, 변화가 없었습니다.
이 설정을 변경하고 재시작하면 적용되지 않는 것 같습니다. 활성화하려면 재빌드를 해야 해서 테스트 주기가 꽤 고통스럽습니다. 과거에는 관리자 설정에서 이 필드들을 모두 사용할 수 있었던 것으로 보이거나, 적어도 일부 사용자의 스크린샷에는 나타나는 것 같으니(?) 관리 설정에서 이 필드들을 모두 사용할 수 있다면 조금 더 쉬울 것 같습니다.
app.yml의 모든 _S3 항목을 주석 처리하고 재빌드하면 정상적으로 작동합니다. (백업만 설정되어 있지 않을 뿐입니다) (ENDPOINT와 CDN URL은 로컬에서 올바른 IP로 해석됩니다)
구독을 포함한 다른 모든 설정은 비교적 쉽게 완료했지만, 이 부분에서 막혀 있습니다. 제가 무엇을 잘못하고 있는지 아는 분이 있을까요?
음, 알겠어요. 조금 진전이 있었는데, 설정을 최소화하니 이제 페이지가 렌더링되긴 하지만, 서버에서 'bad request’가 반환되고 있어요. Min.io의 “mc” 도구를 사용해 discourse 머신에서 S3 스토리지를 테스트해 봤는데, 정상적으로 작동하는 것 같고 버킷 목록도 조회할 수 있어요. 그런데 로그에는 다음과 같은 내용이 출력되고 있어요.
Failed to list backups from S3: Aws::S3::Errors::BadRequest
그리고
/var/www/discourse/lib/backup_restore/s3_backup_store.rb:140:in `rescue in unsorted_files'
/var/www/discourse/lib/backup_restore/s3_backup_store.rb:131:in `unsorted_files'
/var/www/discourse/lib/backup_restore/backup_store.rb:23:in `files'
오타가 없는지 확인하기 위해 app.yml의 설정을 “mc” 설정에 그대로 복사/붙여넣기했어요. 그래서 지금은 좀 막막한 상태입니다. 내일 다시 시도해 볼 수도 있겠네요 …
네, 도움을 주셔서 감사합니다. 그 부분은 알아차렸지만, 실제로는 큰 도움이 되지 않았습니다. Min.io와 SeaweedFS를 모두 시도해 보았으며, 두 가지 모두 로컬에서 설정하여 Discourse 머신에서 명령줄 도구를 사용해 S3에 파일을 쓰는 것까지는 성공했습니다. 하지만 Discourse 내부에서 두 옵션 모두 제대로 동작하지 않는 것 같습니다. 시간 투자를 검토해 본 결과, 백업이 온라인이고 S3에 저장되는 경우 S3에 직접 백업하는 옵션이 훌륭하다는 점은 이해합니다. 하지만 백업이 "클라우드 외부"에 있고, 해당 옵션을 사용하려면 S3 스토리지를 에뮬레이션해야 한다면, 제 경우에는 시간적으로 비용이 너무 크다고 판단됩니다.
참고로, 누군가가 CloudFlare S3가 이제 작동한다고 언급한 것을 확인했습니다. 이는 일부 사용자에게 유용할 수 있습니다. CloudFlare는 무료 티어에 S3 10GB를 추가한 것으로 보이지만, 제 경우 백업은 일반적으로 Borg 백업 서버에 있는 클라우드 외부에 있습니다.
대신 제가 한 일은 discourse 호스트 머신을 백업 VPN에 추가하고, 호스트에서 /var/discourse/shared/standalone/backups 및 /var/discourse/shared/standalone/log를 대상으로 borg와 borgmatic을 설치한 것입니다. 그런 다음 로컬 백업이 예약된 시간 30분 후에 실행되도록 cron에 이 작업을 추가했습니다.
질문: 로컬 백업이 모든 것을 포함하는지, 아니면 업로드를 포함하려면 더 많은 것이 필요한지 명확히 설명해 주실 수 있을까요? (추가 rake 작업은 S3를 위한 것뿐인가요?)
제 의구심 많은 성격은 라이브 시스템과 백업을 모두 클라우드 제공업체에게 맡기는 것을 신뢰하지 않습니다. 아마도 제가 너무 걱정하는 것일지도 모른다는 생각이 들 때마다, 서버가 작동하지 않는다는 이유로 고객 사이트를 방문했을 때 서버실에서 번개를 맞아 서버가 손상된 적이 있다는 사실을 떠올리며 스스로를 상기시킵니다.
네, 따랐습니다. 제가 실수를 했거나 모든 내용을 제대로 읽지 못했거나 기억하지 못했을 수 있다는 점은 기꺼이 인정합니다. 하지만 적절한 문서를 검색하는 것만큼은 그러하지 않았습니다. ..
./launcher destroy app;./launcher start app
네, 앞으로 참고할 때 유용하겠습니다. stop / start를 시도해 보고 있었는데, docker가 부팅 시 환경 변수를 어떻게 구성하는지에 대해 익숙하지가 않아서요.
그곳에 백업이 아닌 에셋을 저장할 계획이라면, 에셋을 그곳으로 푸시하는 rake 태스크를 놓치지 마세요.
그 부분이 조금 혼란스러웠던 부분입니다. 추가하겠습니다. 기본적으로 모든 콘텐츠의 백업을 원할 것 같다는 기대가 있었는데, 왜 이 것들이 기본 백업에 포함되지 않는지 궁금했습니다. 용량 문제인 것은 알지만, 대부분의 사람들이 백업 내용을 확인하지 않는 것 같으니, 전체를 백업하는 것이 더 안전하지 않을까 싶습니다?
음, 먼저 테스트 인스턴스에서 시도해 봤는데 (!) .. 문서에서 두 줄을 복사해서 붙여넣었거든요 .. 어딘가에서 정보가 오래된 건가요?
I, [2023-09-04T18:39:51.544973 #1] INFO -- : > cd /var/www/discourse/plugins && sudo -E -u discourse bundle exec rake s3:upload_assets
bundler: failed to load command: rake (/var/www/discourse/vendor/bundle/ruby/3.2.0/bin/rake)
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/definition.rb:524:in `materialize': Could not find css_parser-1.16.0, oj-3.16.1, rotp-6.3.0, globalid-1.2.0, google-protobuf-3.24.2-x86_64-linux in locally installed gems (Bundler::GemNotFound)
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/definition.rb:197:in `specs'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/definition.rb:254:in `specs_for'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/runtime.rb:18:in `setup'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler.rb:162:in `setup'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/setup.rb:23:in `block in <top (required)>'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/ui/shell.rb:159:in `with_level'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/ui/shell.rb:111:in `silence'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/setup.rb:23:in `<top (required)>'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/cli/exec.rb:56:in `require_relative'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/cli/exec.rb:56:in `kernel_load'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/cli/exec.rb:23:in `run'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/cli.rb:492:in `exec'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/cli.rb:34:in `dispatch'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/cli.rb:28:in `start'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/exe/bundle:45:in `block in <top (required)>'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bundler-2.4.13/exe/bundle:33:in `<top (required)>'
from /usr/local/bin/bundle:25:in `load'
from /usr/local/bin/bundle:25:in `<main>'
I, [2023-09-04T18:39:52.163459 #1] INFO -- :
I, [2023-09-04T18:39:52.164462 #1] INFO -- : Terminating async processes