Gitlab в docker-контейнерах: резервное копирование

May 4, 2017 16:22 · 375 words · 2 minute read gitlab docker backup

Мы уже умеем запускать Gitlab со всеми необходимыми компонентами в docker-контейнерах с помощью docker-compose и в полной мере оценили всю гибкость использования для этой цели контейнеров от sameersbn.

Однако ранее мы не упоминали о весьма важном процессе — создании бекапов Gitlab. Давайте разберемся резервным копированием Gitlab в docker-контейнерах!

При создании резервных копий Gitlab бекапятся все git-репозитории, загруженные файлы и база данных. SSH-ключи не бекапятся, следует помнить об этом!

По умолчанию резервные копии сохраняются в каталоге /home/git/data/backups внутри контейнера. Так как в этой статье мы монтируем каталог /srv/gitlab/data с хост-машины в каталог /home/git/data внутри контейнера, то на хост-машине резервные копии можно увидеть в папке /srv/gitlab/data/backups.

Создание резервной копии вручную выполняется в два этапа. Прежде всего, следует убедиться, что контейнер с именем gitlab остановлен и удален:

docker stop gitlab && docker rm gitlab

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

docker run --name gitlab -it --rm [OPTIONS] \
    sameersbn/gitlab:9.1.0-1 app:rake gitlab:backup:create

При использовании утилиты docker-compose, последнюю команду можно заменить на:

docker-compose run --rm gitlab app:rake gitlab:backup:create

Развертывание бекапа требует чуть больше действий, но не должно вызывать вопросов. Убеждаемся, что контейнер с именем gitlab остановлен и удален:

docker stop gitlab && docker rm gitlab

Инициализируем базу данных:

docker run --name gitlab -it --rm [OPTIONS] \
    sameersbn/gitlab:9.1.0-1 app:rake db:setup

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

docker run --name gitlab -it --rm [OPTIONS] \
    sameersbn/gitlab:9.1.0-1 app:rake gitlab:backup:restore

Восстанавливаемся из резервной копии (с помощью аргумента BACKUP указываем таймстамп интересующего нас бекапа):

docker run --name gitlab -it --rm [OPTIONS] \
    sameersbn/gitlab:9.1.0-1 app:rake gitlab:backup:restore BACKUP=1417624827

С docker-compose, последние две команды будут выглядеть так:

docker-compose run --rm gitlab app:rake gitlab:backup:restore
docker-compose run --rm gitlab app:rake gitlab:backup:restore BACKUP=1417624827

Создание резервных копий вручную — не самый удобный и правильный способ, который может быть полезен разве что при переносе Gitlab на другой хост. В реальном мире используется автоматическое резервное копирование.

Для минимальной конфигурации автоматического создания бекапов достаточно в конфигурационный файл docker-compose.yml добавить две строки:

...
    - GITLAB_BACKUP_SCHEDULE=daily
    - GITLAB_BACKUP_TIME=03:00
...

Эти два параметра позволят создавать ежедневные резервные копии в 3 часа ночи. По умолчанию бекапы хранятся 7 дней, после чего самые старые удаляются из системы, но это можно изменить с помощью параметра GITLAB_BACKUP_EXPIRY.

Для хранения резервных копий на AWS (Amazon Web Services) или GCS (Google Cloud Storage) нужно использовать дополнительные опции, подробнее о которых можно почитать здесь.

tweet Share