Различия

Показаны различия между двумя версиями страницы.


Предыдущая версия
backuppc [2024/12/18 15:33] (текущий) – [FAQ. How to purge backups for a host?] darkfire
Строка 1: Строка 1:
 +====== BackupPC ======
  
 +~~Title: Установка и настройка BackupPC сервера (+Nginx) и клиентов ~~
 +{{htmlmetatags>
 +metatag-keywords=(BackupPC)
 +metatag-description=(BackupPC — свободное ПО для резервного копирования данных с управлением через веб-интерфейс. Обзор и настройка BackupPC.)
 +}}
 +
 +{{ ::backuppc-02.jpg?nolink&400 |}}
 +
 +[[https://backuppc.github.io/backuppc/|BackupPC]] - система резервного копирования, ориентированная на диски.
 +
 +**Возможности BackupPC:**
 +  * Не требует установленного клиента.
 +  * **Дедупликация данных**. Идентичные файлы в нескольких резервных копиях одного и того же или разных ПК сохраняются только один раз, что приводит к существенной экономии дискового пространства и дискового ввода-вывода.
 +  * BackupPC является SMB‐ клиентом, поддерживает [[SSH|SSH]], использует [[tar|tar]] и [[rsync|rsync]].
 +  * Поддерживаются все возможности восстановления, в том числе прямое восстановление (через smbclient, tar, или rsync/rsyncd), загрузка [[zip|zip]] или [[tar|tar]] архивов.
 +  * Интеллектуальная схема пулинга, минимизирующая  дисковые ресурсы и ввод/вывод. Идентичные файлы во множестве резервных копий на одном и том же или разных PC сохраняются только единожды, что приводит к экономии дискового пространства и уменьшению количества операций записи. Это также называется "дедупликация данных".
 +  * Опция сжатия обеспечивает дополнительное уменьшение размера резервной копии. Нагрузка на процессор при этом низка, так как сжатию подвергаются только новые файлы (которых ещё нет в пуле).
 +  * Мощный http/cgi интерфейс позволяет администраторам   просматривать логи, конфигурацию, текущий статус, а пользователям - начинать и отменять резервное копирование, просматривать и восстанавливать файлы из резервных копий.
 +  * Не нужно никаких клиентских программ. Для Windows применяется протокол SMB. А для Linux или Unix можно использовать rsync или tar (через ssh/rsh/nfs).
 +  * Гибкие опции восстановления. Как одиночные файлы, так и Zip и Tar архивы выбранных файлов и каталогов могут быть восстановлены непосредственно в CGI интерфейсе.
 +  * BackupPC поддерживает мобильные устройства, где имеется непостоянное подключение к сети и динамическая адресация (DHCP).
 +  * Гибкие параметры конфигурации позволяют параллельное выполнение нескольких задач резервного копирования.
 +
 +Рекомендую для резервирования связку [[automysqlbackup|AutoMySQLBackup]] и BackupPC.
 +
 +====== Хостинг для развёртывания BackupPC ======
 +Программа  BackupPC не требовательная к ресурсами, значит в первую очередь нужны большие диски и устойчивый интернет. Для себя выбрал нескольких хостинг провайдеров (список регулярное обновляется ибо все в жизни меняется), на 2023:
 +  * [[https://dieg.info/review/obzor-friendhosting/|Friendhosting]] с очень дешевой ценой, себе взял [[https://to.dieg.info/friendhosting|Storage HDD]] на 500 Gb (CPU: Xeon 2 core  RAM: 2 Gb  IPv4: 1 pcs. IPv6: 1 pcs.) в [[https://dieg.info/tsod/bolgariya/|Болгарии]], можно взять такой же в [[https://dieg.info/tsod/netherlands/|Нидерландах]], но по чуть более дорогой цене.
 +
 +===== Установка BackupPC на сервер =====
 +Руководство обновлено для Ubuntu 22 BackupPC 4.4
 +
 +<code bash>
 +apt install backuppc
 +</code>
 +Автоматически будет создан пароль для пользователя 'backuppc'. Чтобы изменить пароль, запустите команду <file bash>
 +htpasswd /etc/backuppc/htpasswd backuppc
 +</file>. Изменим расположение директории для бекапов (по умолчанию /var/lib/backuppc). config.pl - основной конфигурационный файл:
 +<code perl>
 +# 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
 +</code>
 +Дальнейшие настройки для Apache производятся через Web интерфейс по адресу http://backuppc_server_ip/backuppc, а для Nginx http://your_domain/
 +
 +==== Настройка BackupPC на Apache ====
 +Здесь все просто - в комплекте находится готовый конфигурационный файл под вебсервер Apache, который устанавливается при установке BackupPC (/etc/backuppc/apache.conf).  
 +<file bash>
 +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>
 +</file>
 +==== Настройка BackupPC на Nginx ====
 +Если не установлен пакет Perl, установите
 +<file bash>
 +apt install perl
 +</file>
 +Установим поддержку CGI (scgi) в [[Nginx|Nginx]] 
 +<file bash>
 +apt install fcgiwrap
 +systemctl enable fcgiwrap
 +systemctl start fcgiwrap
 +</file>
 +Создаем файл конфигурации backuppc для Nginx
 +<file bash>
 +/etc/nginx/sites-available/backuppc.conf
 +</file>
 +<file bash>
 +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;
 +        }
 +    }
 +}
 +</file>
 +Подключаем его и перегружаем Nginx:
 +<file bash>
 +ln -s /etc/nginx/sites-available/backuppc.conf /etc/nginx/sites-enabled
 +nginx -s reload
 +</file>
 +==== Бэкап локальных директорий сервера BackupPC ====
 +Возможные ошибки бекапа локальных директорий на сервере BackupPC:
 +  * Backup failed on localhost (Tar exited with error 512 () status)
 +  * Got fatal error during xfer (sudo: no tty present and no askpass program specified)
 +
 +Бэкап локальных директорий по умолчанию не работает, не хватает прав для копирования некоторых файлов. Через веб-интерфейс изменяем параметр TarClientCmd или в файле /etc/backuppc/localhost.pl меняем строку <file bash>
 +$Conf{TarClientCmd} = '/usr/bin/env LC_ALL=C $tarPath -c -v -f - -C $shareName --totals'
 +</file> Заменяем на <file bash>
 +$Conf{TarClientCmd} = '/usr/bin/sudo /usr/bin/env LC_ALL=C $tarPath -c -v -f - -C $shareName --totals'
 +</file> Настраиваем [[sudo|sudo]]: <code bash>
 +# visudo
 +backuppc ALL=NOPASSWD: /bin/tar, /usr/bin/rsync, /usr/bin/env
 +</code> пришлось разрешить /usr/bin/env иначе возникает ошибка Got fatal error during xfer (sudo: no tty present and no askpass program specified)
 +
 +==== Настройка расписания (Schedule) резервного копирования ====
 +Расписание резервного копирования (Backup Schedule) по умолчанию:
 +  * Полная резервная копия каждые 7 дней, хранить только самую новую копию.
 +  * Инкрементное резервное копирование каждый день, храните шесть самых последних резервных копий.
 +
 +Если вы хотите изменить интервал, нажмите на вкладку «Schedule» на верхней панели. Не забудьте нажать «Save», если вы вносите какие-либо изменения.
 +
 +Полные резервные копии имеют значение "6,97" в «FullPeriod», а инкрементные резервные копии имеют значение "0,97" в поле «IncrPeriod». Это значения, соответствующие 7 и 1 дню соответственно, поскольку они также учитывают время для завершения резервного копирования.
 +
 +Вы можете изменить количество резервных копий, которые поддерживает система. Вы также можете указать время, когда резервное копирование не должно выполняться, настроив «blackouts», когда резервное копирование не может начаться.
 +
 +В этом руководстве мы будем придерживаться значений по умолчанию.
 +  * Параметр FullKeepCnt задает количество полных бэкапов (по умолчанию 1)
 +  * Параметр FullAgeMax какое количество дней хранить бэкапы
 +
 +  * Полная резервная копия:
 +<file bash>
 +FullPeriod — минимальное время в днях между полными бекапами
 +FullKeepCnt — сколько полных бекапов необходимо хранить
 +FullKeepCntMin — минимальное количество хранимых полных бекапов
 +FullAgeMax — максимальный возраст хранимого полного бекапа
 +</file>
 +   
 +
 +  * Инкрементальная резервная копия:
 +<file bash>
 +IncrPeriod — минимальное время в днях между инкрементальными бекапами
 +IncrKeepCnt — сколько инкрементальных бекапов необходимо хранить
 +IncrKeepCntMin — минимальное количество хранимых инкрементальных бекапов
 +IncrAgeMax — максимальный возраст хранимого инкрементального бекапа
 +IncrLevels — уровень инкрементального бекапа
 +IncrFill — использовать в системе хард-линки, что бы инкрементальный бекап выглядел полным.
 +</file>
 +===== Резервное копирование BackupPC по SSH =====
 +Для использования протокола [[SSH|SSH]] для резервного копирования данных с клиентского компьютера, следует создать ключи доступа.
 +
 +==== Сервер ====
 +
 +  * Создаем ключи на сервере с установленным BackupPC
 +<file bash>
 +# su - backuppc
 +$ mkdir .ssh
 +$ cd .ssh
 +$ ssh-keygen -t rsa -C remuserbak@backuppc
 +</file>на все вопросы просто жмем клавишу Enter<file bash>
 +$ 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
 +</file>
 +С приватным ключом id_rsa программа BackupPC будет подключаться к клиентским компьютерам. На клиентские компьютер должен быть перенесён публичный ключ, сделаем это при помощи утилиты [[SSH|SSH]]-copy-id, она автоматически создаст файл authorized_keys с нашим ключем в директории .ssh. Например:<file bash>
 +ssh-copy-id -i id_rsa.pub remuserbak@<IP клиента>
 +</file>
 +
 +==== Клиент Ubuntu, FreeBSD ====
 +Алгоритм настройки довольно прост и поддается автоматизации, например при помощи [[Ansible|Ansible]]:
 +  - Создать пользователя remuserbak.
 +  - Предоставить необходимые права в системе для созданного пользователя.
 +  - Добавить ему открытый ключ (созданный на сервере).
 +  - Разрешить вход по ключу на сервере SSH.
 +Создаем пользователя от имени которого будет производиться копирование данных и задаем ему сложный пароль. Пароль нам понадобится один раз для копирования ssh ключа.
 +<file bash>
 +adduser remuserbak
 +usermod -aG sudo remuserbak
 +</file>
 +Даем права на запуск sudo без пароля пользователю remuserbak. В самый конец файла добавляем строчку
 +<file bash>
 +> visudo
 +remuserbak ALL=NOPASSWD: /bin/tar, /usr/bin/rsync, /usr/bin/env
 +</file>
 +Переносим публичный ключ, сделаем это при помощи утилиты SSH-copy-id. Для этого на сервере, где установлен сервер BackupPC, от имени пользователя, от которого запускается демон backuppc, запускаем утилиту ssh-copy-id<file bash>
 +su - backuppc
 +ssh-copy-id -i .ssh/id_rsa.pub remuserbak@xxx.xxx.xxx.xxx
 +</file>
 +Для того чтобы проверить, что все работает и добавления информацию о хосте в файл "known_hosts", подключитесь к клиентскому компьютеру используя команду<file>
 +ssh 'remuserbak@xxx.xxx.xxx.xxx'
 +</file>Если хостов много, для автоматизации добавления информации в файл "known_hosts", можно сделать так:
 +<file bash>
 +nano /var/lib/backuppc/.ssh/config
 +Host *
 +    StrictHostKeyChecking no
 +</file>
 +Или добавить в настройки подключения BackupPC следующие опции:
 +<file bash>
 +-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null
 +</file>
 +
 +Дальнейшая настройка происходит через веб-интерфейс:
 +  - Страница Edit Hosts добавляем адрес клиента и имя пользователя, от которого будет совершаться копирование данных, в нашем примере это пользователь remuserbak. {{ ::backuppc_set_up_hosts.jpg?nolink |}} Маленький лайфхак: по умолчанию вы можете добавить или IP или полное доменное имя резервируемого сервера, но можно сделать красиво. На скриншоте, я добавил сервер для резервирования с именем nice-domain-name и если теперь прописать для него ip в файле /etc/hosts - все будет работать. Иногда это очень удобно.
 +  - В настройках клиента, на странице Xfer Settings указываем XferMethod = [[rsync|rsync]], в параметре RsyncShareName задаем директории для копирования
 +  - Меняем пользователя root на remuserbak в поле RsyncSshArgs. И добавляем в RsyncClientPath запуск программы rsync под sudo. Эти изменения можно задать как глобально для всего сервера BackupPC, так и индивидуально для каждого клиента.
 +{{ ::backuppc_rsyncsshargs.jpeg?nolink&600 |}}
 +
 +**Всё!**
 +
 +Для более старых версии BackupPC пункт 3 меняется по другому. Нужно заменить пользователя root на remuserbak в строках RsyncClientCmd и RsyncClientRestoreCmd: <file bash>
 +$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+';
 +</file>
 +
 +
 +===== Резервное копирование BackupPC по FTP =====
 +Зачастую хостеры представляющие услуга виртуального хостинга блокирует подключение по SSH. Но резервировать надо и нам остаётся использовать только протокол FTP.
 +
 +В версии BackupPC 4 и выше появилась встроенная возможность использовать клиента FTP для резервирования.
 +
 +Но я предпочитаю монтировать удаленный FTP сервер при помощи [[montirovanie_udaljonnoj_papki|curlftpfs]] и далее rsynx делать бэкап локально. Из опыта так надежнее и проще.
 +
 +  - Устанавливаем под вашу ОС, как описано в статье [[montirovanie_udaljonnoj_papki]]
 +===== FAQ. How to purge backups for a host? =====
 +Если нужно удалить полностью резервные файлы для хоста. Вам может понадобиться очистка пула (директория cpool). Его размер вы можете посмотреть в логе системы после перезапуска BackupPC. Перед запуском очистки пула обязательно остановите демона backuppc. Очистить пулл BackupPC:
 +<file bash>
 +systemctl stop backuppc
 +sudo -u backuppc /usr/share/backuppc/bin/BackupPC_nightly -p 0 255
 +</file>
 +Или под пользователем от которого запущен демон BackupPC
 +<file bash>
 +su - backuppc
 +$ /usr/share/backuppc/bin/BackupPC_nightly 0 255
 +BackupPC_stats 0 = pool,0,0,0,0,0,0,0,0,0,0,
 +...
 +</file>
 +
 +===== 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. 
 +<file bash>
 +$Conf{PingPath} = '/bin/ping';
 +# inserted '/bin/ping6' for default '':
 +$Conf{Ping6Path} = '/bin/ping6';
 +</file>Не забываем перезапустить сервис<file bash>
 +systemctl restart backuppc
 +</file>
 +
 +===== Заключение =====
 +BackupPC — это мощный и удобный способ автоматического резервного копирования файлов с нескольких серверов в центральное хранилище. Резервные копии необходимы для любой производственной среды. Не менее важно убедиться, что операции восстановления файлов работают правильно.
 +
 +Существует множество инструментов резервного копирования для Linux и Unix-подобных операционных систем. Выберите решение, которое наилучшим образом соответствует вашим потребностям. BackupPC — отличный инструмент, который должен хорошо работать во многих ОС.
 +<panel type="primary" title="Читайте также">
 +  * [[cheklist_nastrojka_vps_vds_vydelennogo_servera_linux]]
 +  * [[po_dlja_rezervnogo_kopirovanija]]
 +  * [[rclone]]
 +</panel>

📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.

📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.

💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!