Резервная копия Deckhouse Code состоит из архива с данными инстанса и файлов, которые в архив не попадают. Состав архива одинаков для пакета для ОС Linux и Omnibus Docker: обе поставки работают на одном движке, и копию в них создаёт команда gitlab-backup. В контейнере те же команды выполняются через docker exec, а архив записывается на том данных.

Что входит в резервную копию

Команда gitlab-backup create собирает в один архив:

  • репозитории;
  • базу данных;
  • загруженные файлы (uploads);
  • артефакты CI;
  • LFS-объекты;
  • реестр пакетов.

Что хранится отдельно

Эти файлы в архив не попадают, копируйте их вместе с каждым архивом:

  • /etc/gitlab/gitlab-secrets.json — ключи шифрования базы данных, без которых при восстановлении теряются настройки двухфакторной аутентификации, токены и зашифрованные переменные CI;
  • /etc/gitlab/gitlab.rb — конфигурация инстанса;
  • сертификаты и ключи из каталога /etc/gitlab/ssl/.

Файлы секретов храните с тем же уровнем защиты, что и пароли.

  • Пакет для ОС Linux
  • Omnibus Docker
Файлы лежат в каталоге /etc/gitlab/ на машине инстанса. Копируйте их вместе с каждым архивом.

Файлы находятся на томе конфигурации. Архивируйте их отдельной командой:

docker exec -t code gitlab-ctl backup-etc

Команда записывает файл /etc/gitlab/config_backup/gitlab_config_<TIMESTAMP>_<DATE>.tar с содержимым каталога /etc/gitlab: gitlab.rb, gitlab-secrets.json и TLS-сертификатами. Каталог находится на томе конфигурации, на хосте это /srv/code/config/config_backup.

Создание резервной копии

  • Пакет для ОС Linux
  • Omnibus Docker
  • Helm-чарт

Копия снимается одной командой:

sudo gitlab-backup create

Архив появится в каталоге /var/opt/gitlab/backups/ под именем вида <TIMESTAMP>_<DATE>_<ENGINE_VERSION>_gitlab_backup.tar. Версия в имени — версия встроенного движка, она не совпадает с версией пакета deckhouse-code, поэтому при снятии копии записывайте версию пакета рядом с архивом:

# РЕД ОС.
rpm -q deckhouse-code
# Ubuntu.
dpkg -l deckhouse-code

Выполните создание копии в работающем контейнере:

docker exec -t code gitlab-backup create

Архив появится в каталоге /var/opt/gitlab/backups внутри контейнера, с томами из раздела «Быстрый старт» на хосте это /srv/code/data/backups. Копируйте его за пределы хоста вместе с архивом конфигурации и секретов.

Утилита backup-utility запускается внутри пода toolbox, который разворачивает чарт:

d8 k -n code exec deploy/code-toolbox -- backup-utility

Команда создаёт архив резервной копии и загружает его в бакет объектного хранилища, настроенный через global.appConfig.object_store (раздел «Объектное хранилище»).

Срок хранения архивов и расписание

Архивы старше backup_keep_time удаляются при создании следующей резервной копии.

  • Пакет для ОС Linux
  • Omnibus Docker

Срок хранения задаётся в файле /etc/gitlab/gitlab.rb в секундах:

# Семь дней.
gitlab_rails['backup_keep_time'] = 604800

Изменение вступает в силу после sudo gitlab-ctl reconfigure.

Регулярное снятие копии задаётся заданием cron, например ежедневно в 02:00:

echo '0 2 * * * root /opt/gitlab/bin/gitlab-backup create CRON=1' \
  | sudo tee /etc/cron.d/deckhouse-code-backup

Срок хранения архивов задаёт параметр gitlab_rails['backup_keep_time'] в конфигурации на томе конфигурации; его значение и поведение описаны на вкладке «Пакет для ОС Linux».

Для расписания выполняйте ту же команду из cron на хосте:

echo '0 2 * * * root /usr/bin/docker exec -t code gitlab-backup create CRON=1' \
  | sudo tee /etc/cron.d/deckhouse-code-backup

Копирование за пределы машины

Регулярно копируйте свежие архивы на отдельный сервер.

  • Пакет для ОС Linux
  • Omnibus Docker
