Stop using Amazon s3 for uploads

I want to stop using Amazon s3 for uploads.
I’ve not done a rake task like this so want to check things before I run on the live environment.
My plan is to use a clone of my live server to test the rake task uploads:migrate_from_s3.

Will this move the files from s3?
Or copy them to the local storage and leave the s3 files there until I manually delete them?

If it deletes them from s3 that will break the live forum and that would be bad!
thanks

I believe @vinothkannans can point you in the right direction here.

Yes, it will remove the file from S3.

You should clone your S3 bucket too. And change the bucket name to newly cloned one in the site settings before testing the migration process.

Also I will recommend you to take a backup of S3 bucket before running the migration in live environment.

앱에 진입하여 rake -AT를 입력해도 uploads:migrate_from_s3 rake 태스크가 표시되지 않습니다.

S3에서 업로드 파일을 로컬로 마이그레이션하는 새로운 방법이 있나요?

rake task uploads:migrate_from_s3를 실행하면 어떤 출력이 나오나요?

rake 중단!

'uploads:migrate_from_s3' 태스크를 빌드하는 방법을 알 수 없습니다. (`rake --tasks`로 사용 가능한 태스크 목록을 확인하세요)

'uploads:migrate_to_s3'를 말씀하신 건가요?

커뮤니티의 Pull Request를 통해 제거되었습니다. 그 이유는 아래 링크에서 확인할 수 있습니다.

감사합니다. 수동으로 이 작업을 수행하는 방법에 대한 안내나 지침을 찾지 못하고 있습니다.

awscli를 사용하여 S3의 모든 파일을 서버로 수동으로 마이그레이션할 수 있습니다.

cd /var/discourse
./launcher enter app
sudo apt install awscli
aws configure

S3 ID와 비밀번호로 aws를 구성한 다음, 다음을 실행하세요.

cd public/uploads/default/
aws s3 sync s3://mybucketname/

이 명령은 S3의 모든 파일을 public/uploads/default/로 다운로드합니다. 그런 다음,

rake posts:rebake
exit
./launcer rebuild app

처음에는 S3에서 마이그레이션을 중단하는 문제를 해결하려고 시도했습니다. 그러나 제가 작성 중인 코드의 테스트 베드(테스트 환경)로 제 자체 마이그레이션을 사용한 후, 제가 완전히 잘못된 접근 방식을 취했다는 말을 들었습니다. 이 주장은 S3에서 로컬 파일로 마이그레이션한 제(대용량) 인스턴스에서 데이터 손상으로 인해 뒷받침되었습니다. 비교적 최근에는 데이터베이스의 손상된 데이터를 수동으로 수정했고, 제 시도로 인한 후속 정리가 아직 끝나지 않았을 것으로 예상됩니다.

만약 오늘 S3에서 자체 스토리지로의 마이그레이션을 시작한다면, discourse 옆에 minio 컨테이너를 실행하고, minio-client를 사용하여 S3에서 minio 컨테이너로 데이터를 복사한 다음, discourse를 로컬 minio의 새로운 “S3” 위치로 재구성하고, posts:remap을 실행하거나 모든 포스트를 다시 베이킹하여 "S3"를 제 minio 컨테이너에서 제공하도록 설정할 것입니다.

여기 posts:remap이 여기서 어떻게 작동해야 하는지 예시를 보여 드리겠습니다. 어딘가에 더 나은 예시가 있다는 느낌이 들지만, 시작하기에는 이 정도면 충분할 것입니다.

설명에 따라 진행해서 업로드 파일을 복사하긴 했는데, S3 업로드를 꺼두어도 인스턴스 곳곳에 여전히 S3 서버를 가리키는 링크가 남아 있습니다. discourse remap을 시도해 봤지만 효과가 없었고, rake posts:remap도, posts:rebake도 효과가 없었습니다.

S3에 업로드를 설정하는 건 정말 쉬웠는데, 되돌리는 건 쉽지 않네요.

s3에서 마이그레이션하는 기능이 오랫동안 깨져 있고 아직 수정되지 않았습니다. mcdanlj의 위 게시물을 참고하세요.

아래 명령어에서 어떤 출력이 나오나요?

./launcher enter app
rails c
Upload.all.sample(20).pluck(:url)

사이트가 아직 크지 않아서 업로드를 개별적으로 다시 연결했습니다.
rake posts:missing_uploads는 모두 찾았는지 확인하는 데 도움이 되었습니다.

모든 URL이 올바르게 리맵핑되었는지 확인하셨나요? 이미지뿐만 아니라 아바타, 아이콘, 백업 등에도 URL을 리맵핑해야 합니다. 위 명령어를 실행하여 출력 결과에 S3 URL이 있는지 확인해 보세요.

URL이 모두 상대 경로로 되돌아왔습니다. 아쉽게도 이 글을 나중에 읽을 사람들에게 어떤 rake 태스크와 앱 재빌드 조합이 성공의 열쇠였는지 정확히 확신하지 못합니다. Discourse에 대해 저보다 더 잘 아는 분이 이 문제를 해결하는 방법을 실수 없이 수행할 수 있도록 튼튼한 튜토리얼을 만들어 주셨으면 좋겠습니다.

Pravi가 위에서 설명한 대로 awscli를 사용하면 S3에서 파일을 복사하는 데 효과적이었습니다.

저도 매우 혼란스럽습니다.
이전에 다른 시점에 S3 버킷 두 개를 사용했었습니다. rake posts:missing_uploads 명령을 실행했을 때 약 500개의 게시글에 업로드가 누락되었거나 영향을 받았다고 나타났습니다.

하지만 이후 두 버킷의 자산을 로컬 우분투 서버(GCP 인스턴스)로 복사하기로 결정했습니다. 그런데 이제 누락된 업로드 수가 1,000개 정도로 증가했습니다.

Upload.all.sample(1000).pluck(:url) 명령을 실행하면 업로드 경로가 다양하게 나옵니다. 일부는 로컬에, 일부는 bucket1에, 그리고 아주 적은 수가 bucket2에 있습니다.

이제 어떻게 해야 할까요? (현재 업로드는 로컬 서버에 설정되어 있습니다.)

제 웹사이트는 bathindahelper.com으로, 2년 동안 게시글이 약 1,000개뿐인 작은 사이트입니다.

S3 URL을 다시 매핑해야 합니다. Upload.all.sample(1000).pluck(:url)의 출력을 공유해 주시겠어요?

ji, 감사합니다.

성공할 가능성이 높다면 시도해 볼 수 있습니다.

수정: 그렇게 해 보았지만, 제 게시글에서 이미지가 완전히 사라졌습니다. 이미지 플레이스홀더에 마우스를 올려도 URL 링크가 전혀 표시되지 않았습니다. 이전에는 작은 이미지 아이콘뿐만 아니라 이미지 URL도 표시되었습니다.

출력 중 약 45줄을 첨부합니다. 1000줄의 출력을 모두 여기에 붙여넣기를 원하시는지 모르겠습니다.

