Digital Ocean Spaces (S3) "자격 증명 없이 요청에 서명할 수 없음"

S3 스토리지를 위해 Digital Ocean Spaces를 설정하려고 합니다.

백업을 실행하려고 하면 다음과 같은 문제가 발생합니다…

사진을 업로드할 때도 마찬가지입니다…

현재 이 같이 설정되어 있습니다…

…but 정확히 어떻게 테스트해야 이 설정이 실제로 작동하는지 확인할 수 있을지 모르겠습니다. 이 시스템들에 대해 잘 알지 못합니다. 이것은 소규모 친구 그룹용 포럼을 위한 것입니다.

처음에는 아래 설정을 활성화해 두었었지만, 그 줄들이 활성화된 상태에서 재빌드(rebuild)가 되지 않아 app.yml에서 주석 처리해 두었습니다. 현재 시점에서 여전히 필요한 것인지 아닌지 확실하지 않습니다…

Digital Ocean Spaces 관리 영역에서 파일을 수동으로 업로드하고 공개(public)로 설정했으며, 브라우저로 해당 파일을 정상적으로 가져올 수 있습니다.

또한 DO Spaces에서 “*****-backups” 폴더를 수동으로 생성했습니다.

제가 이 시스템에 대해 얼마나 잘 모르는지 보여주는 예시입니다. 여기에서 막혀서 왜 그런지 정말로 알지 못합니다. 어딘가에서 설정을 잘못 변경한 것 같은데, 어떻게 되돌려야 할지 모르겠습니다.

image
어떤 이유에서인지 /var/discourse에 보통 있는 것들이 지금은 /var/www/discourse에 있는 것 같습니다.

하지만 지금은 이 지점에서 막혀 있습니다. 포럼을 검색해 보았지만 해결책을 찾지 못했습니다. 하루 종일 같은 루프를 돌고 있습니다. 아래 링크는 같은 맥락이지만, DO Spaces(S3)가 아닌 실제 AWS S3에 관한 내용입니다.

도움을 주시면 감사하겠습니다. 감사합니다.

링크하신 토픽에서 권장하는 use_s3 설정이 빠져 있습니다.

직접 타이핑하려 하지 말고, 링크하신 토픽의 설정을 복사해서 붙여넣으세요. 등호(=)가 아니라 콜론(:)이 필요합니다.

/var/www/discourse 경로에서 무언가를 보고 있다면 컨테이너 내부에 있는 것입니다. OS로 돌아가려면 컨테이너에서 나와야 합니다.

피드백 감사합니다.

설정에는 이미 포함되어 있습니다. 아마 다른 명령어에서는 표시되지 않는 것 같습니다. CDN에 문제가 있다는 안내가 있어 주석 처리해 두었고, 이를 분리해서 확인해 보려고 했습니다. 특히 예제에 커스텀 도메인이 아닌 기본 Spaces 도메인이 사용된 것이 아니라 커스텀 도메인이 사용되어 URL이 정확한지 100% 확신할 수 없었기 때문입니다. 이렇게 분리해서 확인해 보는 것이 나쁜 아이디어였을 수도 있습니다. 여러 가지를 시도해 보고 있었습니다.
전체 설정은 다음과 같습니다…

100% 확신은 못 하겠지만, 복사해서 붙여넣은 것으로 꽤 확신합니다. 보통 그렇게 하거든요.

재빌드(rebuild)를 시도할 때 오류가 발생하여 다시 들어가서 이 부분을 주석 처리했습니다…


다시 활성화해서 실행해 볼 예정입니다.

아, 'exit’였군요.

그게 제가 찾고 있던 것이었습니다. 감사합니다.

이 S3 부분에 대해 제가 놓치고 있는 것이 무엇인가요?

라이브로 전환하기 위해 주석 처리를 제거했습니다…

수정: 마지막 줄에 오타가 있다는 것을 방금 깨달았습니다. 어떻게 그렇게 실수를 했는지 모르겠네요.

저장 후 재빌드를 시도했는데 이 메시지가 나옵니다…

그 보안 경고는 처음 보는 것이었습니다. 이를 해결해 보려고 실행해 봤습니다…

chmod o-rwx containers/app.yml

Docker 버전을 확인해 보았습니다…

docker --version

이를 업데이트하는 방법을 알아보고 있습니다. 재빌드하면 업데이트될 줄 알았는데, 그렇지 않은 것 같습니다.

그렇게 해도 해결되지 않았습니다. 기존 설정을 주석 처리하고 해당 코드를 복사/붙여넣기했는데도…

