Резервное копирование сайтов в Яндекс Диск

Благодаря статье Михаила Воеводского заметил, что тема резервного копирования востребована в сообществе. Решил поделиться своим скриптом резервного копирования написанным на Python. Примечателен он тем, что
- Умеет удалять старые бекапы с ЯДиска, если они старее чем N дней (настраивается в config.yaml)
- Умеет удалять старые логи с сервера
- Раскладывает бекапы на ЯДиске по папкам вида: ГГГГ-ММ-ДД
- Бекапит системные папки: /etc/, /var/log/, /root/
В итоге, на Яндекс Диске, в папке для бекапов указанной в config.yaml, мы получаем список файлов, похожий на этот:

Не обращайте внимания на имена пользователей u1-u15 — это у меня на сервере панелька назначает их автоматически. Если вы называете пользователей в системе по-другому, то и на Яндекс Диске они будут называться также.
Примечание
Сервер обязательно должен быть настроен по этой инструкции:
- На каждый сайт создаётся свой пользователь в системе (1 сайт = 1 пользователь)
- Все сайты-пользователи располагаются в /var/www/
- Имя пользователя сайта, название и имя пользователя БД одинаковые
Инструкция по установке в Linux Ubuntu, Debian и т.п.
У вас уже должен быть установлен на сервере Python 3.
- Устанавливаем менеджер пакетов для Python 3:
apt-get install python3-pip - Устанавливаем пакеты для Python, от которых зависим скрипт:
pip3 install requests pip3 install pyyaml - Закидываем папку с бекапером куда-нибудь на сервер, например в /root/scripts/py/
- Настраиваем config.yaml. В конфиге указывается:
- Имя/пароль mysql root
- Имя/пароль от Яндекс Диска
- Временная папка, в которую закидывать бекапы на сервере
- Папка на Яндекс Диске, где будут лежать бекапы
- Что бекапить (системные папки, базу, файлы)
- Удалять ли старые логи
- Сколько дней хранить бекапы на Яндекс Диске (более старые будут удаляться)
- Вызываем
и прописываем ежедневный запуск в 2 часа ночи:sudo crontab -e
0 2 * * * /usr/bin/env python3 /root/scripts/py/YaDiskBackuper/backuper.py
Вот собственно и всё. Теперь вы можете запустить скрипт и проверить, корректно ли он работает. В консоли от рута запускаем:
sudo python3 /root/scripts/py/YaDiskBackuper/backuper.pyЗамените путь до скрипта на свой.На сервере заходим во временную папку с бекапами, заходим на Яндекс Диск и наблюдаем, появляются ли там файлы.
Комментарии: 22
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Проверил пароли, вроде все верно… Это к чему запрос относится? Файлы, кстати, на Яндекс.Диск начали появляться… логи и папка etc по крайней мере :)
А файлы сайтов и базы появились на Яндекс Диске?
Решил подождать пока сработает крон…
Есть небольшая проблемка, не сохраняются бекапы баз, файлы все ок, а вот баз нет.
Пароль в конфиге root пользователя проверил 3-ды, верный.
Куда еще посмотреть можно?..
Сообщи, пожалуйста, когда проверишь скрипт.
Бекапы раз в неделю)
Сообщу позже, если не забуду)))
Есть 2 сервера на Ubuntu 16.04.1, настроенные аналогично, отличия в них:
1) На площадке Flops с установленной по умолчанию системой для работы в облаке
2) Выделенный сервер на другой площадке с системой, установленной из официального образа
В первом случае скрипт создания бэкапов вываливается с ошибками, во втором работает без запинки.
На обоих серверах python3 версии 3.5.1-3, модуль requests версии 2.13.0.
Вывод ошибок:
Поддержка Flops ничего существенного, естественно не говорит, ибо речь идет не только о стандартном ПО из пакетов.
Поскольку Питон не знаю от слова совсем, отладка превращается почти в метод научного тыка. Понимаю лишь общую логику выполнения, не более того.
Надеюсь на помощь более опытных в Питоне товарищей.
Проанализировав логи, оказалось, что данный скрипт не работает с модулем requests версии 2.13.
Помог откат модуля до версии 2.10
А можно спросить совета о доработке, как выкинуть из бекапа некоторые жестко прописанные директории?
У меня есть сайт (среди десятков других на сервере), где имеется фото архив на несколько Гб, не хочу его бекапить каждый раз. Как бы прописать эту директорию в игнор? Т.е. сам сайт пусть идет в бекап, но без этой директории с фотографиями.
Теперь с питоном разобраться бы)