Thank you for reading this post, don't forget to subscribe!
у меня есть старый сервер на centos 6 и gitlab 10.4.3
подготавливаем новый сервер на centos 7 и ставим такую же версию:
yum install pygpgme yum-utils
yum install -y curl policycoreutils-python openssh-server
cat /etc/yum.repos.d/gitlab_gitlab-ce.repo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
[gitlab_gitlab-ce] name=gitlab_gitlab-ce baseurl=https://packages.gitlab.com/gitlab/gitlab-ce/el/7/$basearch repo_gpgcheck=0 gpgcheck=0 enabled=1 gpgkey=https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey/gitlab-gitlab-ce-3D645A26AB9FBD22.pub.gpg sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300 [gitlab_gitlab-ce-source] name=gitlab_gitlab-ce-source baseurl=https://packages.gitlab.com/gitlab/gitlab-ce/el/7/SRPMS repo_gpgcheck=1 gpgcheck=1 enabled=1 gpgkey=https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey/gitlab-gitlab-ce-3D645A26AB9FBD22.pub.gpg sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300 |
yum install -y yum-plugin-downloadonly
ставим нашу версию:
yum install gitlab-ce-10.4.3
правим конфиг файл в соответствии со старым сервером:
vim /etc/gitlab/gitlab.rb
перезапускаем реконфигурацию:
gitlab-ctl reconfigure
Так как с дисковым пространством у меня печаль беда, я на новом сервере добавил диск в 100 гб для переноса:
pvcreate /dev/sdc
vgcreate backup /dev/sdc
lvcreate -n backup -L 100G backup
mkfs.ext4 /dev/mapper/backup-backup
mount /dev/mapper/backup-backup /var/opt/gitlab/backups/
chown -R git:root /var/opt/gitlab/backups/
chmod 700 /var/opt/gitlab/backups/
чтобы старый сервер смог создать бэкап я по nfs прокину этот диск, на новом сервере (там же где и диск)
ставим:
yum install nfs-utils nfs-utils-lib -y
systemctl start nfs
systemctl start rpcbind
cat /etc/exports
/var/opt/gitlab/backups 10.230.244.186/32(rw,sync,no_root_squash,no_subtree_check)
exportfs -rav
теперь переходим на старый сервер и ставим nfs пакеты чтоб подкинуть нашу директорию:
yum install nfs-utils nfs-utils-lib -y
mount -t nfs 10.230.244.210:/var/opt/gitlab/backups /var/opt/gitlab/backups
chown -R git:root backups/
запускаем создание бэкапа:
gitlab-rake gitlab:backup:create
дожидаемся окончания бэкапа (для объёма в 30Gb требуется минимум 60Gb)
после можно смело отмонтировать раздел:
umount /var/opt/gitlab/backups
переходим на новый сервер
cd /var/opt/gitlab/
ещё раз правим владельца:
chown -R git:root backups/
запускаем все процессы гитлаба:
gitlab-ctl start
стопарим процессы:
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
cd /var/opt/gitlab/backups/
и разворачиваем:
gitlab-rake gitlab:backup:restore BACKUP=1621239484_2021_05_17_10.4.3
дальше появятся вопросы про перезапись данных, отвечаем yes
ну и всё данные перенеслись.
дальше запускаем гитлаб
gitlab-ctl start
и проверяем
gitlab-rake gitlab:check SANITIZE=true
+ правим владельца regiistry:
chown -R registry:registry /var/opt/gitlab/gitlab-rails/shared/registry/docker/
а то не будут образа пушится
====================================================================================================
ВОЗМОЖНЫЕ ПРОБЛЕМЫ:
при переезде на новый сервер перестали работать ci/cd pipeline вот с такой ошибкой:
The scheduler failed to assign job to the runner, please try again or contact system administrator
при запуске на ранере команды:
gitlab-runner -debug run
вхождений со стороны гитлаба нету,
вот тут:
https://docs.gitlab.com/ee/raketasks/backup_restore.html#when-the-secrets-file-is-lost
нашёл решение что нужно удалить переменные, подключаемся к базе гитлаба:
gitlab-rails dbconsole (проходит команда долго)
смотрим
SELECT * FROM public."ci_group_variables";
SELECT * FROM public."ci_variables";
и удаляем:
DELETE FROM ci_group_variables;
DELETE FROM ci_variables;
Не забываем править владельца домашней директории для gitlab-registry
chown -R registry:registry /var/opt/gitlab/gitlab-rails/shared/registry/docker/
так как удалили переменные их надо создать, на старой тачке смотрим id проектов где есть переменные:
подключаемся:
gitlab-rails dbconsole
и делаем запрос:
gitlabhq_production=> SELECT project_id FROM public."ci_variables"
получим результат:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
project_id ------------ 385 508 460 460 460 526 526 526 526 526 526 526 526 526 (14 rows) |
если нужно исключить из поиска какую-то переменную(в моём случае kubeconfig) то можно сделать запрос:
gitlabhq_production=> SELECT project_id FROM public."ci_variables" where key not like '%kubeconfig%';
чтобы узнать название проектов по id, делаем запрос
SELECT * FROM public.projects where id = 526;
узнав имя проекта надо будет ручками создать такую же секретную переменную как и на старом сервере (увы я другого не придумал)
либо как указано вот тут:
https://docs.gitlab.com/ee/raketasks/backup_restore.html#back-up-gitlab
скопировать и подкинуть:
/home/git/gitlab/config/secrets.yml
/home/git/gitlab/config/gitlab.yml
но я это не тестил.
после чего по новой регаем ранеров(с новым регистрационным токеном) ииии поидее должно быть всё ок.
Кстати если были ssh ключи пользователей они тоже похерятся, их надо будет снова вручную добавлять.