빌드 시 여전히 오류가 발생합니다…

“did not find expected key while parsing a block mapping at line 109 column 3”

어떤 키를 가리키는지 확실하지 않습니다.

액세스 키와 시크릿 키 설정은 설정 항목에 있습니다. 해당 설정이 실제로 작동하는지 테스트하는 방법을 모르지만, 설정에는 들어가 있습니다.

거의 다 된 것 같은데…

재구축 이후에 생각 중(thinking) 상태에 멈춰 있습니다…

그대로 몇 시간 동안 방치해 두었습니다. 변한 것은 없습니다.

CDN 주석을 처리하니 다시 “109번째 줄” 오류가 발생했습니다. 하단 영역도 주석 처리하고 재구축을 했습니다. 이제 포럼에는 접속할 수 있지만, 여전히 첨부 파일을 업로드할 수 없습니다.

재구축 시 여기에서 잠시 멈추는 것 같습니다.

결국 아무 조치 없이 지나가므로 중요한지는 모르겠습니다.

CDN과 하단 영역을 주석 처리하면 포럼은 작동하지만, 여전히 원래 문제가 남아 있습니다…

무엇을 놓치고 있는지 모르겠습니다.

재구축 이후로 계속 생각 중(thinking) 상태에 멈춰 있습니다. 처음에는 모든 것을 전송 중이거나 백그라운드에서 작업 중일 것 같아서 그대로 두었습니다.

몇 시간 동안 그대로 두었지만 변화가 없었습니다.

Spaces를 확인해 보니 파일이 업로드되지 않았으므로, 단순히 무언가에 멈춰 있는 것 같았습니다.

CDN을 주석 처리하니 다시 “109행” 오류가 발생했습니다.

아래 영역도 주석 처리하고 재구축했습니다. 포럼에는 접속할 수 있지만, 여전히 첨부 파일을 업로드할 수 없습니다.

재구축 시 잠시 여기에서 멈추는 것 같지만, 아무 조치 없이 결국 넘어가므로 이것이 문제가 되는지 확실하지 않습니다.

CDN과 아래 영역을 주석 처리하면 포럼은 작동하지만, 여전히 원래 문제가 남아 있습니다…

무엇을 놓치고 있는지 모르겠습니다. 일단 S3 설정을 모두 주석 처리해 두었습니다.

참고: 도커를 업데이트하는 명령어가 있을까요? 보통은 관리자 영역을 통해 이 작업을 수행하는데, 24.0.2에서 업데이트하라는 메시지가 뜨지 않습니다. 이것이 얼마나 큰 문제인지 모르겠습니다. 현재 버전은 24.0.7인 것 같습니다.

관리자 영역 설정이 app.yml 설정을 덮어쓰는지, 아니면 그 반대인지 확실하지 않지만, 혹시 몰라서 해당 설정을 첨부합니다.

S3와 CDN URL에 버킷 이름을 포함해야 하는지도 명확하지 않습니다. 또한 두 링크가 동일해야 하는지도 확신할 수 없습니다.

누군가 간단한 문제를 발견해 주길 바랍니다. 여기까지 읽어주셨다면 다시 한번 감사드립니다!

소셜 오션 CDN을 사용 중이신가요?

30초 안에 로딩되지 않았다면, 아마도 로딩되지 않을 것입니다. 하지만 그렇게 오래 기다릴 필요는 없습니다. 브라우저 개발자 도구의 네트워크 탭을 확인하여 무엇이 로딩되지 않는지 살펴볼 수 있습니다.

Social ocean CDN이 뭔지는 잘 모르겠지만, Spaces에 내장된 CDN을 사용하려고 할 뿐입니다.

미안합니다, "Digital Ocean"이었어요.

제가 인용한 메시지는 그것이 작동하지 않으므로 그렇게 하지 말라고 하고 있습니다.

저로부터 더 많은 도움을 원하시면 제 이메일 주소를 프로필에서 확인하실 수 있습니다.

음. 이건 좀 이상하네요.

뭔가 이제 작동하고 있습니다. 전부 주석 처리(비활성화)해 두었나 싶어서, 어제 다시 작동하는지 확인하려고 사진을 하나 업로드했거든요. 오늘 아침에 경로를 확인해 보니… 아마 CDN을 사용 중인 것 같네요?

https://XXXXXXX-storage.sfo3.digitaloceanspaces.com/optimized/2X/9/9b9fdb3eb27831650752b848363ea2a1a66ce137_2_375x500.jpeg

