Вскоре после моего переезда на Cloudinary для хостинга изображений и видео, я закономерно задался вопросом: как теперь это всё богатство резервировать?
Ничто не вечно под луной, и облака в том числе. Или можно в один прекрасный день, скажем, лишиться своего аккаунта вместе с доступом. Поэтому резервное копирование — задача более чем актуальная.
На платных планах Cloudinary предлагает вариант резервного копирования в Amazon S3 bucket, но на бесплатном тарифе эта функция недоступна.
Скрипт резервного копирования
Поскольку хостинг обладает богатыми возможностями по интеграции при помощи своих API, я нисколько не сомневался, что сделать скрипт для резервного копирования контента будет совсем несложно.
Так и вышло. Я набросал удобный, рабочий вариант на Python 3, копирующий все фото и видео на локальный диск, меньше, чем за час: cloudinary-backup.
Установка и настройка
Чтобы использовать скрипт, нужно:
- Установить пакет cloudinary:
sudo pip3 install cloudinary
- Установить переменную окружения
CLOUDINARY_URL=cloudinary://<ключ_API>:<пароль_API>@<имя_облака>
— это значение можно скопировать прямо в заголовке Cloudinary Dashboard. - Подкрутить переменную
BACKUP_DIR
в заголовке скрипта, чтобы она указывала на желаемую локальную папку.
Запуск
После этого можно скрипт просто запускать (при запуске с ключом командной строки -v
вывод будет намного подробнее):
Скрипт сравнивает содержимое облачного хостинга и локального диска, скачивая только те изображения и видео, которые либо отсутствуют локально, либо имеют отличающийся размер.
Один из нюансов, связанных с работой Cloudinary, состоит в том, что Admin API, используемый для получения списков контента, является лимитированным по частоте использования. Но этот лимит составляет 500 запросов в час, и за один запрос можно получить до 500 элементов списка, так что, если у вас на хостинге меньше 250 тыс. файлов, этого должно быть достаточно.
Удаление «лишних» файлов
Если программу запустить с ключом -d
, она также удалит локальные файлы, отсутствующие в Cloudinary.
Исходный код
Исходный код скрипта доступен на GitHub. ■
Комментарии