В одном из предыдущих постов, я описал запуск GitLab в Docker контейнере. Как известно, администраторы делятся на тех, кто делает резервные копии и тех, кто пока их не делает, я отношусь к первым.
Выходим из контейнера с помощью комбинации <Ctrl><D>
Добавляем скрипт в планировщик (внимание!!!) хост машины, не контейнера:
Задача: организовать резервное копирование GitLab.
В общем случае Gitlab резервируется командойgitlab-rake gitlab:backup:create
При этом создается архив в каталоге /var/opt/gitlab/backups/ и выдается следующее сообщениеПомимо созданного архива нам нужны еще файлы из /etc/gitlab |
Решение задачи:
Я решил разбить задачу на 3 этапа:- Создать комплексный архив в контейнере
- Перенести бекап из контейнера на хост машину
- Забекапить файл комплексного архива системой резервного копирования Bacula
Пункт 3 тривиальный и здесь не рассматривается (если у Вас есть Bacula/Bareos то вы знаете как ими пользоваться, а если нет, то воспользуйтесь для бекапа применяемым у Вас способом)
Подключаемся к контейнеру GitLab:
docker exec -it gitlab-linode bash
Генерируем SSH ключ
ssh-keygen
Копируем публичный ключ на хост машину (потребуется ввести пароль рута хост машины):
ssh-copy-id -i .ssh/id_rsa.pub hosp_ip
В папке рута создаем каталог для хранения скриптов:
mkdir /root/scripts
В этой папке создаем скрипт следующего содержания:
nano /root/scripts/git_backup.sh
#!/bin/sh
date=`date "+%Y-%m-%d"`
rm /var/backups/*
rm /var/opt/gitlab/backups/*
gitlab-rake gitlab:backup:create
cd /var/backups/
tar -cavf gitlab-$date.tar.gz /etc/gitlab /var/opt/gitlab/backups/*
scp gitlab*.tar.gz host_ip:/bacula/backups/
Делаем скрипт исполняемым:
chmod +x /root/scripts/git_backup.sh
Проверяем работу(на хост машине должна существовать целевая папка)
/root/scripts/git_backup.sh
Проверяем результат:Выходим из контейнера с помощью комбинации <Ctrl><D>
Добавляем скрипт в планировщик (внимание!!!) хост машины, не контейнера:
nano /etc/cron.daily/docker_bacupp.sh
#!/bin/sh
docker exec gitlab-linode /root/scripts/git_backup.sh > /bacula/backups/backup.log 2>&1
Делаем исполняемым:
chmod +x /etc/cron.daily/docker_backup.sh
P.S.
Я отдаю себе отчет, что мог бы из контейнера с помощью rsync помещать полученный бэкап на удаленный хост, но пошел именно по такому пути, так как на одном хосте может быть много разных контейнеров и удобнее все бекапы складывать в одно место, после чего централизованно их обрабатывать используемой на предприятии системой резервного копирования. А еще я могу выполнять этот скрипт прямо из Backula, не используя планировщик, и т.д. Одним словом я получил гибкое решение.P.P.S
Так, как GitLab можно развернуть из резервной копии только на версию резервной копии настоятельно рекомендуется сделать резервирование Docker image, с которого ставился контейнер:docker images
docker save -o gitlab_latest.tar gitlab/gitlab-ee:latest
И отметить для перманентного хранения.
Комментариев нет:
Отправить комментарий