GitLab: перенос данных с omnibus-установки в docker-установку
Apr 10, 2017 13:57 · 348 words · 2 minute read
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-контейнера.