Установка Gitlab и разворачивание из бэкапа

Перед началом небольшого изложения по данной теме, сразу хочу внести ясность, что здесь будет по большей части переписывание оф. документации с моими комментариями и пояснениями, с какими проблемами я столкнулся по ходу дела.

Всё началось с того, что в моё поле зрения попал сервер Gitlab, который не имел бэкапы на внешних серверах, а только локально. Но это пол беды. Большая проблема была в том, что рейд, где крутился данный сервер, начал потихоньку сыпаться и была поставлена задача по срочной миграции всех данных на новый сервер.

Так как я не имел до этого вообще опыта работы по установке\переносу Gitlab, было решено разобраться и для себя написать данный материал, который может кому-то пригодится в похожих случаях.

Итак, мною было обнаружено, что локальный бэкап есть – он выполняется по крону командой

/opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1

А сами бэкапы лежат по дефолтному пути

ls -lh /var/opt/gitlab/backups/

-rw------- 1 git git 1,1G авг  8 21:03 1565287382_2019_08_08_10.7.3_gitlab_backup.tar
-rw------- 1 git git 1,1G авг  9 21:03 1565373792_2019_08_09_10.7.3_gitlab_backup.tar
-rw------- 1 git git 1,1G авг 10 21:03 1565460163_2019_08_10_10.7.3_gitlab_backup.tar
-rw------- 1 git git 1,1G авг 11 21:02 1565546553_2019_08_11_10.7.3_gitlab_backup.tar
-rw------- 1 git git 1,1G авг 12 21:04 1565633008_2019_08_12_10.7.3_gitlab_backup.tar
-rw------- 1 git git 1,1G авг 14 21:44 1565808092_2019_08_14_10.7.3_gitlab_backup.tar

Оставалось надеяться, что архивы не с битыми данными. Далее я их быстро перенёс на новый ресурс, где не спеша уже начал развёртывание нового Gitlab.

Для восстановления из копии, предварительно нужна чистая установка аналогичной версии, которую надо восстановить из бэкапа. В моём случае это был Gitlab CE v10.7.3

Установка на Centos 7 1806

Далее всё стандартно и описано в оф. документации. Ставятся зависимости:

yum install -y curl policycoreutils-python postfix

Репозиторий:

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash

Указание домена и всё в одном пакете нужной версии, как в бэкапе (примерно около 1 гб объемом):

EXTERNAL_URL="http://gitlab.domain.ru" yum install gitlab-ce-10.7.3

А далее уже в браузере открыть и проверять, что морда открылась и просит пароль рута.

TLS-соединение в моём случае будет терминироваться на отдельном прокси-сервере, конфигурационный файл сделал такой, с редиректом на https:

server {
        server_name gitlab.domain.ru;
        listen 80;
        return 301 https://$server_name$request_uri;
}

server {
        server_name gitlab.domain.ru;
        ssl_certificate "/etc/nginx/ssl/cert_ru.crtca";
        ssl_certificate_key "/etc/nginx/ssl/cert.ru.key";
        ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
        ssl_prefer_server_ciphers on;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        access_log /var/log/nginx/gitlab.domain.ru.access.log;
        error_log /var/log/nginx/gitlab.domain.ru.error.log;
        listen 443 ssl http2;

        location / {
                proxy_pass http://10.10.4.17:8081;
                proxy_redirect off;
                proxy_read_timeout 300;
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP      $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
        }
}

В процессе установки столкнулся с проблемой: изначально по ошибке установил gitlab-ee, а не gitlab-ce, причём последней версии. Удалил и продолжил установку нужной мне версии, но в конце ничего не стартовало, и я сломал голову, что же было не так.

Не буду описывать ошибки, т.к. их лучше и проще избежать – перед установкой нужно убедиться, что до этого старые версии или кривые установки отсутствовали или же выпилить лишние директории, которые остаются после удаления пакетов старых версий:

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

После этого успешно отработало перечитывание конфигурации gitlab командой

gitlab-ctl reconfigure

а после всё успешно стартовало (за искл. пары сервисов, их в счёт не берем, т.к. они не используются)

 gitlab-ctl start
gitlab-ctl status
down: alertmanager: 1s, normally up, want up; run: log: (pid 3944) 7789s
run: gitaly: (pid 22584) 5552s; run: log: (pid 3928) 7789s
run: gitlab-monitor: (pid 22594) 5552s; run: log: (pid 3936) 7789s
run: gitlab-workhorse: (pid 22606) 5552s; run: log: (pid 3932) 7789s
down: grafana: 1s, normally up, want up; run: log: (pid 3952) 7789s
run: logrotate: (pid 4123) 1950s; run: log: (pid 3934) 7789s
run: nginx: (pid 22703) 5549s; run: log: (pid 3950) 7789s
run: node-exporter: (pid 22710) 5549s; run: log: (pid 3955) 7789s
run: postgres-exporter: (pid 22716) 5549s; run: log: (pid 3940) 7789s
run: postgresql: (pid 22726) 5548s; run: log: (pid 3946) 7789s
run: prometheus: (pid 22735) 5547s; run: log: (pid 3938) 7789s
run: redis: (pid 22744) 5547s; run: log: (pid 3926) 7789s
run: redis-exporter: (pid 22749) 5547s; run: log: (pid 3942) 7789s
run: sidekiq: (pid 22755) 5546s; run: log: (pid 3948) 7789s
run: unicorn: (pid 22763) 5546s; run: log: (pid 3930) 7789s

Также в процессе решения проблем с запуском reconfigure я совсем забыл про firewalld, где нужно разрешить трафик для порта nginx, на котором он слушает (указан в /etc/gitlab/gitlab.rb).

На этом чистая установка завершена.

Развёртывание из резервной копии

Ещё раз напишу, что восстановление происходит строго на ту версию, которая была в бэкапе – в данном случае 10.7.3.

Общее восстановление происходит в автоматическом режиме, за исключением следующих файлов, которые нужно вручную скопировать со старого сервера на новый:

/etc/gitlab/gitlab-secrets.json
/etc/gitlab/gitlab.rb
/var/opt/gitlab/backups/1565808092_2019_08_14_10.7.3_gitlab_backup.tar # тут будет ваш бэкап

После того, как все архивные файлы на месте, нужно выполнить остановку сервисов Gitlab и убедиться в этом, что всё корректно остановилось:

gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
# Проверка
gitlab-ctl status

И запуск восстановления из архива, где в имени отсекается часть “_gitlab_backup.tar”:

gitlab-rake gitlab:backup:restore BACKUP=1565808092_2019_08_14_10.7.3

После успешного восстановления, проверка и запуск:

gitlab-ctl reconfigure
gitlab-ctl restart
gitlab-rake gitlab:check SANITIZE=true

На этом восстановление из резервной копии Gitlab завершено.

Ваш комментарий будет первым

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *