GitLab: перенос данных с omnibus-установки в docker-установку

Apr 10, 2017 13:57 · 348 words · 2 minute read gitlab docker

GitLab — одна из самых популярных систем контроля версий и управления Git-репозиториями с открытым исходным кодом и очень широкой функциональностью. Процесс установки GitLab (будь-то omnibus, docker или готовая виртуальная машина) хорошо задокументирован, поэтому рассматривать мы его не будем.

В данной статье подробно разберем пример переезда GitLab с omnibus-установки в docker-установку с сохранением всех данных — репозиториев, мерджей, комментариев, артефактов и билдов (если такие есть). Давайте разберемся!

Итак, имеем неактуальную omnibus-установку GitLab из пакета gitlab-ce_8.10.10-ce.0_amd64.deb. Хотим получить актуальную версию (8.17.2), установленную в docker-контейнере, для простоты обновления в будущем.

Сначала делаем резервную копию omnibus-установки GitLab:

sudo gitlab-rake gitlab:backup:create

По умолчанию резервная копия будет создана в каталоге /var/opt/gitlab/backups.

Из docker-образа устанавливаем GitLab той же версии, что и в omnibus-установке:

sudo docker run -d -h gitlab.example.com --name gitlab --restart always \
  -p 10080:80 -p 10022:22 \
  -v /data/gitlab/config:/etc/gitlab \
  -v /data/gitlab/logs:/var/log/gitlab \
  -v /data/gitlab/data:/var/opt/gitlab \
  gitlab/gitlab-ce:8.10.10-ce.0

После запуска контейнера в хост-системе будет автоматически создан каталог /data/gitlab/data. Переходим в него, создаем папку backups и копируем туда только что созданную резервную копию:

cd /data/gitlab/data && mkdir backups
cp /var/opt/gitlab/backups/1924945297_gitlab_backup.tar /data/gitlab/data/backups

Опционально: изменим права доступа и владельца файла с бекапом внутри контейнера, на случай если он скопировался неправильно:

sudo docker exec -it gitlab bash
chmod 600 /var/opt/gitlab/backups/1924945297_gitlab_backup.tar
chown git:git /var/opt/gitlab/backups/1924945297_gitlab_backup.tar

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

gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-rake gitlab:backup:restore BACKUP=1924945297
gitlab-ctl start
gitlab-rake gitlab:check SANITIZE=true

После восстановления проверим возможность логина в браузере, если все работает, то идем дальше.

Останавливаем и удаляем docker-контейнер с GitLab:

sudo docker stop gitlab && sudo docker rm gitlab

Запускаем docker-контейнер с актуальной версией GitLab и подсовываем ему нужные данные:

sudo docker run -d -h gitlab.example.com --name gitlab --restart always \
  -p 10080:80 -p 10022:22 \
  -v /data/gitlab/config:/etc/gitlab \
  -v /data/gitlab/logs:/var/log/gitlab \
  -v /data/gitlab/data:/var/opt/gitlab \
  gitlab/gitlab-ce:8.17.2-ce.0

При первом запуске все необходимые процедуры обновления запустятся самостоятельно (занимают буквально пару минут). После этого можно удалять старую omnibus-установку:

sudo dpkg -r gitlab

или:

sudo aptitude purge gitlab-ce

И не забыть потом удалить данные из старых рабочих каталогов Gitlab:

sudo rm -rf /var/opt/gitlab/
sudo rm -rf /opt/gitlab

В дальнейшем вся процедура обновления Gitlab сводится к обновлению docker-контейнера.

tweet Share