---
title: "Резервное копирование с Bareos"
description: "Резервное копирование с Bareos: установка на сервер, настройка параметров, подключение хранилища S3. Документация и инструкции по настройке облачных сервисов Timeweb Cloud."
---

# Установка Bareos

> Полный индекс документации для ИИ-агентов: [llms.txt](https://timeweb.cloud/llms.txt).

Bareos — это система резервного копирования с открытым исходным кодом, позволяющая создавать, управлять и восстанавливать бэкапы для серверов. В этой статье рассмотрим процесс установки и настройки Bareos для автоматизированного резервного копирования данных как на выделенном, так и на облачном сервере, используя S3-хранилище для размещения бэкапов.

Для начала работы [зарегистрируйте аккаунт](https://timeweb.cloud/docs?auth=registrationAccount) в Timeweb Cloud, если у вас его еще нет. Вы получите доступ [в панель управления](https://timeweb.cloud/my/), где сможете создать необходимые ресурсы: сервер и бакет S3.

## Создание ресурсов

Для начала [создадим облачный сервер](https://timeweb.cloud/docs/cloud-servers/manage-servers/create-server), на котором будет работать Bareos.

Так как на сервере будут работать несколько ресурсоемких служб, включая базу данных и Bareos Storage Director, оптимальная конфигурация будет следующей:

-   **vCPU**: 2
-   **RAM**: 4 ГБ
-   **Диск**: 50 ГБ SSD
-   **ОС**: Ubuntu 22.04 Jammy

Однако вы можете выбрать другую конфигурацию в зависимости от ваших потребностей, объема данных и частоты резервного копирования.

Если вы настраиваете резервное копирование для выделенного сервера, ему потребуется внешний IP-адрес, так как передача данных будет выполняться через интернет.

Если же Bareos будет использоваться для создания бэкапов облачных серверов, можно добавить сервер в существующую локальную сеть и во всей инструкции использовать его локальный IP-адрес.

Далее [создадим S3-бакет](https://timeweb.cloud/docs/s3-storage/manage-storage/create-bucket). Для наших целей идеально подойдет холодный класс хранилища. Учтите, что даже если используется инкрементное резервное копирование, в хранилище должен помещаться как минимум один полный бэкап всего сервера, а также ежедневные изменения, умноженные на количество дней размещения данных.

## Настройка сервера

Bareos использует PostgreSQL для размещения конфигурации и информации о бэкапах. Чтобы упростить установку, мы воспользуемся Docker Compose. В результате установим саму СУБД и Adminer — веб-интерфейс для работы с базой.

### Создание СУБД

Сначала установим Docker и Docker Compose:

```shell
apt install -y docker.io docker-compose
```

Создадим манифест `docker-compose.yml`:

```yml
version: '3.8'

networks:
  bareos_network:
    driver: bridge

services:
  postgres:
    image: public.ecr.aws/docker/library/postgres:14-alpine
    container_name: postgres_db
    restart: unless-stopped
    environment:
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: <ваш_пароль_администратора_бд>
    networks:
      - bareos_network
    ports:
      - "127.0.0.1:5432:5432"
    volumes:
      - ~/bareos_database:/var/lib/postgresql/data

  adminer:
    image: public.ecr.aws/docker/library/adminer:4
    container_name: adminer_ui
    restart: unless-stopped
    environment:
      ADMINER_DEFAULT_SERVER: postgres_db
      ADMINER_DEFAULT_DB: bareos
      ADMINER_DEFAULT_USER: bareos
      ADMINER_DEFAULT_DBTYPE: postgres
    networks:
      - bareos_network
    ports:
      - "8080:8080"
    depends_on:
      - postgres

volumes:
  postgres_data:
    driver: local
```

Укажите вместо `<ваш_пароль_администратора_бд>` пароль администратора базы данных.

Выполните команду для запуска контейнеров:

```shell
docker-compose up -d
```

После загрузки образов и запуска контейнеров убедитесь, что они работают:

```shell
docker ps
```

Вы должны увидеть примерно такой вывод:

```shell
CONTAINER ID   IMAGE                                              COMMAND                  CREATED          STATUS          PORTS                                       NAMES
a6fe992e70b4   public.ecr.aws/docker/library/adminer:4            "entrypoint.sh php -…"   1 minutes ago   Up 1 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   adminer_ui
fe683271e380   public.ecr.aws/docker/library/postgres:14-alpine   "docker-entrypoint.s…"   1 minutes ago   Up 1 minutes   127.0.0.1:5432->5432/tcp                    postgres_db
```

### Установка Bareos

Добавим репозитории Bareos с помощью официального скрипта:

```shell
wget -qO- https://download.bareos.org/current/xUbuntu_22.04/add_bareos_repositories.sh | sh
```

Обновим список пакетов и установим необходимые компоненты:

```shell
apt update && apt install -y bareos bareos-webui bareos-storage-droplet
```

Во время установки появится запрос на настройку Postfix. Выберите `No configuration`.

![Screenshot 02 24 25 16:06:24](https://content.timeweb.com/assets/a0cd5fb5-61f1-4530-8a65-297996fec65d.png?width=812&height=517)

_Запрос на настройку Postfix в установщике [Bareos](https://www.bareos.com/)_

Затем будет предложено настроить подключение к базе данных. Выберите `No`.

![Screenshot 02 24 25 16:07:15](https://content.timeweb.com/assets/756af81d-e1cf-4e59-be20-72eff1060c15.png?width=1906&height=410)

_Запрос на настройку базы данных в установщике [Bareos](https://www.bareos.com/)_

### Настройка подключения к базе данных

Запустим инструмент для настройки подключения к базе данных:

```shell
dpkg-reconfigure bareos-database-common
```

В первом окне выберите `Yes`.

![Screenshot 02 24 25 16:07:53](https://content.timeweb.com/assets/ed2981c9-5c76-49d5-ad56-845cc90a1a5a.png?width=1904&height=428)

_Настройка подключения к базе данных в установщике [Bareos](https://www.bareos.com/)_

В качестве типа подключения укажите `TCP/IP`.

![Screenshot 02 24 25 16:08:10](https://content.timeweb.com/assets/51d177b5-fe42-4c57-8a38-820d14869161.png?width=1899&height=381)

_Настройка подключения к базе данных в установщике [Bareos](https://www.bareos.com/)_

Так как база данных запущена на `localhost`, выберите его.

![Screenshot 02 24 25 16:08:26](https://content.timeweb.com/assets/7ea4ae1f-0eb9-42be-bfb3-34dd7449b4a6.png?width=971&height=346)

_Настройка подключения к базе данных в установщике [Bareos](https://www.bareos.com/)_

Если вы не меняли порт в `docker-compose.yml`, укажите `5432`.

![Screenshot 02 24 25 16:08:49](https://content.timeweb.com/assets/1a36eca5-f274-4cc0-afba-5afdc59d0163.png?width=1425&height=294)

_Настройка подключения к базе данных в установщике [Bareos](https://www.bareos.com/)_

В качестве метода аутентификации администратора выберите `password`.

![Screenshot 02 24 25 16:09:04](https://content.timeweb.com/assets/d03b7f94-2ab0-411e-baf5-41add2eb3a9a.png?width=1896&height=483)

_Настройка подключения к базе данных в установщике [Bareos](https://www.bareos.com/)_

Для пользователя базы данных также выберите `password`.

![Screenshot 02 24 25 16:09:20](https://content.timeweb.com/assets/e62c979f-701e-437d-9a99-34106118f9cd.png?width=1900&height=460)

_Настройка подключения к базе данных в установщике [Bareos](https://www.bareos.com/)_

Bareos использует базу данных с именем `bareos` и пользователя `bareos`.

Создадим базу данных.

![Screenshot 02 24 25 16:09:44](https://content.timeweb.com/assets/3526dd6a-31f5-4fc3-9555-efcb50eabb23.png?width=994&height=295)

_Создание базы данных в установщике [Bareos](https://www.bareos.com/)_

Затем создадим пользователя.

![Screenshot 02 24 25 16:10:02](https://content.timeweb.com/assets/63ca5c03-5322-4441-b2cd-0b79ca937e85.png?width=1895&height=399)

_Создание пользователя базы данных в установщике [Bareos](https://www.bareos.com/)_

Установим пароль пользователя.

![Screenshot 02 24 25 16:10:24](https://content.timeweb.com/assets/2a05508f-5379-4025-9eea-c3081d9a7976.png?width=1808&height=343)

_Создание пользователя базы данных в установщике [Bareos](https://www.bareos.com/)_

Подтвердим пароль.

![Screenshot 02 24 25 16:10:40](https://content.timeweb.com/assets/76918c12-99b8-4276-8521-c27346ce1ea7.png?width=572&height=271)

_Создание пользователя базы данных в установщике [Bareos](https://www.bareos.com/)_

Теперь необходимо ввести данные администратора PostgreSQL, которые мы задавали в `docker-compose.yml`.

Имя пользователя: `admin`.

![Screenshot 02 24 25 16:11:10](https://content.timeweb.com/assets/ad48a56d-93de-40b1-828a-260217caccc4.png?width=1783&height=282)

_Настройка базы данных в установщике [Bareos](https://www.bareos.com/)_

Введите пароль администратора PostgreSQL.

![Screenshot 02 24 25 16:11:29](https://content.timeweb.com/assets/37bc9e17-5028-476e-8d1a-ddca49a68c59.png?width=1425&height=381)

_Настройка базы данных в установщике [Bareos](https://www.bareos.com/)_

> [!NOTE]
> Пароль администратора потребуется ввести несколько раз в процессе настройки.

Чтобы убедиться, что база создана и работает, откройте браузер и перейдите по адресу `http://<ip_сервера>:8080`.

Залогиньтесь, используя имя пользователя `bareos` и ранее заданный пароль.

![Screenshot 02 24 25 16:12:28](https://content.timeweb.com/assets/7b3765e1-f27c-4b30-bf79-f4fec33db758.png?width=602&height=333)

_Подключение к базе данных в интерфейсе [Adminer](https://www.adminer.org/)_

После авторизации должны отобразиться таблицы базы данных Bareos.

![Screenshot 02 24 25 16:12:46](https://content.timeweb.com/assets/0118813d-0a03-46d7-839e-948119463933.png?width=1133&height=956)

_Просмотр базы данных в интерфейсе [Adminer](https://www.adminer.org/)_

Теперь запустим службы:

```shell
systemctl enable --now bareos-director.service bareos-storage.service
```

Проверим, что службы работают, подключены к базе данных и не содержат ошибок:

```shell
bareos-dir -t -d100
```

### Настройка веб-интерфейса Bareos WebUI

Для работы веб-интерфейса Bareos необходимо включить `php8-fpm` в Apache2.

Включите модули Apache для работы с PHP-FPM:

```shell
a2enmod proxy_fcgi setenvif
```

Активируйте конфигурацию PHP 8.1 FPM:

```shell
a2enconf php8.1-fpm
```

Перезагрузите Apache, чтобы изменения вступили в силу:

```shell
systemctl reload apache2
```

В Ubuntu AppArmor может блокировать доступ `php-fpm` к файлам веб-интерфейса. Разрешим необходимые пути:

```shell
cat > /etc/apparmor.d/local/php-fpm <<<"# Site-specific additions and overrides for 'php-fpm'
# bareos-webui
/usr/share/bareos-webui/** r,
/etc/bareos-webui/directors.ini r,
/etc/bareos-webui/configuration.ini r,
/var/lib/php8/sessions/** w,
"
```

Применим новые политики безопасности:

```shell
systemctl reload apparmor.service
```

Теперь необходимо создать пользователя `bareos`. Для его создания, воспользуемся утилитой `bconsole`:

```shell
bconsole
```

Создадим учетную запись `admin` для веб-интерфейса:

```shell
configure add console name=admin password=<пароль_пользователя> profile=webui-admin tlsenable=false
```

Вместо `<пароль_пользователя>` укажите желаемый пароль.

Применим изменения:

```shell
reload
```

Выйти из `bconsole` можно сочетанием клавиш `Ctrl + D`.

Теперь можно открыть браузер и перейти по адресу `http://<ip_сервера>/bareos-webui`. Войти в систему можно, используя ранее созданные учетные данные.

![Screenshot 02 24 25 16:14:50](https://content.timeweb.com/assets/01ffd4c5-b2b8-4f1b-bb1b-81aafab9d72b.png?width=600&height=688)

_Окно логина в веб-интерфейс [Bareos](https://www.bareos.com/)_

### Подключение S3-хранилища к Bareos Storage Director

Создадим файл с параметрами подключения:

```shell
nano /etc/bareos/bareos-sd.d/device/droplet/timeweb-ru-1.profile
```

Добавим в него следующую конфигурацию:

```shell
host = s3.twcstorage.ru
use_https = false
access_key = <s3_access_key>
secret_key = <s3_secret_access_key>
pricing_dir = ""
backend = s3
aws_auth_sign_version = 2
aws_region = ru-1
```

Данные для заполнения (`<s3_access_key>` и `<s3_secret_access_key>`) можно найти в информации о бакете в панели управления.

![Selection 184](https://content.timeweb.com/assets/1264c5c0-0953-49dd-a2b1-3fc3f0afacd5.png?width=1041&height=943)

### Конфигурация бэкапного устройства

Создадим файл:

```shell
nano /etc/bareos/bareos-sd.d/device/S3_ObjectStorage.conf
```

Запишем в него информацию об устройстве. Укажите имя своего бакета в Device Options:

```shell
Device {
  Name = S3_ObjectStorage
  Media Type = S3_Object1
  Archive Device = S3 Object Storage
  Device Type = droplet
  Device Options = "profile=/etc/bareos/bareos-sd.d/device/droplet/timeweb-ru-1.profile,bucket=<имя_бакета>,chunksize=100M"
  Label Media = yes
  Random Access = yes
  Automatic Mount = yes
  Removable Media = no
  Always Open = no
  Maximum Concurrent Jobs = 1
}
```

Дадим пользователю Bareos доступ к этим файлам:

```shell
chown -R bareos:bareos /etc/bareos/bareos-sd.d/device
```

Bareos может не подключаться к хранилищу, если включен TLS. Отключим его, добавив `TlsEnable=no` и `TlsRequire=no` в следующие файлы.

Откроем файл `bareos-sd.conf`:

```shell
nano /etc/bareos/bareos-sd.d/storage/bareos-sd.conf
```

Изменим содержимое:

```shell
Storage {
  Name = bareos-sd
  Maximum Concurrent Jobs = 20
  TlsEnable = no
  TlsRequire = no
}
```

Откроем файл `bareos-dir.conf`:

```shell
nano /etc/bareos/bareos-sd.d/director/bareos-dir.conf
```

Изменим содержимое:

```shell
Director {
  Name = bareos-dir
  TlsEnable = no
  TlsRequire = no
  Password = "<sd_passwd>" # Этот пароль генерируется при установке и не требует изменений
  Description = "Director, who is permitted to contact this storage daemon."
}
```

Запомните или сохраните пароль, указанный в `Password` из `bareos-dir.conf`, он понадобится на следующем шаге.

### Подключение Bareos Storage Daemon к Bareos Director

В `bconsole` подключим `bareos-storage-daemon` к `bareos-director`, используя ранее сохраненный пароль:

```shell
bconsole
```

Выполним команду:

```shell
configure add storage name=S3_Object Address=<ip_сервера_бэкапов> Password=<sd_passwd> Device=S3_ObjectStorage MediaType=S3_Object1
```

В команде укажите `<ip_сервера_бэкапов>` и `<sd_passwd>`.

Примените конфигурацию:

```shell
reload
```

Для применения изменений перезапустим службы:

```
systemctl restart bareos-storage.service && systemctl reload bareos-director.service
```

Обратите внимание, что Bareos читает файлы конфигурации только в ASCII-кодировке. Если вы редактировали файлы способом, отличным от указанного в инструкции, может возникнуть ошибка. Чтобы это исправить, необходимо изменить кодировку файлов. Сделать это можно при помощи команды:

```shell
iconv -f utf-8 -t ascii//TRANSLIT /path/to/my/file.conf -o /path/to/my/file.conf
```

## Настройка бэкапов

### Создание пользователя для соединения

Сначала необходимо создать пользователя, через которого основной сервер будет соединяться с сервером бэкапов.

Войдем в bconsole:

```shell
bconsole
```

Выполним команду:

```shell
configure add client name=BackupUser address=<usr_ip> password=<usr_pswd> TlsEnable=no TlsRequire=no
```

В команде укажите два параметра:

-   `<usr_ip>` — внешний IP-адрес сервера, для которого будут создаваться бэкапы.
    
-   `<usr_pswd>` — пароль для подключения. Его нужно придумать.
    

Примените изменения:

```shell
reload
```

После выполнения команды в консоли появится подобный вывод:

![Selection 185](https://content.timeweb.com/assets/70af68cb-2f44-4852-8b63-c4b5bf455d5f.png?width=1118&height=354)

Это сформированный конфигурационный файл с паролем пользователя. Сохраните значение из поля `Password`, оно понадобится для подключения сервера. Если пароль будет утерян, его можно найти с помощью команды:

```shell
grep -r Password /etc/bareos/bareos-dir-export/client/
```

### Настройка пулов и вольюмов

Для размещения данных Bareos использует `pool` и `volume`:

-   **Pool** — хранилище резервных копий, ограниченное размером S3-бакета.
-   **Volume** — единица хранения данных, изначально предназначенная для сменных носителей, таких как ленты.

В нашем случае:

-   **Размер volume (`<i>`)** — должен быть равен полному объему информации сервера, который мы собираемся бэкапить.
-   **Количество volumes (`<n>`)** — определяет, сколько копий данных должно быть доступно.
-   **VolumeRetention (`<r>`)** — время размещения резервной копии в днях, после которого она будет помечена для перезаписи.

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

### Настройка пула для полных бэкапов

Откроем файл конфигурации:

```shell
nano /etc/bareos/bareos-dir.d/pool/Full.conf
```

Отредактируйте, приведя к виду:

```shell
Pool {
  Name = Full
  Pool Type = Backup
  Recycle = yes # Bareos может автоматически перераспределять объемы
  AutoPrune = yes # Удалять устаревшие объемы
  Volume Retention = <r> days # Срок размещения полных бэкапов
  Maximum Volume Bytes = <i>G # Максимальный размер volume
  Maximum Volumes = <n> # Максимальное количество volume в пуле
  Label Format = "Full-" # Метка volume, например "Full-001"
}
```

### Настройка пула для инкрементальных бэкапов

Откроем файл:

```shell
nano /etc/bareos/bareos-dir.d/pool/Incremental.conf
```

Приведем к виду:

```shell
Pool {
  Name = Incremental
  Pool Type = Backup
  Recycle = yes
  AutoPrune = yes
  Volume Retention = <r> days
  Maximum Volume Bytes = <i>G
  Maximum Volumes = <n>
  Label Format = "Incremental-"
}
```

### Создание FileSet

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

#### FileSet для резервного копирования файлов в /home

Этот файлсет используется для бэкапа пользовательских данных, размещенных в `/home`.

Создадим файл:

```shell
nano /etc/bareos/bareos-dir.d/fileset/HomeFileset.conf
```

Добавим следующий конфиг:

```shell
FileSet {
  Name = "HomeFileset"
  Include {
	Options {
  	Signature = MD5
  	Compression = LZ4 
	}
	File = "/home" 
  }
}
```

Здесь:

-   `Signature = MD5` — включает проверку целостности данных.
    
-   `Compression = LZ4` — используется быстрый алгоритм сжатия, который снижает нагрузку на CPU.
    
-   `File = "/home"` — указывает, что резервное копирование будет выполняться для `/home`.
    

#### FileSet для резервного копирования баз данных MySQL

Для бэкапа MySQL необходимо использовать специальный плагин, позволяющий корректно копировать базы без прерывания работы сервера.

Создадим файл:

```shell
nano /etc/bareos/bareos-dir.d/fileset/MysqlFileset.conf
```

Добавим конфигурацию:

```shell
FileSet {
  Name = "MysqlFileset"
  Include {
	Options {
  	Signature = MD5
  	Compression = LZ4
	}
	Plugin = "python3"
	":module_name=bareos-fd-percona-xtrabackup"
	":mycnf=/root/.my.cnf"
  }
}
```

Здесь:

-   `Plugin = "python3"` — указывает, что для создания бэкапа будет использоваться плагин на Python.
    
-   `":module_name=bareos-fd-percona-xtrabackup"` — использует Percona XtraBackup для создания бэкапа без остановки MySQL.
    
-   `":mycnf=/root/.my.cnf"` — указывает путь к файлу конфигурации MySQL, содержащему учетные данные.
    

#### FileSet для резервного копирования баз данных PostgreSQL

Для PostgreSQL также используется специальный плагин, позволяющий создавать бэкапы без прерывания работы сервера.

Создадим файл:

```shell
nano /etc/bareos/bareos-dir.d/fileset/PsqlFileset.conf
```

Добавим:

```shell
FileSet {
  Name = "PostgresUserDBSet"
  Include {
	Options {
  	Signature = MD5
  	Compression = LZ4
	}
	Plugin = "python3"
	":module_name=bareos-fd-postgresql"
	":db_host=/run/postgresql/"
	":wal_archive_dir=/var/lib/pgsql/wal_archive/"
	":db_user=<psql_user>"
	":db_password=<psql_passwd>"
  }
}
```

Замените:

-   `<psql_user>` — на имя пользователя PostgreSQL.
    
-   `<psql_passwd>` — на пароль от базы данных.
    

Параметры:

-   `":db_host=/run/postgresql/"` — указывает, что PostgreSQL работает через Unix-сокеты.
    
-   `":wal_archive_dir=/var/lib/pgsql/wal_archive/"` — включает копирование WAL-журналов.
    

### Установка прав для пользователя

Чтобы Bareos мог прочитать созданные файлы, дадим пользователю `bareos` необходимые права:

```shell
chown -R bareos:bareos /etc/bareos/bareos-dir.d/fileset
```

И обновить конфигурацию сервера `bareos` чтобы прочитать новые файлсеты:

```shell
systemctl reload bareos-director.service
```

### Создание расписания бэкапов

Bareos позволяет задать расписание резервного копирования через параметр `Schedule`.

Запустим `bconsole`:

```shell
bconsole
```

Создадим правило:

```shell
configure add schedule name=BackupSchedule Run="Level=Full 3/3 at 00:00" Run="Level=Incremental daily at 01:00"
```

Применим изменение:

```shell
reload
```

Мы задали расписание:

-   Полный бэкап (`Level=Full`) выполняется раз в 3 дня в 00:00.
    
-   Инкрементальный бэкап (`Level=Incremental`) выполняется ежедневно в 01:00.
    

### Настройка заданий резервного копирования

Bareos использует два типа конфигурационных файлов для бэкапов:

-   **JobDefs** — содержит общие настройки, которые могут использоваться в нескольких заданиях.
    
-   **Job** — конкретное задание резервного копирования с указанием клиентских данных.
    

#### Создание общих правил для заданий (JobDefs)

Открываем `bconsole`:

```shell
bconsole
```

Добавляем правило:

```shell
configure add jobdefs name=DefaultBackupJob Storage=S3_Object Type=Backup Level=Incremental Pool=Incremental FullBackupPool=Full IncrementalBackupPool=Incremental Schedule=BackupSchedule Messages=Standard Priority=10
```

Применим изменение:

```shell
reload
```

Описание параметров:

-   `Storage=S3_Object` — указывает, что бэкапы будут размещаться в S3.
    
-   `Level=Incremental` — по умолчанию бэкап выполняется как инкрементальный.
    
-   `Pool=Incremental` — используется пул для инкрементальных копий.
    
-   `FullBackupPool=Full` — полные копии отправляются в пул Full.
    
-   `Schedule=BackupSchedule` — задает расписание.
    
-   `Messages=Standard` — формат логирования.
    

#### Создание задания для резервного копирования /home

Добавляем задачу:

```shell
configure add job name=BackupJob Client=BackupUser JobDefs=DefaultBackupJob FileSet=HomeFileset
```

Применим изменение:

```shell
reload
```

Здесь:

-   `Client=BackupUser` — указывает, что бэкап выполняется для клиента `BackupUser`.
    
-   `FileSet=HomeFileset` — задает файловый набор с путями к данным.
    

#### Создание задания для восстановления данных

Чтобы можно было восстановить файлы, создадим задание RestoreJob:

```shell
configure add job name=RestoreJob Type=Restore Client=BackupUser FileSet=HomeFileset Storage=S3_Object Pool=Incremental Messages=Standard Where="/" MaximumConcurrentJobs=10
```

Применим изменение:

```shell
reload
```

Параметры:

-   `Type=Restore` — задает, что это задание восстановления.
    
-   `Storage=S3_Object` — указывает хранилище.
    
-   `Pool=Incremental` — используется пул инкрементальных бэкапов.
    
-   `Where="/"` — файлы восстанавливаются в корневую директорию.
    

### Очистка ненужных конфигурационных файлов

Bareos по умолчанию создает демонстрационные конфигурации, которые не используются в продакшен-среде. Их необходимо удалить:

```shell
rm -f /etc/bareos/bareos-dir.d/jobdefs/DefaultJob.conf \
      /etc/bareos/bareos-dir.d/job/BackupCatalog.conf \
      /etc/bareos/bareos-dir.d/job/backup-bareos-fd.conf \
      /etc/bareos/bareos-dir.d/job/RestoreFiles.conf
```

Очистим базу данных от неиспользуемых записей:

```shell
bareos-dbcheck -b -f
```

## Настройка сервера, который будем бэкапить

### Установка Bareos File Daemon

Bareos использует службу `bareos-filedaemon`, которая должна быть установлена на сервере, с которого будут создаваться резервные копии.

**Установка в Ubuntu**

Добавим репозиторий Bareos:

```shell
wget -qO- https://download.bareos.org/current/xUbuntu_22.04/add_bareos_repositories.sh | sh
```

Обновим список пакетов и установим Bareos File Daemon:

```shell
apt update && apt install bareos-filedaemon -y
```

Включим и запустим Bareos File Daemon:

```shell
systemctl enable --now bareos-filedaemon.service
```

**Установка в RHEL**

Добавим правила для файрвола, открыв необходимые порты:

```shell
firewall-cmd --permanent --add-port={80,443,9101,9102,9103}/tcp && firewall-cmd --reload
```

Добавим репозиторий Bareos:

```shell
wget https://download.bareos.org/current/EL_9/bareos.repo -O /etc/yum.repos.d/bareos_EL_9.repo
```

Обновим кеш пакетов и установим Bareos File Daemon:

```shell
yum makecache && yum install bareos-filedaemon -y
```

Включим и запустим Bareos File Daemon:

```shell
systemctl enable --now bareos-filedaemon.service
```

### Подключение к серверу бэкапов

Теперь необходимо настроить подключение к Bareos Director, используя пароль, который был получен на этапе [создания пользователя](https://timeweb.cloud/docs/unix-guides/bareos-install#sozdanie-polzovatelya-dlya-soedineniya).

Открываем конфигурационный файл:

```shell
nano /etc/bareos/bareos-fd.d/director/bareos-dir.conf
```

Указываем следующие параметры:

```shell
Director {
  Name = "bareos-dir"
  Password = "[md5]fcbb587d250fc823c9b6445891a2acd8"
  TlsEnable = no
  TlsRequire = no
}
```

> [!NOTE]
> Обязательно добавьте параметры `TlsEnable=no` и `TlsRequire=no`, иначе сервер бэкапов не сможет подключиться.

Перезапускаем службу, чтобы применить изменения:

```shell
systemctl restart bareos-filedaemon.service
```

### Включение поддержки плагинов на клиенте

Для резервного копирования баз данных необходимо включить поддержку плагинов в конфигурации клиента.

Открываем файл:

```shell
nano /etc/bareos/bareos-fd.d/client/myself.conf
```

Приводим его к следующему виду:

```shell
Client {
  Name = name
  TLS Enable = no
  TLS Require = no
  Plugin Directory = "/usr/lib64/bareos/plugins"
  Plugin Names = "python3"
}
```

Применяем изменения:

```shell
systemctl restart bareos-filedaemon.service
```

### Установка пакетов для резервного копирования баз данных

#### MySQL

Для создания резервных копий MySQL потребуется `Percona XtraBackup`, а также два плагина: `bareos-filedaemon-python3-plugin` и `bareos-filedaemon-percona-xtrabackup-python-plugin`.

**Установка в Ubuntu**

Скачаем пакет Percona XtraBackup:

```shell
wget https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.32-26/binary/debian/jammy/x86_64/percona-xtrabackup-80_8.0.32-26-1.jammy_amd64.deb
```

Установим пакет:

```shell
dpkg -i percona-xtrabackup-80_8.0.32-26-1.jammy_amd64.deb
```

Установим плагины Bareos для работы с Percona XtraBackup:

```shell
apt install bareos-filedaemon-python3-plugin bareos-filedaemon-percona-xtrabackup-python-plugin -y
```

**Установка в RHEL**

Скачаем пакет Percona XtraBackup:

```shell
wget https://downloads.percona.com/downloads/Percona-XtraBackup-LATEST/Percona-XtraBackup-8.0.32-26/binary/redhat/9/x86_64/percona-xtrabackup-80-8.0.32-26.1.el9.x86_64.rpm
```

Установим пакет:

```shell
yum localinstall percona-xtrabackup-80-8.0.32-26.1.el9.x86_64.rpm
```

Установим плагины Bareos для работы с Percona XtraBackup:

```shell
yum install bareos-filedaemon-python3-plugin bareos-filedaemon-percona-xtrabackup-python-plugin -y
```

#### PostgreSQL

Для резервного копирования PostgreSQL необходимо установить пакеты `bareos-filedaemon-python3-plugin`, `bareos-filedaemon-postgresql-python-plugin` и `pg8000` — драйвер Python для подключения к PostgreSQL.

**Установка в Ubuntu**

Установим плагины Bareos для PostgreSQL:

```shell
apt install bareos-filedaemon-python3-plugin bareos-filedaemon-postgresql-python-plugin -y
```

Установим `pip` для управления пакетами Python:

```shell
apt install python3-pip -y
```

Установим библиотеку `pg8000` для работы с PostgreSQL:

```shell
pip3 install pg8000
```

**Установка в RHEL**

Установим плагины Bareos для PostgreSQL:

```shell
yum install bareos-filedaemon-python3-plugin bareos-filedaemon-postgresql-python-plugin -y
```

Установим `pip` для управления пакетами Python:

```shell
yum install python3-pip -y
```

Установим библиотеку `pg8000` для работы с PostgreSQL:

```shell
pip3 install pg8000
```

### Настройка WAL-архивации в PostgreSQL

Для корректного резервного копирования PostgreSQL необходимо включить WAL-архивацию.

Открываем конфигурацию PostgreSQL:

```shell
nano /etc/postgresql/14/main/postgresql.conf
```

Приводим параметры к виду:

```shell
...
max_wal_size = 10GB
min_wal_size = 100MB
archive_mode = on
archive_command = 'cp %p /var/lib/pgsql/wal_archive/%f'
archive_timeout = 60
...
```

Здесь:

-   `archive_mode = on` — включает архивирование WAL.
    
-   `archive_command = 'cp %p /var/lib/pgsql/wal_archive/%f'` — копирует WAL-журналы в /var/lib/pgsql/wal_archive/.
    
-   `archive_timeout = 60` — задаёт интервал в 60 секунд для принудительного сохранения WAL.
    

Создадим директорию для размещения архивных WAL-файлов:

```shell
mkdir -p /var/lib/pgsql/wal_archive
```

Настроим права доступа:

```shell
chown postgres:postgres /var/lib/pgsql/wal_archive && chmod 700 /var/lib/pgsql/wal_archive
```

Применим изменения:

```shell
systemctl reload postgresql
```

Если к базе данных ограничен внешний доступ, необходимо настроить доступ к базе с сервера бэкапов. Для этого отредактируйте файл:

```shell
nano /etc/postgresql/14/main/pg_hba.conf
```

Добавляем строку с IP-адресом сервера бэкапов:

```shell
# IPv4 local connections:
host all all 127.0.0.1/32 md5
host all all <bareos_external_ip>/32 md5
```

Где `<bareos_external_ip>` — IP-адрес сервера бэкапов.

Перезапускаем PostgreSQL:

```shell
systemctl restart postgresql
```

На этом настройка Bareos завершена. Мы установили и настроили сервер бэкапов, подключили клиентский сервер, настроили файловые наборы, расписание и S3-хранилище. Теперь система автоматически создает резервные копии и позволяет восстанавливать данные в случае необходимости.

## Ручное создание резервной копии

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

### Создание бэкапа из консоли

1.  Открываем консоль управления Bareos:

```shell
bconsole
```

2.  Запускаем задание:

```shell
run
```

3.  Выбираем нужное задание (например, `BackupJob`) и подтверждаем запуск, введя `yes`.
4.  Дожидаемся завершения бэкапа и проверяем его статус:

```shell
status job
```

5.  Чтобы посмотреть логи последнего задания, используем:

```shell
messages
```

### **Создание бэкапа через веб-интерфейс**

1.  Открываем Bareos WebUI — `http://<ip_сервера>/bareos-webui`.
2.  В меню переходим в «Jobs» → «Run».
3.  Выбираем нужное задание, клиент и подтверждаем запуск.

![Screenshot 02 25 25 13:17:04](https://content.timeweb.com/assets/aa52359c-8650-48b3-8969-7e5df54b0005.png?width=1062&height=763)

_Раздел «Jobs» → «Run» в веб-интерфейсе [Bareos](https://www.bareos.com/)_

4.  Ожидаем завершения выполнения задания и проверяем его статус во вкладке «Jobs» → «Show».
