BackupPC - система резервного копирования, ориентированная на диски.
Возможности BackupPC:
Рекомендую для резервирования связку AutoMySQLBackup и BackupPC.
Программа BackupPC не требовательная к ресурсами, значит в первую очередь нужны большие диски и устойчивый интернет. Для себя выбрал нескольких хостинг провайдеров (список регулярное обновляется ибо все в жизни меняется), на 2023:
Руководство обновлено для 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/
Здесь все просто - в комплекте находится готовый конфигурационный файл под вебсервер 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>
Если не установлен пакет 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:
Бэкап локальных директорий по умолчанию не работает, не хватает прав для копирования некоторых файлов. Через веб-интерфейс изменяем параметр 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)
Расписание резервного копирования (Backup Schedule) по умолчанию:
Если вы хотите изменить интервал, нажмите на вкладку «Schedule» на верхней панели. Не забудьте нажать «Save», если вы вносите какие-либо изменения.
Полные резервные копии имеют значение "6,97" в «FullPeriod», а инкрементные резервные копии имеют значение "0,97" в поле «IncrPeriod». Это значения, соответствующие 7 и 1 дню соответственно, поскольку они также учитывают время для завершения резервного копирования.
Вы можете изменить количество резервных копий, которые поддерживает система. Вы также можете указать время, когда резервное копирование не должно выполняться, настроив «blackouts», когда резервное копирование не может начаться.
В этом руководстве мы будем придерживаться значений по умолчанию.
FullPeriod — минимальное время в днях между полными бекапами FullKeepCnt — сколько полных бекапов необходимо хранить FullKeepCntMin — минимальное количество хранимых полных бекапов FullAgeMax — максимальный возраст хранимого полного бекапа
IncrPeriod — минимальное время в днях между инкрементальными бекапами IncrKeepCnt — сколько инкрементальных бекапов необходимо хранить IncrKeepCntMin — минимальное количество хранимых инкрементальных бекапов IncrAgeMax — максимальный возраст хранимого инкрементального бекапа IncrLevels — уровень инкрементального бекапа IncrFill — использовать в системе хард-линки, что бы инкрементальный бекап выглядел полным.
Для использования протокола 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 клиента>
Алгоритм настройки довольно прост и поддается автоматизации, например при помощи Ansible:
Создаем пользователя от имени которого будет производиться копирование данных и задаем ему сложный пароль. Пароль нам понадобится один раз для копирования 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
Дальнейшая настройка происходит через веб-интерфейс:
Всё!
Для более старых версии 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+';
Зачастую хостеры представляющие услуга виртуального хостинга блокирует подключение по SSH. Но резервировать надо и нам остаётся использовать только протокол FTP.
В версии BackupPC 4 и выше появилась встроенная возможность использовать клиента FTP для резервирования.
Но я предпочитаю монтировать удаленный FTP сервер при помощи curlftpfs и далее rsynx делать бэкап локально. Из опыта так надежнее и проще.
Если нужно удалить полностью резервные файлы для хоста. Вам может понадобиться очистка пула (директория 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, ...
BackupPC: ping too slow. При возникновении этой ошибки бекап не производится. Для устранения нужно изменить параметр до 200 $Conf{PingMaxMsec} = 200;
После инсталляции 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 — отличный инструмент, который должен хорошо работать во многих ОС.