Содержание

BackupPC

BackupPC - система резервного копирования, ориентированная на диски.

Возможности BackupPC:

Рекомендую для резервирования связку AutoMySQLBackup и BackupPC.

Хостинг для развёртывания BackupPC

Программа BackupPC не требовательная к ресурсами, значит в первую очередь нужны большие диски и устойчивый интернет. Для себя выбрал нескольких хостинг провайдеров (список регулярное обновляется ибо все в жизни меняется), на 2023:

Установка BackupPC на сервер

Руководство обновлено для Ubuntu 22 BackupPC 4.4

apt install backuppc

Автоматически будет создан пароль для пользователя 'backuppc'. Чтобы изменить пароль, запустите команду

htpasswd /etc/backuppc/htpasswd backuppc

. Изменим расположение директории для бекапов (по умолчанию /var/lib/backuppc). config.pl - основной конфигурационный файл:

# nano /etc/backuppc/config.pl
 
$Conf{TopDir} = '/home/keephdd/backuppc';
$Conf{PingMaxMsec} = 200;
$Conf{PingPath} = '/bin/ping';
$Conf{Ping6Path} = '/bin/ping6';
 
# mkdir -p /home/keephdd/backuppc/pc
# mkdir -p /home/keephdd/backuppc/cpool
# chown -R backuppc:backuppc /home/keephdd/backuppc
# systemctl restart backuppc

Дальнейшие настройки для Apache производятся через Web интерфейс по адресу http://backuppc_server_ip/backuppc, а для Nginx http://your_domain/

Настройка BackupPC на Apache

Здесь все просто - в комплекте находится готовый конфигурационный файл под вебсервер Apache, который устанавливается при установке BackupPC (/etc/backuppc/apache.conf).

Alias /backuppc /usr/share/backuppc/cgi-bin/
 
<Directory /usr/share/backuppc/cgi-bin/>
        AllowOverride None
 
        # Uncomment the line below to ensure that nobody can sniff important
        # info from network traffic during editing of the BackupPC config or
        # when browsing/restoring backups.
        # Requires that you have your webserver set up for SSL (https) access.
        #SSLRequireSSL
 
        Options ExecCGI FollowSymlinks
        AddHandler cgi-script .cgi
        DirectoryIndex index.cgi
 
        AuthUserFile /etc/backuppc/htpasswd
        AuthType basic
        AuthName "BackupPC admin"
 
        <RequireAll>
                # Comment out this line once you have setup HTTPS and uncommented SSLRequireSSL
                Require local
 
                # This line ensures that only authenticated users may access your backups
                Require valid-user
        </RequireAll>
</Directory>

Настройка BackupPC на Nginx

Если не установлен пакет Perl, установите

apt install perl

Установим поддержку CGI (scgi) в Nginx

apt install fcgiwrap
systemctl enable fcgiwrap
systemctl start fcgiwrap

Создаем файл конфигурации backuppc для Nginx

/etc/nginx/sites-available/backuppc.conf
server {
    listen <your_server_port>;
    server_name <your_server_name>;
    root  /usr/share/backuppc;
    index cgi-bin/index.cgi;
 
    access_log  /var/log/nginx/backuppc.access.log;
    error_log   /var/log/nginx/backuppc.error.log;
 
    location / {
        location /backuppc {
            alias /usr/share/backuppc;
        }
 
        auth_basic "Backup";
        auth_basic_user_file /etc/backuppc/htpasswd;
 
        location ~ \.cgi$ {
            include fastcgi_params;
            fastcgi_pass unix:/run/fcgiwrap.socket;
 
            fastcgi_param REMOTE_ADDR     $remote_addr;
            fastcgi_param REMOTE_USER     $remote_user;
            fastcgi_param SCRIPT_FILENAME /usr/share/backuppc/cgi-bin/index.cgi;
        }
    }
}

Подключаем его и перегружаем Nginx:

ln -s /etc/nginx/sites-available/backuppc.conf /etc/nginx/sites-enabled
nginx -s reload

Бэкап локальных директорий сервера BackupPC

Возможные ошибки бекапа локальных директорий на сервере BackupPC:

Бэкап локальных директорий по умолчанию не работает, не хватает прав для копирования некоторых файлов. Через веб-интерфейс изменяем параметр TarClientCmd или в файле /etc/backuppc/localhost.pl меняем строку

