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 uploads:migrate_from_s3 не отображается при вводе команды rake -AT в приложении.

Существует ли новый способ миграции загрузок из S3 обратно на локальное хранилище?

Какой вывод вы получаете при выполнении rake task uploads:migrate_from_s3??

rake aborted!

Неизвестная задача ‘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

Настройте aws с вашим идентификатором и паролем S3, затем

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

Эта команда загрузит все файлы из S3 в public/uploads/default/. Затем

rake posts:rebake
exit
./launcher rebuild app

Сначала я попытался исправить миграцию с S3, но после того, как завершил использование собственной миграции в качестве тестовой среды для разрабатываемого кода, мне сказали, что я выбрал совершенно неверный подход. Это утверждение подтвердилось повреждением данных в моем (крупном) экземпляре, который я мигрировал с S3 на локальные файлы. Недавно мне пришлось вручную исправить поврежденные данные в базе данных, и я не ожидаю, что с очисткой последствий моей попытки покончено.

Если бы я сейчас начал миграцию с S3 на собственное хранилище, я бы запустил контейнер MinIO рядом с Discourse, использовал minio-client для копирования данных из S3 в контейнер MinIO, перенастроил Discourse на новый «S3»-адрес локального MinIO, а затем выполнил 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-адреса снова стали относительными. К сожалению, для тех, кто будет читать этот пост в будущем, я не уверен, какая комбинация задач rake и пересборки приложения стала секретом моего успеха. Кто-то более опытный в Discourse, чем я, должен составить безошибочное руководство о том, как это следует делать.

Использование awscli, как описано выше Прави, было эффективным для копирования файлов из S3.

Я тоже очень запутался.
Ранее у меня были два бакета S3, созданные в разное время. Команда rake posts:missing_uploads показывала, что около 500 записей не имеют вложений или пострадали.

Затем я решил скопировать все файлы из обоих бакетов на локальный сервер Ubuntu (на экземпляре GCP). Теперь количество отсутствующих вложений выросло примерно до 1000.

Если выполнить команду Upload.all.sample(1000).pluck(:url), я получаю различные пути к вложениям: некоторые на локальном сервере, некоторые в бакете1 и очень мало в бакете2.

Что мне делать теперь? (В данный момент вложения настроены на локальном сервере).

У меня небольшой сайт, всего около 1000 записей за два года.

Вам нужно перенастроить URL S3. Можете вывести результат команды Upload.all.sample(1000).pluck(: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 и AWS S3.