Включите скрытую настройку для включения загрузки S3 в резервные копии

:bookmark: Это руководство объясняет, как включить скрытую настройку в Discourse для включения загрузок Amazon S3 (Simple Storage Service) в ваши резервные копии.

Discourse позволяет хранить медиа-загрузки на Amazon S3 для обеспечения масштабируемости и надежности. Однако по умолчанию эти загрузки не включаются в резервные копии.

В этом руководстве описывается включение скрытой настройки для добавления загрузок S3 в резервные копии, с вариантами конфигурации через консоль Rails или файл app.yml.

Использование консоли Rails

Чтобы включить загрузку S3 в резервные копии через консоль Rails, выполните следующие шаги:

  1. Подключитесь к вашему серверу Discourse через SSH.
  2. Войдите в контейнер Docker Discourse, выполнив:
cd /var/discourse
./launcher enter app
  1. Запустите консоль Rails:
rails c
  1. Включите настройку, выполнив:
SiteSetting.include_s3_uploads_in_backups = true
  1. Выйдите из консоли и контейнера, введя:
exit
exit

Это изменение вступает в силу немедленно. Никаких дополнительных действий не требуется.

Изменение файла app.yml

Вы также можете внести это изменение, добавив настройку в секцию env: файла app.yml.

  1. Перейдите в директорию контейнера приложения Discourse:
cd /var/discourse
  1. Откройте файл app.yml, расположенный в containers:
nano containers/app.yml
  1. В секции env: добавьте строку:
DISCOURSE_INCLUDE_S3_UPLOADS_IN_BACKUPS: true
  1. Сохраните файл и выйдите из редактора.
  2. Примените изменения, пересобрав приложение:
./launcher rebuild app

Чтобы изменение вступило в силу, необходимо выполнить команду ./launcher rebuild app для применения настройки.

9 лайков

Разве не достаточно уничтожить и перезапустить контейнер?

1 лайк

Я думаю, что уничтожать не нужно, достаточно перезапуска. Я подтвержу это позже.

В любом случае, спасибо @pfaffman за ваш другой howto гайд, который я использовал в качестве шаблона для этого.

2 лайка

Я уверен, что нужно уничтожить и запустить заново, чтобы применить переменные окружения к контейнеру.

Конечно, если они выполняли обновления через Docker Manager, эти изменения будут утеряны при уничтожении контейнера, поэтому пересборка — наиболее безопасная рекомендация. Возможно, лучше рекомендовать пересборку, так как это самый надёжный способ.

3 лайка

Почему бы не использовать эту настройку, чтобы включить все загрузки в резервную копию:
image

Это будет включать локальные загрузки, но не будет скачивать файлы из S3 для включения в резервную копию.

1 лайк

Хорошо. Я не знал.
Но в чём разница между «Локальными загрузками» и папкой «Файлы, хранящиеся в S3 ‘Uploads’»?

Также, хотя я ещё не менял настройки в web_only или в консоли rails, как было указано выше, я пока выбрал только одну настройку, о которой говорится здесь.

Тем не менее, когда я запустил резервное копирование всего 10 минут назад, оно показало, что загружаются тысячи файлов (что, как я полагаю, возможно только для моего хранилища AWS S3, и само слово «Загрузка» подразумевает скачивание из удалённой папки S3).
Также отображается сообщение «Не удалось загрузить» для множества файлов. Стольких файлов. Я предположил, что если бы эти файлы находились на локальном облачном сервере, почему бы системе не включить их в резервную копию? Посмотрите на этот скриншот:

Если вы настроили конфигурацию провайдера объектного хранилища, совместимого с S3, для загрузок и перенесли свои локальные загрузки в S3, то ваши файлы находятся там. Они не резервируются, так как предполагается, что S3 уже имеет резервное копирование, а их скачивание дорого и обычно излишне.

Если вам нужно извлечь их из S3 (например, если вы размещены на discourse.org и переходите на другую платформу), вам потребуется резервная копия, включающая файлы, хранящиеся в S3.

Почему вы хотите скачать свои файлы из S3?

Да, похоже, что загрузка файлов из S3 не удаётся. Я предполагаю, что ни один из них не был скачан, хотя возможно, что ваш диск переполнен (я ожидал бы ошибку о переполнении диска, но, возможно, это не так?).

1 лайк

Спасибо. Ещё раз.

Поскольку мой сайт очень-очень маленький, платить несколько долларов, которые с каждым месяцем растут из-за небольших обновлений, за хранение в AWS S3 каждый месяц становится для меня немного неудобно. Я планирую перенести папку «Uploads» (и, возможно, также папку «backup») на другого провайдера, например Google One Drive, iDrive, Hetzner или другие недорогие альтернативы.
Теперь я понимаю, что даже различные типы хранилищ AWS (от самых активных до архивных), если бы я выбрал их разумно в начале, обошлись бы мне вдвое дешевле за то же количество файлов.

Но я сделаю это сейчас.

1 лайк

Когда несколько лет назад я решил хранить свои медиа-«загрузки» в бакете AWS S3, в то время (насколько я помню) ВСЕ существующие медиафайлы, загруженные пользователями, тоже были перемещены в S3.

Кроме того, я только что проверил папку /var/discourse/shared/web_only/uploads/default/optimized/1X — в ней всего 63 файла PNG, а в /var/discourse/shared/web_only/uploads/default/original/1X — всего 3. (За исключением папки 1X, других подобных папок в директориях «uploads» или «default» нет.)

Также я пока не менял никаких настроек в консоли Rails или в YAML-файле, чтобы включить загрузку из S3 в мои резервные копии. Так почему же система показывает, что она загрузила столько «медиа-загрузок» ИЗ S3!!!
И почему не удалось загрузить так много загруженных файлов? Скриншот здесь.

Более того, моя папка загрузок в S3 занимает около 3 ГБ (32 тысячи файлов), тогда как в логах резервного копирования указано, что было загружено только около 3,2 тысячи файлов (10% от общего числа).

Очень запутанно.

Есть ли какая-то ДРУГАЯ команда Rails, чтобы дважды убедиться, что эта опция не была включена много лет назад, когда я перешёл на AWS S3?

Любое пояснение будет полезным.

Нужно ли включать загрузки, если у вас есть два отдельных хранилища: одно для резервных копий и другое для загрузок?

1 лайк