$Conf{TarClientCmd} = '/usr/bin/env LC_ALL=C $tarPath -c -v -f - -C $shareName --totals'

Заменяем на

$Conf{TarClientCmd} = '/usr/bin/sudo /usr/bin/env LC_ALL=C $tarPath -c -v -f - -C $shareName --totals'

Настраиваем sudo:

# visudo
backuppc ALL=NOPASSWD: /bin/tar, /usr/bin/rsync, /usr/bin/env

пришлось разрешить /usr/bin/env иначе возникает ошибка Got fatal error during xfer (sudo: no tty present and no askpass program specified)

Настройка расписания (Schedule) резервного копирования

Расписание резервного копирования (Backup Schedule) по умолчанию:

Если вы хотите изменить интервал, нажмите на вкладку «Schedule» на верхней панели. Не забудьте нажать «Save», если вы вносите какие-либо изменения.

Полные резервные копии имеют значение "6,97" в «FullPeriod», а инкрементные резервные копии имеют значение "0,97" в поле «IncrPeriod». Это значения, соответствующие 7 и 1 дню соответственно, поскольку они также учитывают время для завершения резервного копирования.

Вы можете изменить количество резервных копий, которые поддерживает система. Вы также можете указать время, когда резервное копирование не должно выполняться, настроив «blackouts», когда резервное копирование не может начаться.

В этом руководстве мы будем придерживаться значений по умолчанию.

FullPeriod — минимальное время в днях между полными бекапами
FullKeepCnt — сколько полных бекапов необходимо хранить
FullKeepCntMin — минимальное количество хранимых полных бекапов
FullAgeMax — максимальный возраст хранимого полного бекапа
IncrPeriod — минимальное время в днях между инкрементальными бекапами
IncrKeepCnt — сколько инкрементальных бекапов необходимо хранить
IncrKeepCntMin — минимальное количество хранимых инкрементальных бекапов
IncrAgeMax — максимальный возраст хранимого инкрементального бекапа
IncrLevels — уровень инкрементального бекапа
IncrFill — использовать в системе хард-линки, что бы инкрементальный бекап выглядел полным.

Резервное копирование BackupPC по SSH

Для использования протокола SSH для резервного копирования данных с клиентского компьютера, следует создать ключи доступа.

Сервер

# su - backuppc
$ mkdir .ssh
$ cd .ssh
$ ssh-keygen -t rsa -C remuserbak@backuppc

на все вопросы просто жмем клавишу Enter

$ chmod 600 id_rsa
$ ls -l 
-rw------- 1 backuppc backuppc 1675 Фев 12 14:59 id_rsa
-rw-r--r-- 1 backuppc backuppc  401 Фев 12 14:59 id_rsa.pub

С приватным ключом id_rsa программа BackupPC будет подключаться к клиентским компьютерам. На клиентские компьютер должен быть перенесён публичный ключ, сделаем это при помощи утилиты SSH-copy-id, она автоматически создаст файл authorized_keys с нашим ключем в директории .ssh. Например:

ssh-copy-id -i id_rsa.pub remuserbak@<IP клиента>

Клиент Ubuntu, FreeBSD

Алгоритм настройки довольно прост и поддается автоматизации, например при помощи Ansible:

  1. Создать пользователя remuserbak.
  2. Предоставить необходимые права в системе для созданного пользователя.
  3. Добавить ему открытый ключ (созданный на сервере).
  4. Разрешить вход по ключу на сервере SSH.

Создаем пользователя от имени которого будет производиться копирование данных и задаем ему сложный пароль. Пароль нам понадобится один раз для копирования ssh ключа.

adduser remuserbak
usermod -aG sudo remuserbak

Даем права на запуск sudo без пароля пользователю remuserbak. В самый конец файла добавляем строчку

> visudo
remuserbak ALL=NOPASSWD: /bin/tar, /usr/bin/rsync, /usr/bin/env

Переносим публичный ключ, сделаем это при помощи утилиты SSH-copy-id. Для этого на сервере, где установлен сервер BackupPC, от имени пользователя, от которого запускается демон backuppc, запускаем утилиту ssh-copy-id

su - backuppc
ssh-copy-id -i .ssh/id_rsa.pub remuserbak@xxx.xxx.xxx.xxx

Для того чтобы проверить, что все работает и добавления информацию о хосте в файл "known_hosts", подключитесь к клиентскому компьютеру используя команду

ssh 'remuserbak@xxx.xxx.xxx.xxx'

Если хостов много, для автоматизации добавления информации в файл "known_hosts", можно сделать так:

nano /var/lib/backuppc/.ssh/config
Host *
    StrictHostKeyChecking no

Или добавить в настройки подключения BackupPC следующие опции:

-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null

Дальнейшая настройка происходит через веб-интерфейс:

  1. Страница Edit Hosts добавляем адрес клиента и имя пользователя, от которого будет совершаться копирование данных, в нашем примере это пользователь remuserbak. Маленький лайфхак: по умолчанию вы можете добавить или IP или полное доменное имя резервируемого сервера, но можно сделать красиво. На скриншоте, я добавил сервер для резервирования с именем nice-domain-name и если теперь прописать для него ip в файле /etc/hosts - все будет работать. Иногда это очень удобно.
  2. В настройках клиента, на странице Xfer Settings указываем XferMethod = rsync, в параметре RsyncShareName задаем директории для копирования
  3. Меняем пользователя root на remuserbak в поле RsyncSshArgs. И добавляем в RsyncClientPath запуск программы rsync под sudo. Эти изменения можно задать как глобально для всего сервера BackupPC, так и индивидуально для каждого клиента.

Всё!

Для более старых версии BackupPC пункт 3 меняется по другому. Нужно заменить пользователя root на remuserbak в строках RsyncClientCmd и RsyncClientRestoreCmd:

$Conf{RsyncClientCmd} = '$sshPath -q -x -l remuserbak $host /usr/bin/sudo $rsyncPath $argList+';
$Conf{RsyncClientRestoreCmd} = '$sshPath -q -x -l remuserbak $host /usr/bin/sudo $rsyncPath $argList+';

Резервное копирование BackupPC по FTP

Зачастую хостеры представляющие услуга виртуального хостинга блокирует подключение по SSH. Но резервировать надо и нам остаётся использовать только протокол FTP.

В версии BackupPC 4 и выше появилась встроенная возможность использовать клиента FTP для резервирования.

Но я предпочитаю монтировать удаленный FTP сервер при помощи curlftpfs и далее rsynx делать бэкап локально. Из опыта так надежнее и проще.

  1. Устанавливаем под вашу ОС, как описано в статье Монтирование удалённой папки (FTP, SSH) в Linux

FAQ. How to purge backups for a host?

Если нужно удалить полностью резервные файлы для хоста. Вам может понадобиться очистка пула (директория cpool). Его размер вы можете посмотреть в логе системы после перезапуска BackupPC. Перед запуском очистки пула обязательно остановите демона backuppc. Очистить пулл BackupPC:

systemctl stop backuppc
sudo -u backuppc /usr/share/backuppc/bin/BackupPC_nightly -p 0 255

Или под пользователем от которого запущен демон BackupPC

su - backuppc
$ /usr/share/backuppc/bin/BackupPC_nightly 0 255
BackupPC_stats 0 = pool,0,0,0,0,0,0,0,0,0,0,
...

FAQ. BackupPC: ping too slow

BackupPC: ping too slow. При возникновении этой ошибки бекап не производится. Для устранения нужно изменить параметр до 200 $Conf{PingMaxMsec} = 200;

FAQ. BackupPC: "no ping response" for localhost

После инсталляции BackupPC на Ubuntu, столкнулся тем что не архивируется localhost (то есть сервер на котором установлен непосредственно демон backuppc). В логе backuppc для localhost пишет ошибку no ping response.

Для устранения ошибки нужно прописать путь к утилите ping проверки целостности и качества локальной сети и Интернета в директиве $Conf{Ping6Path} в файле /etc/backuppc/config.pl.

$Conf{PingPath} = '/bin/ping';
# inserted '/bin/ping6' for default '':
$Conf{Ping6Path} = '/bin/ping6';

Не забываем перезапустить сервис

systemctl restart backuppc

Заключение

BackupPC — это мощный и удобный способ автоматического резервного копирования файлов с нескольких серверов в центральное хранилище. Резервные копии необходимы для любой производственной среды. Не менее важно убедиться, что операции восстановления файлов работают правильно.

Существует множество инструментов резервного копирования для Linux и Unix-подобных операционных систем. Выберите решение, которое наилучшим образом соответствует вашим потребностям. BackupPC — отличный инструмент, который должен хорошо работать во многих ОС.