Сегодня я у мамы сисадмин. Кароче, есть у нас ряд серверов без каких-либо панелей управления и резервное копирование на них выполнялось «лишь бы как» — где-то локально, где-то никак, где-то через сторонние утилиты. Я решил навести порядок и накидал небольшой скрипт под это дело.
Кидаю сюда, чтобы самому не потерять, но и вы тоже можете воспользоваться
Для настройки резервного копирования с выгрузкой по FTP создаем в корне директорию backup, а в ней фал — backup.sh
Открываем файл backup.sh любым редактором и размещаем в нём следующий код:
curl ftp://USER:PASSWORD@IP/backup/$(date +"%Y-%m-%d")/ --ftp-create-dirs; zip -r /backup/www.zip /var/www/app/*; curl -T /backup/www.zip ftp://USER:PASSWORD@IP/backup/$(date +"%Y-%m-%d")/; rm /backup/www.zip; mysqldump -uUSER -pPASSWORD DATABASE > /backup/app.sql; curl -T /backup/app.sql ftp://USER:PASSWORD@IP/backup/r-pr/$(date +"%Y-%m-%d")/; rm /backup/app.sql
cURL — крайне удобный инструмент, в том числе при работе с FTP. В строчках с curl необходимо заменить USER, PASSWORD, IP на ip-адрес FTP-сервера, логин и пароль к нему, соответственно.
В строке с mysqldump необходимо заменить USER, PASSWORD, DATABASE на логин, пароль и название БД для экспорта.
По завершению правки скрипта, убедимся, что на сервере установлено всё необходимое ПО для работы скрипта:
apt update && apt install zip && apt install curl
Теперь запустим планировщик заданий:
crontab -e
И добавим строчку:
@daily /backup/backup.sh
Готово. Теперь, резервное копирование будет выполняться ежедневно, сохранять zip-архив файлов, а также SQL-дамп БД и выгружать всё это на FTP-сервер в директорию с текущей датой: /backup/ГГГГ-ММ-ДД/
По желанию, можно архивировать и SQL-дамп, использовать другие архиваторы (например, tgz) или использовать инкрементальные бэкапы с помощью rcync.