Gitlab в docker-контейнерах: резервное копирование
May 4, 2017 16:22 · 375 words · 2 minute read
Мы уже умеем запускать 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) нужно использовать дополнительные опции, подробнее о которых можно почитать здесь.