Docker bareos client

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

Docker

Создаем свой контейнер

FROM  barcus/bareos-client:19

# либо mysql-client-5.7 для 5.7 версии
RUN apt-get update && apt-get install -y php iputils-ping mysql-client
# что будем бекапить (потом через volumes можно подключить)
RUN mkdir /mnt/backup/
RUN chmod 755 /mnt/backup/

# дополнительные оперции перед бекапом
COPY backup-before.sh /usr/local/bin
COPY backup-after.sh /usr/local/bin
RUN chmod 755 /usr/local/bin/backup-before.sh
RUN chmod 755 /usr/local/bin/backup-after.sh

VOLUME ["/mnt/backup/", "/tmp/bareos-restores/"]

EXPOSE 9102

Dockerfile

Контейнер имеет утилиты для работы с сетью, php для дополнительных скриптов, mysql клиент и два скрипта

#!/bin/bash

mkdir /mnt/backup/db

#dump only tables/triggers/views
mysqldump \
    --no-data \
        ${MYSQL_DB} \
        -h${MYSQL_HOST} \
        -u${MYSQL_USER} \
        -p${MYSQL_PASSWORD} \
        > /mnt/backup/db/scheme.sql

#dump data
mysqldump \
    --no-autocommit \
        --no-create-db \
        --no-create-info \
        --complete-insert \
        --skip-extended-insert \
        ${MYSQL_DB} \
        -h${MYSQL_HOST} \
        -u${MYSQL_USER} \
        -p${MYSQL_PASSWORD} \
        > /mnt/backup/db/data.sql
backup-before.sh

Просто создаем 2 файла бекапа (ключи нужно настраивать под себя)

#!/bin/bash

echo ok
backup-after.sh

Свои скрипты можно будет примонтировать в /usr/local/bin/

Собираем контейнер (build.sh)

#!/bin/sh

# go build glossup.i-partner.ru/api
docker image rm bnet/bareos-backup:19-mysql8
docker build -t bnet/bareos-backup:19-mysql8 .
build.sh

$ sh ./build.sh

docker-compose

version: '3.6'
services:
#...
  bareos-fd:
    container_name: ${PREFIX}-bareos-fd
    image: bnet/bareos-backup:19-mysql8
    ports:
      - ${BAREOS_PORT1}:9102
    volumes:
      - ${BAKUP_PATH}:/mnt/backup:${ACCESS_FLAG}
      - ./restore:/tmp/bareos-restores/
      #- ./etc/bareos-fd/:/etc/bareos
    extra_hosts:
      - "bareos-sd:${SD_HOST}"
    environment:
      BAREOS_FD_PASSWORD: ${BAREOS_FD_PASSWORD}
      MYSQL_HOST: mysql
      MYSQL_DB: ${MYSQL_DB_NAME}
      MYSQL_USER: ${MYSQL_DB_USER}
      MYSQL_PASSWORD: ${MYSQL_DB_PASS}
docker-compose.yml

PREFIX нужен для понимания к какому проекту принадлежит контейнер
В extra_hosts bareos_sd это имя(адрес) хоста, где запущен Bareos-sd контейнер. Запись нужна для правильной настройки доступа.
restore - куда восстанавливать файлы, если потребуется

PREFIX=my-project
# password for connect from bareos director
BAREOS_FD_PASSWORD=****
# external port for connect from bareos director
BAREOS_PORT1=9102
# host of bareos storage, need for backup upload
SD_HOST=ip-address_or_host
#ro - only backup without root restore
ACCESS_FLAG=rw
# path to backup
BAKUP_PATH=/path_to_project/on/host
MYSQL_DB_NAME=database_name
MYSQL_DB_USER=user
MYSQL_DB_PASS=*****
.env

$ docker-compose up -d

Bareos

Получаем одинаковый конфиг под любой проект

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

Client {
  Name = name-dev
  Address = host_or_ip
  PORT = PORT_FROM_BAREOS_PORT1_VAR
  Password = ***
}
/etc/bareos-dir.d/client/name-dev.conf

Создаем задачу с выполнением необходимых скриптов

Job {
  Name = "name-dev"
  Description = "бекап файлов и mysql"
  FileSet="docker-mnt-backup"
  JobDefs = "DefaultJob"
  Client = "name-dev"
  Client Run Before Job = "backup-before.sh"
  Client Run After Job = "backup-after.sh"
}
/etc/bareos-dir.d/job/name-dev.conf

Универсальный FileSet для всех подобных клиентов (/mnt/backup)

FileSet {
  Name = "docker-mnt-backup"
  Description = "Выполняет скрипт, который возвращает файлы, необходимые для бекапа"
  Include {
    Options {
      signature = MD5
      compression = LZO   #fast
      #wildfile = "*.o"
      #wildfile = "*.exe"
      #Exclude = yes
    }
    File = /mnt/backup
    #File = "|/usr/bin/php /mnt/backup/backup.php" #execute for search files and dirs
    Exclude Dir Containing = .nobackup  #exclude dir with this file
  }
}

/etc/bareos-dir.d/fileset/docker-mnt-backup.conf
Показать комментарии