Задача Cron для синхронизации локальных резервных копий с DigitalOcean Spaces

Похоже, что резервное копирование в DigitalOcean Spaces не работает. Однако сервер имеет смонтированный бакет через s3fs с теми же учетными данными. Мне нужно, чтобы резервные копии сохранялись только в Spaces, а не загрузки и прочее. В логах указано: EXCEPTION: Aws::S3::Errors::Forbidden. В продакшн-логе: Failed to list backups from S3: Aws::S3::Errors::SignatureDoesNotMatch.

Есть ли способ настроить перемещение локальной резервной копии в бакет через bash-скрипт с помощью cron? Спасибо.

Если вы столкнулись с этой проблемой и хотите продолжить работу, выполните эту команду в терминале bash. Пользователь должен состоять в группе docker
docker cp app:"/var/www/discourse/public/backups/default" /whatever-host-path/

Вы имеете в виду резервные копии Discourse? Если да, то почему они находятся в WordPress?

Если вы хотите, чтобы они отправлялись в пространства, почему бы просто не настроить резервное копирование в S3?

Основной сайт — WordPress. Discourse размещён в подкаталоге.
Основной сайт: main.com
Discourse: main.com/forums
Однако при настройке учётных данных S3 для DigitalOcean Spaces у меня возникают вышеупомянутые ошибки. У меня есть срок сдачи, поэтому я обошёл это с помощью команд, которые я уже упоминал. Но было бы полезно увидеть рабочие настройки или шаги по устранению неполадок, чтобы это заработало.

Вы выше упоминали s3fs. Он вам не нужен. Ошибки, показанные выше, возникают из-за s3fs, который не поддерживается Discourse. Вам следует следовать инструкциям, например, по настройке загрузки файлов и изображений в S3 (Set up file and image uploads to S3) или использованию объектного хранилища для загрузок (S3 и аналоги) (Configure an S3 compatible object storage provider for uploads), но настроить только бакет для резервных копий.

Чтобы прояснить ситуацию: смонтирован бакет DigitalOcean Spaces именно на «хосте», а не в контейнере. Эти две проблемы не связаны между собой. Ошибки возникают при создании резервных копий, если Discourse настроен на использование S3. Резервные копии создаются успешно, если я вручную копирую локальные резервные копии на хост-машину, а затем перемещаю их в DigitalOcean Spaces.

Если логи Forbidden исходят от Discourse, а не от s3fs при попытке сохранения в бакет Spaces, то, скорее всего, у вас неверные учётные данные или неверное имя бакета.

Ах!

   Failed to list backups from S3:

Ага. Я думаю, это и есть проблема. Система пытается получить список бакетов, но не может. Я не совсем уверен, как это исправить, но именно эту проблему нужно решить, так что, возможно, стоит обновить тему. Если вы хотите исправить резервное копирование в S3, вы можете получить помощь здесь; если же вы настраиваете s3fs, вам, скорее всего, потребуется обратиться за помощью в другое место.

Попробуйте добавить эту переменную окружения в ваш app.yml:

  FORCE_S3_UPLOADS: 1

Правильно ли указан ваш endpoint? Посмотрите раздел Digital Ocean в статье Использование объектного хранилища для загрузки файлов (S3 и аналоги).

Наконец-то это сработало для DigitalOcean Spaces: a) загрузка резервных копий в Object Storage, b) не загрузка файловых загрузок в Object Storage. Пожалуйста, отметьте это как решённое. Спасибо всем!