Миграция сервера GitLab: инструкция от практика
Нужно перенести GitLab на новый сервер, но боитесь потерять данные? Я покажу проверенный способ миграции, сохраняющий все проекты, настройки и историю.
Подготовка
Убедитесь, что:
у вас есть root-доступ к обоим серверам;
на старом сервере ≥50% свободного места;
Вы знаете точную версию GitLab (критически важно!)
Шаг 1: Подготовка нового сервера
Установите идентичную версию GitLab на новую машину:
sudo apt-get update && sudo apt-get install -y curl openssh-server ca-certificates perl
# Установка конкретной версии (пример для 17.5.5)
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash sudo apt-get install gitlab-ee=17.5.5-ee.0
Шаг 2: Создание бэкапа на старом сервере
# Проверка свободного места
df -h
# Создаем резервную копию
sudo gitlab-backup create
Процесс создания бэкапа может занять от минут до часов.
Шаг 3: Копирование файлов на новый сервер
Важно! Используем nohup
для обеспечения непрерывности процесса и SSH-ключ для безопасного соединения:
# Копирование файла секретов
nohup /bin/bash -c 'rsync -avh --delete --rsync-path="sudo rsync" -e "ssh -o StrictHostKeyChecking=no -i k" /etc/gitlab/gitlab-secrets.json root@new-server:/etc/gitlab/gitlab-secrets.json'
# Копирование бэкапа
nohup /bin/bash -c 'rsync -avh --delete --rsync-path="sudo rsync" -e "ssh -o StrictHostKeyChecking=no -i k" /var/opt/gitlab/backups/1742165326_2025_03_16_17.5.5_gitlab_backup.tar root@new-server:/var/backups/gitlab/1742165326_2025_03_16_17.5.5_gitlab_backup.tar'
Примечание: В примере k
— это файл приватного ключа. Файл конфигурации (gitlab.rb
) намеренно не копируем, но при необходимости полной копии скопируйте и его.
Шаг 4: Восстановление на новом сервере
Сначала остановите необходимые сервисы:
sudo gitlab-ctl stop puma
sudo gitlab-ctl stop sidekiq
Затем запустите восстановление (с nohup для надежности):
nohup /bin/bash -c "gitlab-backup restore BACKUP=1742165326_2025_03_16_17.5.5 force=yes"
Важно: Идентификатор бэкапа — это часть имени файла до gitlabbackup.tar.
Параметр force=yes
избавляет от подтверждений.
Шаг 5: Перезапуск и проверка
sudo gitlab-ctl restart
sudo gitlab-ctl reconfigure
# Проверки целостности данных
sudo gitlab-rake gitlab:check SANITIZE=true
sudo gitlab-rake gitlab:doctor:secrets
sudo gitlab-rake gitlab:artifacts:check
sudo gitlab-rake gitlab:lfs:check
sudo gitlab-rake gitlab:uploads:check
Финальная проверка
Убедитесь, что:
вход работает;
репозитории открываются;
CI/CD пайплайны запускаются;
все проекты на месте.
Типичные проблемы и их решение
Ошибка 502 при доступе к некоторым репозиториям:
sudo gitlab-ctl restart
sudo gitlab-ctl reconfigure
Рекомендации от практика
Тестовая миграция: Сначала попробуйте на тестовом сервере.
Окно обслуживания: Предупредите команду заранее.
Резервный план: Не выключайте старый сервер до полной проверки нового.
Мониторинг: Следите за логами первые дни после миграции.
DNS: Обновите DNS-записи после успешной миграции.
Заключение
Ключ к успешной миграции — точное соблюдение версионности, использование nohup
для длительных операций и тщательная проверка после восстановления.
Подробнее: docs.gitlab.com/ee/administration/backup_restore/restore_gitlab.html
Бонус: инструмент для построения последовательности обновления гитлаба