Резервная копия 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.
Скопируйте архив в каталог резервных копий и передайте файл пользователю
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Остановите сервисы, которые пишут в базу данных; остальные сервисы продолжают работать:
sudo gitlab-ctl stop puma sudo gitlab-ctl stop sidekiqВосстановите данные из архива:
sudo gitlab-backup restore BACKUP=<BACKUP_NAME>Команда дважды запросит подтверждение: перед пересозданием файла
authorized_keysи перед удалением текущих таблиц базы данных. Оба раза ответьтеyes.Перезапустите инстанс и выполните самопроверку:
sudo gitlab-ctl reconfigure sudo gitlab-ctl restart sudo gitlab-rake gitlab:check SANITIZE=true
Проверьте, что контейнер запущен с тегом образа той версии, на которой сделана копия, и что файлы конфигурации и секретов исходного инстанса лежат на томе конфигурации.
Скопируйте архив в каталог резервных копий на томе данных и назначьте ему владельца, под которым работает инстанс:
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Остановите сервисы, которые пишут в базу данных:
docker exec code gitlab-ctl stop puma docker exec code gitlab-ctl stop sidekiqЗапустите восстановление. Команда дважды запросит подтверждение — перед пересозданием файла
authorized_keysи перед удалением текущих таблиц базы данных; оба раза ответьтеyes:docker exec -it code gitlab-backup restore BACKUP=<BACKUP_NAME>Примените конфигурацию и перезапустите контейнер:
docker exec code gitlab-ctl reconfigure docker restart codeПроверьте инстанс:
docker exec code gitlab-ctl status docker exec code gitlab-rake gitlab:check SANITIZE=true
Переведите инстанс в режим обслуживания.
Убедитесь, что бакет объектного хранилища, настроенный через
global.appConfig.object_store, содержит архив, который нужно восстановить.Выполните команду восстановления внутри пода toolbox:
d8 k -n code exec deploy/code-toolbox -- backup-utility restore --backup-id <BACKUP_ID>Дождитесь завершения команды и убедитесь, что все поды находятся в состоянии
Running:d8 k -n code get podsВыведите инстанс из режима обслуживания.
После восстановления войдите в веб-интерфейс и склонируйте репозиторий, чтобы убедиться, что инстанс работает со своими данными.
Модуль Deckhouse Kubernetes Platform
В поставке модулем резервные копии создаёт оператор по расписанию из ресурса CodeInstance и выгружает их в объектное хранилище: состав архива, предусловия восстановления и матрица команд приведены в разделе «Бекапы и восстановление» документации модуля.