Забирайте архивы из каталога /var/opt/gitlab/backups/, например командой rsync. Вместе с архивом копируйте файлы /etc/gitlab/gitlab-secrets.json и /etc/gitlab/gitlab.rb: без них архив восстанавливается не полностью.
Забирайте архивы из каталога /srv/code/data/backups на хосте вместе с архивом конфигурации из каталога /srv/code/config/config_backup: без конфигурации и секретов архив восстанавливается не полностью.

Восстановление

Восстановление заменяет данные инстанса содержимым архива. До запуска проверьте, что выполнены условия:

  • установлена ровно та версия, на которой сделана резервная копия;
  • файлы gitlab.rb и gitlab-secrets.json исходного инстанса лежат на своих местах. При переносе на новый сервер скопируйте их до восстановления и выполните настройку;
  • сертификаты и ключи из каталога /etc/gitlab/ssl/ лежат на своих местах: gitlab.rb ссылается на них по путям, и без этих файлов настройка завершается ошибкой запуска nginx;
  • на диске достаточно свободного места для распакованного архива.

В командах для пакета для ОС Linux и Omnibus Docker <BACKUP_NAME> — имя файла архива без суффикса _gitlab_backup.tar: для архива 1784800000_2026_07_23_19.1.2_gitlab_backup.tar это 1784800000_2026_07_23_19.1.2.

  • Пакет для ОС Linux
  • Omnibus Docker
  • Helm-чарт

Проверьте установленную версию пакета командой rpm -q deckhouse-code на РЕД ОС или dpkg -l deckhouse-code на Ubuntu. Если конфигурация и секреты перенесены с другой машины, после копирования выполните sudo gitlab-ctl reconfigure.

  1. Скопируйте архив в каталог резервных копий и передайте файл пользователю git:

    sudo cp <BACKUP_NAME>_gitlab_backup.tar /var/opt/gitlab/backups/
    sudo chown git:git /var/opt/gitlab/backups/<BACKUP_NAME>_gitlab_backup.tar
  2. Остановите сервисы, которые пишут в базу данных; остальные сервисы продолжают работать:

    sudo gitlab-ctl stop puma
    sudo gitlab-ctl stop sidekiq
  3. Восстановите данные из архива:

    sudo gitlab-backup restore BACKUP=<BACKUP_NAME>

    Команда дважды запросит подтверждение: перед пересозданием файла authorized_keys и перед удалением текущих таблиц базы данных. Оба раза ответьте yes.

  4. Перезапустите инстанс и выполните самопроверку:

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

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

  1. Скопируйте архив в каталог резервных копий на томе данных и назначьте ему владельца, под которым работает инстанс:

    sudo cp <BACKUP_NAME>_gitlab_backup.tar /srv/code/data/backups/
    docker exec code chown git:git /var/opt/gitlab/backups/<BACKUP_NAME>_gitlab_backup.tar
  2. Остановите сервисы, которые пишут в базу данных:

    docker exec code gitlab-ctl stop puma
    docker exec code gitlab-ctl stop sidekiq
  3. Запустите восстановление. Команда дважды запросит подтверждение — перед пересозданием файла authorized_keys и перед удалением текущих таблиц базы данных; оба раза ответьте yes:

    docker exec -it code gitlab-backup restore BACKUP=<BACKUP_NAME>
  4. Примените конфигурацию и перезапустите контейнер:

    docker exec code gitlab-ctl reconfigure
    docker restart code
  5. Проверьте инстанс:

    docker exec code gitlab-ctl status
    docker exec code gitlab-rake gitlab:check SANITIZE=true
  1. Переведите инстанс в режим обслуживания.

  2. Убедитесь, что бакет объектного хранилища, настроенный через global.appConfig.object_store, содержит архив, который нужно восстановить.

  3. Выполните команду восстановления внутри пода toolbox:

    d8 k -n code exec deploy/code-toolbox -- backup-utility restore --backup-id <BACKUP_ID>
  4. Дождитесь завершения команды и убедитесь, что все поды находятся в состоянии Running:

    d8 k -n code get pods
  5. Выведите инстанс из режима обслуживания.

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

Модуль Deckhouse Kubernetes Platform

В поставке модулем резервные копии создаёт оператор по расписанию из ресурса CodeInstance и выгружает их в объектное хранилище: состав архива, предусловия восстановления и матрица команд приведены в разделе «Бекапы и восстановление» документации модуля.