Spaces를 확인해 보니 이미지가 몇 개 들어 있네요…


이미지가 이제 정상적으로 작동하는 것 같습니다. 제가 생각할 수 있는 유일한 이유는 설정에서 “S3 use IAM profile” 체크박스를 해제했다는 것입니다. 그게 멈추었던 바로 그 키였을 것 같네요. 왜 처음부터 체크되어 있었는지는 모르겠어요. 아마 제가 정말로 뭘 하고 있는지 잘 모르고 있기 때문일 겁니다. :slight_smile:

백업 실행 문제는 여전히 남아 있지만, 아마 Droplet 공간 문제일 수도 있겠네요. 업로드 전에 로컬에 임시 저장할 공간이 부족해 보입니다. 이제 Space에 최소한 연결되어 있는 것 같으니, 이 부분은 따로 더 알아볼 예정입니다.

Jay님, 감사합니다. 이번 주 후반에 이 친구들 포럼에서 다시 이것저것 만져볼 수 있을 때 연락드릴게요. 지금은 좀 청구서 내야 해서요.

배우자가 준비하는 동안 몇 분의 시간이 생겼는데, 그래서 공간 상태를 확인해 보기로 했다. 더 생각해 보니 그게 문제인 것 같았다. …에게 확인해 보니…

df -h

아, 진짜로 가득 차 있네. 다음을 실행했다…

docker system prune -a

다음도 실행했다…

./launcher cleanup

다시 한번 Jay에게 감사하다.

역시 20GB 이상을 정리했다.

수동으로 백업을 실행했는데 성공했다!!!

이제 로컬 스토리지의 모든 파일을 S3로 마이그레이션하는 중이다…

rake uploads:migrate_to_s3

행운을 빌어줘! :slight_smile:

회의가 시작될 때까지 기다리던 중에 오늘 아침에 몇 가지 사항을 확인해 보았습니다.

Rake가 작동하지 않는 것 같거나, 아직 진행 중인 것일 수도 있습니다. 아직은 확신이 서지 않습니다. 용량 사용량은 줄었지만, 오래된 사진 몇 장을 수동으로 확인해 보니 여전히 이전 로컬 URL이 남아 있는 것 같습니다. 이 부분은 더 자세히 파봐야겠습니다.

Rake와 reback의 차이가 뭔지 모르겠습니다. 하나는 파일을 마이그레이션하고, 다른 하나는 포스트 내의 경로를 업데이트하는 것일 거라고 추측합니다. 배울 점이 많습니다.

/import (1.4GB)와 /uploads (9.2GB) 디렉터리에 여전히 많은 공간을 차지하고 있습니다. 우리처럼 작은 패키지에겐 상당한 양입니다. 이 부분을 더 저렴한 저장소로 이전하려 하고 있는데, 이 두 부분이 압도적으로 가장 큰 비중을 차지하고 있습니다.

같은 환경 설정을 하고 계신 분들을 위해 참고할 만한 정보입니다. 현재 엔드포인트 URL에 사용되고 있는 내용은 다음과 같습니다…

CDN
https://XXXXXX-storage.sfo3.cdn.digitaloceanspaces.com/original/2X/0/15740f130209eb1a6a4f147076eaa20e70a9772d.zip

ORIGIN
https://XXXXXX-storage.sfo3.digitaloceanspaces.com/original/2X/0/15740f130209eb1a6a4f147076eaa20e70a9772d.zip

URL의 유일한 차이는 ‘.cdn’ 부분입니다. 설정을 업데이트해야 합니다.

Copilot에서…
__________

Discourse에서 CDN 링크를 변경한 후 게시물을 rebake하려면, 모든 조리된(cooked) 게시물 HTML이 새로운 자산 URL로 업데이트되도록 rebake rake 태스크를 실행해야 합니다.

다음은 그 과정입니다:


1. 컨테이너 진입

cd /var/discourse

./launcher enter app

2. rebake 태스크 실행

rake posts:rebake

이 태스크는 다음을 수행합니다:

  • 현재 설정(새로운 s3_cdn_url 포함)을 사용하여 모든 게시물을 다시 렌더링합니다.

  • 이미지와 업로드가 CDN을 가리키도록 조리된 HTML을 업데이트합니다.


선택 사항: 속도 향상

대규모 사이트를 운영 중이라면 배치로 실행할 수 있습니다:

rake posts:rebake[1000]

이렇게 하면 한 번에 1,000개의 게시물을 rebake합니다.


3. 확인

이미지나 업로드가 있는 몇 가지 게시물을 확인하여 이제 CDN URL을 사용하도록 변경되었는지 확인합니다.

__________
실행 중인 것 같습니다. 나중에 다시 확인하겠습니다.

image

도넛 만들기 가겠습니다.

이것은 다시 처리를 실행하지만, 한 번에 1,000개씩이 아닙니다. 그냥 전체를 실행하고 [1000] 부분을 무시합니다. 아마도 제 구문이 정확하지 않은 것 같습니다.

나를 포함해 다른 사람들을 위한 또 다른 메모입니다. 메뉴에서 이 URL을 찾고 있었는데, 제가 뒤집어서 입력하고 있었기 때문이었습니다 ( .cdn.sfo3. 대신 반대 순서 - 당연히 SSL이 깨졌습니다). 검색을 해도 설정을 찾을 수 없었습니다. 그러다 이미 열어둔 창을 발견했습니다. 업데이트를 시도하고 저장하려고 했더니 이런 오류가 떴습니다…


설정 값이 app.yml에 추가되면 관리자 설정 메뉴에서 사라진다는 점을 잊고 있었습니다. 이제 기억났습니다.

다시 처리(rebake)는 제대로 된 것 같고, 제가 URL을 잘못 입력하고 있었던 것뿐입니다. 이제 업데이트가 진행 중입니다.

하지만 여전히 제 Space 저장소에 50개 미만의 파일만 표시되고 있으므로, 파일 rake 작업이 작동하지 않는 것 같습니다. :thinking:

OK. 여기에서 작은 돌파구를 마련한 줄 알았어요. 마침내 이 문제가 무엇이었는지 파악했거든요…

“did not find expected key while parsing a block mapping at line 106 column3”

여러 스레드를 살펴보다가 이런 내용을 봤어요…

제 설정을 확인해 보니 역시 공백이 있었어요.

아무 생각 없이 넣은 것 같아요. 공백을 제거했어요. 아마 “hooks:” 앞의 공백이 문제였던 것 같습니다.

정상적으로 재빌드되었습니다. @RGJ 님 감사합니다.

하지만 여전히 무언가를 마음에 들어 하지 않는 것 같아요.

Spaces에서 항목 수가 증가하는 것을 여전히 확인할 수 없어서, /uploads 파일이 아직 'S3’로 업로드되지 않는 것으로 보입니다. 이건 저를 혼란스럽게 하던 부분이었는데, 해결되어서 다행입니다. 하지만 다시 로딩 화면이 나타났습니다.

또한, 이 설정을 활성화하면 로딩 화면만 표시됩니다.

다시 주석 처리했습니다…

다시 재빌드했습니다. 결과는 동일합니다.

Spaces S3 설정을 주석 처리했습니다.

다시 재빌드했습니다.

작동 중

  • 포럼 로딩
  • 이미지 로딩
    • Spaces를 사용하는 새로운 이미지 - CDN 아님
    • 로컬 저장소를 사용하는 기존 이미지

작동하지 않음

  • Spaces로 파일 업로드 안 됨
  • 이미지 로딩에 CDN 링크 사용 안 함
  • DISCOURSE_S3와 after_assets_precompile을 주석 처리하지 않으면 브라우저에서 포럼이 로딩 중 멈춤

더 이상 아이디어가 없습니다. 제자리걸음만 하고 있어요.

이것을 잠시 놔둬야 할 것 같습니다. 적어도 새로운 업로드와 백업이 이제 Spaces로 전송되므로 공간 문제가 다시는 문제가 되지 않을 것입니다.

해결된 것 같습니다!

S3 CDN URL을 다음과 같이 업데이트했습니다… https://XXXXX.sfo3.cdn.digitaloceanspaces.com

이 설정은 경로를 올바르게 설정해 주지만, 버킷 이름은 S3 CDN URL에는 포함되어야 하지만 S3 URL에는 포함되지 않아야 하기 때문에 처리 방식이 일관성이 없어 보이는 부분이 있어 약간 혼란스러웠습니다.

그리고 다음을 실행했습니다…

rake uploads:migrate_to_s3 --trace

이전에는 Spaces CP에서 200개 항목 정도로 표시되었는데, 그러다 보니…

4361개 항목 49.3 GiB…

…새로고침을 하니…

4640개 항목 49.4 GiB…

…살아있네요!!! 아마 이전에 앱 안에 있지 않았기 때문에 이번에는 작동한 것 같습니다. (기억이 정확하지는 않지만) 앱에 들어가기 위해 이것을 실행했었거든요…

./launcher enter app

또 이것도 실행했습니다…

rake posts:rebake

…하지만 그것은 업로드가 여전히 진행 중이라는 것을 깨달았기 때문에, 업로드가 멈추는 것 같아 보일 때까지 기다렸다가 다시 rebake할 생각입니다.

이것이 작업을 마칠 때까지 좀 시간을 줘야 합니다. 그렇게 하고 다른 정리 사항이 있으면 다시 보고하겠습니다.

항목 수 증가 속도는 느려졌지만, 여전히 업로드되고 있고 계속 늘어나고 있습니다. 하룻밤 사이에 항목이 125개 더 늘었고, 묘비(tombstone) 폴더가 처음 나타났습니다.

이 문제를 해결 중인 다른 초보자를 위해 기록해 둡니다.

결국 이렇게 해결했습니다:

이 설정들을 app.yml 구성 파일에 넣어야 비로소 rake가 올바르게 실행되었습니다. /admin/site_settings/ 영역에만 있으면 rake가 제대로 실행되지 않았습니다. 다음과 같은 오류가 발생했습니다:

ERROR: Ensure S3 is configured in config/discourse.conf or environment vars

해당 설정은 여기서 가져왔습니다… Configure an S3 compatible object storage provider for uploads

구체적으로, 각 줄 앞에 두 개의 공백을 넣은 커스텀이 아닌 Spaces 설정을 사용했습니다. …

DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: whatever
DISCOURSE_S3_ENDPOINT: https://nyc3.digitaloceanspaces.com
DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
DISCOURSE_S3_CDN_URL: https://nyc3.cdn.digitaloceanspaces.com
DISCOURSE_S3_BUCKET: my-files
DISCOURSE_S3_BACKUP_BUCKET: my-files/my-backups
DISCOURSE_BACKUP_LOCATION: s3
DISCOURSE_S3_INSTALL_CORS_RULE: false

참고: DISCOURSE_S3_REGION은 실제 S3 리전(예: us-west-1)으로 오해될 수 있는 값이 아니라 문자 그대로 "whatever"라고 입력해야 합니다.

또한 ##Plugins go here areahooks 섹션에 이 설정들도 추가했습니다…

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

지난번에 문제가 생긴 부분이 바로 여기였습니다. 이 설정을 넣고 재빌드한 후, 브라우저로 포럼을 열려고 하니 로딩 화면이 나타났습니다.

아직 업데이트되지 않은 에셋을 찾고 있기 때문만입니다. 이제 앱 안에서 rake를 실행할 때입니다…

./launcher enter app

rake s3:upload_assets

이것이 실행된 후, 항목 수가 증가하고 버킷에 “assets” 폴더가 나타났습니다…

그 후 포럼이 올바르게 로딩되기 시작했습니다. /admin/site-settings 영역에서 보이는 S3 관련 설정은 이것들뿐입니다…

모든 파일을 업로드하기 위해 이것을 실행했고, URL이 기존 경로에서 새(비-CDN) 경로로 업데이트되었습니다.

rake uploads:migrate_to_s3 --trace

완료된 후 항목 수가 세 배 이상 증가했습니다.

눈에 띈 유일한 점은, 기존 게시물의 이미지 경로가 S3 ENDPOINT URL을 사용했던 반면, 새로 게시된 이미지는 S3 CDN URL을 사용했다는 것입니다.

https:/my-storage.sfo3.digitaloceanspaces.com/
vs
https:/my-storage.sfo3.cdn.digitaloceanspaces.com/

적어도 모두 S3를 사용하고 있으므로 크게 신경 쓰지 않았습니다.

하지만 이것을 실행해 보았습니다…

rake posts:rebake

image

메모리가 부족해서 프로세스가 종료되었습니다. 대신 이것을 실행해 보았습니다…

rake posts:rebake_uncooked_posts

몇 번이나 메모리가 부족해서 스스로 재시작되었고, 다시 메모리가 부족해졌습니다. 다시 실행했습니다. 결국 모두 처리를 마쳤습니다.

100%까지 모두 실행된 후, 기존과 새로운 게시물의 모든 링크가 마침내 S3 CDN URL 경로를 사용하게 되었습니다. 65.9 GB의 저장 공간에 34,062개 이상의 항목(백업은 <9 GB).

백업을 포함하여 이제 모든 것이 S3에서 작동하게 되어 정말 기쁩니다. 아, 백업을 언급했으니 하나 실행할 좋은 타이밍일 것 같습니다!

누군가에게 도움이 되기를 바랍니다.

행운을 빕니다!