Скрипт для бэкапа при помощи restic
restic — инструмент для бэкапов. cli-интерфейсом напоминает git. Умеет бэкапить на другие серверы по ftp/ssh, поддерживает S3 и кучу других облачных сервисов.
Скрипт backup.sh упрощает доступ к бэкапам от restic. Для доступа к репозиторию бэкапа требуется наличие переменной окружения RESTIC_PASSWORD:
export RESTIC_PASSWORD=yoursupersecretpassword
Скрипт backup.sh упрощает доступ к бэкапам от restic. Для доступа к репозиторию бэкапа требуется наличие переменной окружения RESTIC_PASSWORD:
export RESTIC_PASSWORD=yoursupersecretpassword
- #/usr/bin/env bash
 - # File: backup.sh
 - confirm() {
 - read -r -p "${1:-Are you sure? [y/N]} " response
 - case "$response" in
 - [yY][eE][sS]|[yY])
 - true
 - ;;
 - *)
 - false
 - ;;
 - esac
 - }
 - restic -r "$RESTIC_REPO" cat config 2> /dev/null
 - if [ $? -ne 0 ]
 - then
 - ## Repo not initialized
 - confirm "Init repo? [y/N]" && restic -r "$RESTIC_REPO" init
 - elif [ $# -eq 0 ]; then
 - ## Dry backup
 - echo "Perform dry backup"
 - restic -r "$RESTIC_REPO" \
 - -n --verbose backup "$RESTIC_BACKUP_PATH" \
 - --exclude-file="$RESTIC_BACKUP_EXCLUDES"
 - else
 - ## Repo initialized
 - case "$1" in
 - backup)
 - confirm "Confirm backup [y/N]" && restic -r "$RESTIC_REPO" \
 - --verbose backup "$RESTIC_BACKUP_PATH" \
 - --exclude-file="$RESTIC_BACKUP_EXCLUDES"
 - ;;
 - *)
 - restic -r "$RESTIC_REPO" $*
 - ;;
 - esac
 - fi
 
При необходимости, можно создать разные скрипты для разных источников. Например, бэкап папки /annimon.com/www на сервер gm в /var/backups/annimon.com
- #/usr/bin/env bash
 - # File: backup-annimon
 - export RESTIC_REPO=sftp:gm:/var/backups/annimon.com
 - export RESTIC_BACKUP_PATH=/annimon.com/www
 - export RESTIC_BACKUP_EXCLUDES=backup-annimonc.excludes
 - source ./backup.sh "$@"
 
- # File: backup-annimonc.excludes
 - .git
 - .sass-cache
 - vendor
 
А здесь бэкап папки /annimon.com/projects на сервер gm в /var/backups/projects.annimon.com
- #/usr/bin/env bash
 - # File: backup-projects
 - export RESTIC_REPO=sftp:gm:/var/backups/projects.annimon.com
 - export RESTIC_BACKUP_PATH=/annimon.com/projects
 - export RESTIC_BACKUP_EXCLUDES=backup-projects.excludes
 - source ./backup.sh "$@"
 
- # File: backup-projects.excludes
 - .git
 - vendor
 - cache
 
Использование:
./backup-annimon
Без аргументов — проводится тестовый замер: возможен ли бэкап в данный источник, сколько файлов забэкапит и сколько будут переданы на другой сервер (в сжатом виде)
./backup-annimon backup
Непосредственно бэкап. В процессе будет ещё раз запрошено подтверждение бэкапа.
Если же нужно выполнить какую-то команду restic на указанном репозитории бэкапа, то это можно сделать, передав параметры в скрипт:
./backup-annimon cache --cleanup
    
./backup-annimon
Без аргументов — проводится тестовый замер: возможен ли бэкап в данный источник, сколько файлов забэкапит и сколько будут переданы на другой сервер (в сжатом виде)
Открыть спойлер
./backup-annimon backup
Непосредственно бэкап. В процессе будет ещё раз запрошено подтверждение бэкапа.
Открыть спойлер
Если же нужно выполнить какую-то команду restic на указанном репозитории бэкапа, то это можно сделать, передав параметры в скрипт:
./backup-annimon cache --cleanup
Открыть спойлер