アップロードにAmazon S3を使用するのをやめましょう

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

「いいね!」 2

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

「いいね!」 1

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.

「いいね!」 4

rake -AT を実行しても、rake タスク uploads:migrate_from_s3 が表示されません。

アップロードを S3 からローカルへ移行する新しい方法はありますか?

「いいね!」 2

rake task uploads:migrate_from_s3 を実行したときにどのような出力が得られますか?

rake が失敗しました

タスク ‘uploads:migrate_from_s3’ のビルド方法がわかりません(利用可能なタスクの一覧は rake --tasks で確認できます)

意味するところは?uploads:migrate_to_s3

これはコミュニティのプルリクエストで削除されました。その理由については以下をご覧ください。

「いいね!」 4

ありがとうございます。これを手動で行う方法に関する手順やガイダンスが見つかりません。

「いいね!」 1

すべてのファイルを S3 からサーバーへ手動で移行するには、awscli を使用できます。

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
./launcher rebuild app
「いいね!」 4

まず、S3 からの移行を修正しようと試みました。しかし、私が独自に作成した移行をコード作成のテストベッドとして使用し終えた後、完全に間違ったアプローチを取っていたと指摘されました。この主張は、S3 から移行してローカルファイルに移した際の大規模なインスタンスで生じたデータ破損によって裏付けられました。比較的最近、私は手動でデータベース内の破損データを修正しましたが、この試みの後始末が完全に終わったという期待は持っていません。

もし今日、S3 から自前のストレージへの移行を始めるなら、Discourse の隣に MinIO コンテナを起動し、minio-client を使って S3 から MinIO コンテナへデータをコピーし、Discourse の設定を新しい「S3」場所であるローカルの MinIO に変更し、その後 posts:remap を実行するか、すべての投稿を再 Bake して MinIO コンテナから「S3」を提供するようにします。

以下は、posts:remap がどのように機能すべきかの例です。もっと良い例がどこかにある気がするのですが、これでも始めるには十分でしょう。

「いいね!」 6

これらの手順に従ってアップロードファイルをコピーできましたが、S3 アップロードをオフにしていても、インスタンス全体に S3 サーバーへのリンクが残っています。Discourse のリマップを試みましたが効果はなく、rake posts:remapposts:rebake も効果がありませんでした。

S3 へのアップロード設定は簡単でしたが、元に戻すのはそう簡単ではありませんでした。

「いいね!」 4

s3 からの移行は長期間破損したままで、未だに修正されていません。mcdanlj による上記の投稿をご覧ください。

以下のコマンドを実行した際にどのような出力が得られますか?

./launcher enter app
rails c
Upload.all.sample(20).pluck(:url)
「いいね!」 3

サイトがまだ大規模ではないため、アップロードを個別に再リンクしました。rake posts:missing_uploads を使用して、すべて見逃していないか確認するのに役立ちました。

「いいね!」 2

すべての URL が正しくリマップされているか確認しましたか?画像だけでなく、アバター、アイコン、バックアップなどの URL もリマップする必要があります。上記のコマンドを実行し、出力に S3 URL が含まれているか確認してください。

「いいね!」 3

URL はすべて相対パスに戻りました。残念ながら、この投稿を今後読む方々のために、どの rake タスクとアプリの再構築の組み合わせが私の成功の秘訣だったのかは確信が持てません。Discourse について私よりも詳しい方が、これをどう実現すべきかについての失敗しないチュートリアルを作成してくれると嬉しいです。

上記の Pravi 氏が説明した awscli を使用して、S3 からファイルをコピーするのは効果的でした。

「いいね!」 6

私も非常に混乱しています。
以前、異なる時期に 2 つの S3 バケットを持っていました。rake posts:missing_uploads を実行すると、約 500 件の投稿でアップロードが欠落している、または影響を受けていると表示されました。

その後、両方のバケットのアセットをローカルの Ubuntu サーバー(GCP インスタンス上)にコピーすることにしました。すると、欠落しているアップロードの数は 1000 件程度に増えました。

Upload.all.sample(1000).pluck(:url) を実行すると、ローカル、バケット 1、そしてごく少数がバケット 2 にあるなど、アップロードのパスが異なります。

今どうすればよいでしょうか?(現在はローカルサーバーにアップロードを設定しています)

私の ウェブサイト は小規模で、2 年間で投稿数は約 1000 件だけです。

「いいね!」 1

S3 URL の再マッピングが必要です。Upload.all.sample(1000).pluck(:url) の出力を掲載していただけますか?

「いいね!」 1

ありがとう、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",
「いいね!」 1

サイト上に複数の壊れたアバターが表示されています。S3 バケットを削除したか、S3 からすべてのファイルをコピーし直した後にリベイクを行っていないことが原因だと思われます。出力に何故 2 つのバケットがあるのでしょうか?

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

サイト設定をあるバケットで構成した後、別のバケットに変更されたのでしょうか?

「いいね!」 3

返信の通知に気づかずすみません。ありがとうございます。

S3 バケットは削除していませんが、以前にバケットを切り替えていました(当時はその複雑さを把握していませんでした)。そのため、すべてのアセットが 2 つの S3 バケットに分散していましたが、現在は手動でローカルサーバー(/var/discourse/shared/web_only/uploads/default)にもコピーしました。

この混乱を解消するにはどうすればよいでしょうか?

注:コンテナ、Rails コンソール、AWS S3 の基本的なコマンドには慣れています。

「いいね!」 1