=> ["//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/7277b38e1d614b3d700f6266fa5b841a15e7c6ba.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/0c1f27b110ff476c636265b46d63f83c5bf575e9.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/a/a18dd8e63379c70e2a4014b0f6d85cf89ab12ed7.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/5/51798c75050206a784d9ae186cffb5c4558b1625.jpeg",
 "/uploads/default/original/2X/1/159ca83317895ddaefec42ee75c8748201f34d1f.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/1/1593a5f91ac7642180c9651544806d89342a4e24.jpeg",
 "/uploads/default/original/2X/f/fa7c701e58c198984707161364c81e9c59b27572.jpeg",
 "/uploads/default/original/2X/b/b6b12c4df19b234f6d1551c26d92a14969f19f12.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/f/fcd4201295e6e63a7496e70e8b067225774834f3.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/f/f42150c03cce15a1bdc34c6af746fe51b63db36c.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/e66cfb3a0bdc558a02fd999d1bf5a185521456cf.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/1885bc0fe4cf6ee25ab8d6e250807c9836168cdc.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/c/c1f240c94d45e0be0cfcd7a3cc714e389bb49f23.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/2/293518b6119a17d64222cf5d691aee271fa572cf.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/617f0bb525f05934ae455582deacb96e7fd097e9.jpeg",
 "//bhdisco.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/3/331a610d2237294bdb126eecf1f087173c5087df.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/d/d0b3efa53ceab849e17e781e63f2b969f94dbde0.jpeg",
 "/images/default-favicon.ico",
 "/uploads/default/original/2X/b/b399c60eb0b83232531ef2ead5a060fbd9c2a64e.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/9/987178dc86175225b999151e112deb3bf26b13af.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/c/c99c8a9dd3e59cecc6fb5010f362b1dc3f49ca66.jpeg",
 "//bhdisco.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/5/5c145297f26cd91f6f157d507324724ba15cb618.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/e/ef5c223cd604e3574c300671da61693dc5399e62.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/9c99b85e976c42bc3c692f75b8828abbbc2bc4ea.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/6/6f88f27ee155e69bb5b701b86eba9dc3e369bc09.png",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/3/3b454434e58b05db14f51c3fcdfbd36d0d96d4eb.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/b7e92457674b8c28f6ecfbc9340816fc3583d20e.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/7/731c0ee200660fb1888cd058c79282bf7f6dab95.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/a42f92c28be8bd5ac86bb55f36fc9ca0bec37c72.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/ac7dc4c531d428b152de3eebceb44bfe779c349d.jpeg",
 "//bhdisco.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/f/f361a9ad5194ef13c2c6b24e2db98455e7cc48d9.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/43ec21eafc00f8cd05976e0fbec41ef686e0e3b3.png",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/8b41f21b02df80a9e5c4ea14a5dffa5776811f3d.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/6/6eee5c5a5a2b274e7d8ccc911cd4f594cc4930de.png",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/c1736a8c2923f0bd341f7112db74cd62392f7e14.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/c/c3e2fbb84c55dbf2f1fdccf835964eb4319e2371.png",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/0/0b41e87ab7728dbead217e237c4ad8940bdfe776.png",
 "//bhdisco.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/a/a3ac121566d741d5b396ba49625f3206ff0c498f.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/b/bbbb6973cb0900389675691c5c129c907cf4611f.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/2/28f5d5bf46b30a33bde8e67c184cb099cc71511a.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/f/ff34c3fc207781d5881d4583cceb26aa54619c0e.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/f/f85db75b4721b8d24abf78ee3d25f2ffbef26da9.jpeg",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/1X/35c6402fbf4a8fca05f30924800fa0c90cf891e7.png",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/9/9d8f29892278f164e8ce27a6b58cc8af0760802c.png",
 "//bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/1/1a533eb9f4ec5186427a541a7ebbf06817627f97.png",

사이트에서 여러 깨진 아바타를 확인했습니다. S3 버킷을 삭제했거나, S3에서 모든 파일을 복원한 후 리베이킹을 한 번도 수행하지 않았기 때문인 것으로 추정됩니다. 출력 결과에 버킷이 두 개 표시되는 이유는 무엇인가요?

bhdisco.s3.dualstack.ap-south-1.amazonaws.com
bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com

한 버킷으로 사이트를 구성했다가 나중에 다른 버킷으로 변경했나요?

죄송합니다. 어떻게 답글을 놓치고 있었습니다. 정말 감사합니다.

S3 버킷은 삭제하지 않았지만, 이전에 버킷을 전환한 적이 있습니다(그때는 그로 인한 복잡성을 인지하지 못했습니다). 그래서 제 모든 자산이 S3 버킷 두 곳에 흩어져 있었지만, 이제 로컬 서버(/var/discourse/shared/web_only/uploads/default)에도 수동으로 복사해 두었습니다.

이 혼란을 정리하려면 어떻게 진행해야 하나요?

참고: 컨테이너 기본 명령어, 레일즈 콘솔(Rails console) 및 AWS S3에 익숙합니다.