webirus
@webirus
Тыжверстальщик! Наверстай мне упущенное...

Как сохранять бэкапы на сервер через консоль?

Когда я завершаю работу над каким-то сайтом, на сегодня или вообще, я запускаю простой скрипт, который делает коммит на сервер гита и создает два файла (базу данных и архив сайта).
Хочу немного расширить функционал скрипта, но не знаю, с какой стороны подойти.

То, что есть сейчас, для коммита на гит и архивирования:

#!/bin/bash
# делаем бэкап базы данных в папку проекта
sudo mysqldump -u`head -1 mysql.txt | tail -1` -p`head -2 mysql.txt | tail -1` `head -1 mysql.txt | tail -1` > `head -1 mysql.txt | tail -1`.sql
# декодируем базу в нормальную кодировку
sudo grep -rl utf8mb4 `head -1 mysql.txt | tail -1`.sql | xargs perl -p -i -e 's/utf8mb4/utf8/g'
# меняем права и владельца на конечный файл
sudo chown sergey:sergey -R `head -1 mysql.txt | tail -1`.sql
sudo chmod -R 644 `head -1 mysql.txt | tail -1`.sql
# добавляем изменения в git
git add --ignore-removal .
git commit -a -m "$(date +"%Y-%m-%d %H:%M")"
git push origin master
# записываем файлы из директории в архив
tar -cvpzf archive.tar.gz --exclude='node_modules' --exclude='.git' --exclude='archive.sh' --exclude='gitcommit.sh' --exclude='gulpfile.js' --exclude='mysql.txt' --exclude='package.json' --exclude='.gitignore' --exclude='*.sql' --exclude='*.tar.gz' * .htaccess

1. Нужно дописывать в название архива дату и время создания файла, в идеале, если будет так: ГГГГ-ММ-ДД_ЧЧ-ММ-СС

2. Нужно скидывать архив через SSH на сервер (при этом не хочется каждый раз вводить пароль), всегда в определенную папку будет отправляться /mnt/backupftp/$sitename - название $sitename динамичное, оно подставляется в зависимости от команды: sitestop sitename, которой собственно и запускается скрипт.

3. При этом не хочется из папки архивов делать помойку, нужно чтобы в папке каждого сайта хранилось не более 3 резервных копий, то есть старые файлы нужно как-то затирать, если записывается уже 4-й архив.

Да, я паранойик, мне мало копий на гите, хочу иметь еще обычные архивные копии.
Дату и время вроде не сложно написать, вот с отправкой на сервер без пароля и с затиранием файлов у меня совсем беда)
Куда тут копать можно?)
  • Вопрос задан
  • 757 просмотров
Решения вопроса 3
Wolfnsex
@Wolfnsex
Если не хочешь быть первым - не вставай в очередь!
Довольно сложно отвечать в режиме "слепой глухому", т.к. не совсем понятно, что именно у Вас не получается... но, давайте попробую.

Нужно скидывать архив через SSH на сервер (при этом не хочется каждый раз вводить пароль), всегда в определенную папку будет отправляться /mnt/backupftp/$sitename - название $sitename динамичное, оно подставляется в зависимости от команды: sitestop sitename, которой собственно и запускается скрипт.

Что бы не вводить пароль - используйте авторизацию по ключу. Информации на эту тему, просто прорва, например вот (первая попавшаяся ссылка).

Если название $sitename - уже передано в скрипт, не вижу ни одной проблемы с тем, что бы его использовать.

При этом не хочется из папки архивов делать помойку, нужно чтобы в папке каждого сайта хранилось не более 3 резервных копий, то есть старые файлы нужно как-то затирать, если записывается уже 4-й архив.
После подключения по SSH - считаете кол-во файлов в папке, можно их так же предварительно отсортировать в прямом или обратном порядке по датам, а потом удалить все файлы по списку, чей индекс в массиве больше/меньше 2 или 3.

Потом просто загружаете Ваш файл туда...
Ответ написан
Комментировать
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
1. Команда date позволяет создать строку в удобном виде, используя date +<формат>
2. Команда, заключенная в обратные одинарные кавычки, будет выполнена, и вместо нее подставлен результат выполнения.

То есть можно делать
zip myarchive.zip file1 file2 file3

А можно
zip myarchive_`date +%Y%m%d-%H%M%S`.zip file1 file2 file3

3. Копировать файлы на удаленный сервер без пароля - настройте авторизацию по ssh ключам.

4. Удалять старые файлы можно, выполняя на удаленном компе например команду
find /directory -ctime +10 -delete
будут удаляться файлы старше 10 дней.

А вообще, посидите вечерок, погуглите что такое bash и стандартные консольные команды в Linux.
Ответ написан
Xuxicheta
@Xuxicheta
инженер
несколько команд для изучения
ssh-keygen
ssh-copy-id
rsync
rdiff-backup
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы