Простые скрипты для резервного копирования сайта на виртуальном хостинге или VPS
Это скрипт для бэкапа будет работать на любой VPS/VDS или выделенном сервер под управлением Linux, FreeBSD. Но почему я делаю ударение на слове виртуальный хостинг? А потому что в виртуальном хостинге не установлены многие утилиты и вы можете рассчитывать только на утилиты и скрипты из базовой поставки дистрибутива. Вам вряд ли позволят доустановить нужные утилиты, а если и позволят - я бы на вашем месте не стал этого делать, потому что ответственность за любой косяк ляжет на ваши плечи, а не на техподдержку хостера.
Например, посмотрите на код для пересылки файла по FTP, сразу напрашивается использовать утилиту wput, но wput не установлена на виртуальном тарифе хостера.
Вывод большую часть скриптов для бекапа, которые есть в интернете, вы не сможете использовать. Ниже я представляю, свой вариант скрипта именно для бекапа виртуальных хостингов с использованием протокола FTP, без установки дополнительных программ или модулей.
— Dmytro Yakovenko 2022/04/03 Обновление:
- Добавлен скрипт для VPS с ротацией бэкапов файлов
- Добавлен скрипт для VPS с ротацией директорий бэкапов
Ограничения на работу скрипта для бэкапа сайтов
Скрипт использует только утилиты, которые входят в стандартную поставку дистрибутива и/или установленного хостером программного обеспечения: встроенный FTP клиент, bash, mysqldump.
В ходе тестирования скрипта оказалось, что ftp клиент (обычно располагающийся по пути /usr/bin/ftp) не установлен у менгих хостинг провайдеров, по этому скрипт будет работать не везде.
Работоспособность скрипта проверен для виртуальных тарифов хостинг-провайдеров:
Ниже список хостинг провайдеров у которых скрипт НЕ будет работать, так как нет ftp клиента, которого можно запустить из консоли виртуального хостинга. Варианты решения: 1) внешний скрипт должен забирать файлы бэкапов 2) копировать файлы используя другую утилиту, например scp, sftp для протокола SSH:
- Hostinger — дешёвый премиум хостинг с конструктором сайтов и профессиональной онлайн поддержкой.
- Компания «Хостинг «Украина»» отличается полностью автоматизированным сервисом по предоставлению хостинга и регистрации доменных имен. И при этом у них реально работает техподдержка.
Скачать скрипт
- template_script_backup_site
#!/bin/bash # Author: Хостинг Консультант https://dieg.info # Description: Бэкап сайта на виртуальном хостинге, с сохранением # на удаленном FTP хранилище # Название проекта, используется для формирования имен и # создания папки на FTP хранилище SITENAME="sitename" # Путь к директории виртуального хоста SITEDIR="/var/www/yoursite" # Папка для локального бэкапа DIRBACKUP="/home/backup" #NOW=$(date +"%Y-%m-%d") # Формат даты для имен NOW=$(date +"%Y-%m-%d-%H-%M-%S") ### FTP server Setup ### FTPS="example.com" # Сервер FTP FTPU="user" # Имя пользователя FTP FTPP="password" # Пароль FTP FTPD=$SITENAME # Папка на FTP ### MySQL Setup ### MYSQLU="user" # Пользователь MySQL MYSQLP="password" # Пароль пользователя MySQL DBNAME="dbname" # Название базы MySQL # Создаем бэкап базы данных MySQL. 2>/dev/null /usr/bin/mysqldump -u $MYSQLU -p$MYSQLP $DBNAME > $SITEDIR/$SITENAME-$DBNAME-$NOW.sql # Создаем бэкап сайта локально. /bin/tar -czf $DIRBACKUP/$SITENAME-$NOW.tar.gz $SITEDIR # Удаляем бэкап MySQL /bin/rm -f $SITEDIR/$SITENAME-$DBNAME-$NOW.sql # Подключаемся и копируем файл на ftp сервер /usr/bin/ftp -n -i -p $FTPS <<INPUT_END user $FTPU $FTPP mkdir $FTPD cd $FTPD lcd $DIRBACKUP mput $SITENAME-$NOW.tar.gz quit INPUT_END # Удаляем локальный бэкап /bin/rm -f $DIRBACKUP/$SITENAME-$NOW.tar.gz
Инструкция по использованию скрипта
- Скачиваем скрипт выше и загружаем в удобную вам директорию (обычно в корень с сайтами). Для примера назовем файл backup.sh и загрузим в директорию /var/www
- Делаем файл исполняемым:
chmod +x backup.sh
- Создаем директорию для временных файлов и задаем к ней путь в переменной DIRBACKUP.
- Задаем переменную SITENAME и заполняем переменные для доступа к MySQL и FTP серверу.
- Тестируем полученные скрипт из консоли:
./backup.sh
- Настраиваем Cron для запуска скрипта
# crontab -e 0 1 * * * /var/www/backup.sh
Архив с бэкапом будет отправляться в час ночи, каждый день на указанный ftp.
Внимание CRON!
Каждый хостинг провайдер предоставляет два варианта настройки запуска скриптов по расписанию: классический cron, доступный при подключении SSH, или настройку через панель управления хостингом. Выберите какой-то один способ добавления заданий (либо панель, либо SSH), так как при добавлении нового задания через Crontab в панели управления, те задачи, которые ранее были созданы по SSH, будут удалены!
Настройка Crontab в панели управления Timeweb
Скрипт бэкапа будет запускаться один раз в сутки в 2:30 ночи.
Добавление задачи cron для Хостинг Украина
Это скрипт РАБОТАТЬ НЕ будет на виртуальных тарифах, выберите другой способ резервного копирования в статье Все что нужно знать о резервировании данных.
У хостинга Украина достаточно сложная настройка Cron через панель управления. Я в работе предпочитаю писать скрипты при помощи PHP, а не bash. Если вы решите писать тоже скрипты на PHP - внимательно вычитайте их документацию по нюансам запусков PHP скриптов через Cron.
Для bash скриптов ограничение только на длину задачи, не должно превышать 255 символов и рекомендация по использованию полных (абсолютных) путей. Мой скрипт удовлетворяет этим условиям.
Для добавления скрипта в cron откройте раздел «Расписание задач (Cron)» и нажмите «Добавить задачу». И видим поля для настройки:
- «Задача» — укажите команду, которую нужно выполнять по расписанию (не забываем, об ограничение в 255 символов). И обращаем внимание, что они по умолчанию предлагаю наш скрипт сохранять непосредственно в каталоге сайте - то есть любой скрипт доступ для запуска любому пользователю в мире. Это не правильно! Создайте скрипт на уровень выше, то есть в директории /www/, в этом случае скрипт будет в безопасности.
Скрипт 1 бэкап только файлов с ротацией бэкапов
Вы можете использовать этот скрипт для создание локальных резервных файлов, но он создавался для хранения в примонтированные директории, при помощи технологии FUSE (ftp, ssh).
#!/bin/bash # Author: Hosting Consultant https://dieg.info # Description: Бэкап файлов сайта, без БД # хранение на удаленном хранилище FUSE # Название проекта, используется для формирования имен SITENAME="conf_task43.examle.com" # Путь к директории виртуального хоста SITEDIR="/var/www/examle.com/" # Папка для локального бэкапа DIRBACKUP="/home/ftp_share/ftp_backup" NOW=$(date +"%Y-%m-%d-%H-%M-%S") # Количество сохраняемы бэкапов (файлов) BACKUPS=20 # Создаем бэкап сайта локально. /usr/bin/tar -czf $DIRBACKUP/$SITENAME-$NOW.tar.gz $SITEDIR check=$(ls "$DIRBACKUP" | wc -l) if [ $check -gt $BACKUPS ] then FILEDEL=$(ls -lt "$DIRBACKUP" | awk 'END{print $9}') #echo $DIRBACKUP/$FILEDEL /usr/bin/rm $DIRBACKUP/$FILEDEL #else # echo 'Лимит бэкапов не достигнут' fi
Скрипт 2 бэкап только БД MySQL с ротацией директорий бэкапов
Вы можете использовать этот скрипт для создание резервных файлов БД MySQL, но скрипт создавался для хранения в примонтированные директории, при помощи технологии FUSE (ftp, ssh).
#!/bin/bash # Author: Hosting Consultant https://dieg.info # Description: Бэкап только БД MySQL # хранение на удаленном хранилище FUSE # Название проекта, используется для формирования имен SITENAME="db_task43.example.com" NOW=$(date +"%Y-%m-%d") # Формат даты для имен NOWF=$(date +"%Y-%m-%d-%H") # Папка для локального бэкапа DIRBACKUP="/home/ftp_share/ssh_backup/$NOW" mkdir $DIRBACKUP DIRLSBACKUP="/home/ftp_share/ssh_backup" # Количество сохраняемы бэкапов (файлов) BACKUPS=2 ### MySQL Setup ### MYSQLU="user" # Пользователь MySQL MYSQLP="password" # Пароль пользователя MySQL DBNAME="userdb" # Название базы MySQL # Создаем бэкап базы данных MySQL. 2>/dev/null /usr/bin/mysqldump --no-tablespaces -u$MYSQLU -p$MYSQLP $DBNAME > $DIRBACKUP/$SITENAME-$DBNAME-$NOWF.sql # Архивируем cd $DIRBACKUP /usr/bin/tar -czf $DIRBACKUP/$SITENAME-$DBNAME-$NOWF.tar.gz $DIRBACKUP/$SITENAME-$DBNAME-$NOWF.sql # Удаляем бэкап MySQL /usr/bin/rm -f $DIRBACKUP/$SITENAME-$DBNAME-$NOWF.sql check=$(ls "$DIRLSBACKUP" | wc -l) if [ $check -gt $BACKUPS ] then FILEDEL=$(ls -lt "$DIRLSBACKUP" | awk 'END{print $9}') #echo $DIRLSBACKUP/$FILEDEL /usr/bin/rm -Rf $DIRLSBACKUP/$FILEDEL #else # echo 'Лимит бэкапов не достигнут' fi
Читайте также
📌 Для тестирования скриптов, установщиков VPN, Python ботов рекомендуем использовать надежные VPS на короткий срок. Если вам нужна помощь с более сложными задачами, вы можете найти фрилансера, который поможет с настройкой. Узнайте больше о быстрой аренде VPS для экспериментов и о фриланс-бирже для настройки VPS, WordPress. 📌
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Китайский VPN Shadowsocks простая установка и настройка
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах