Приложения
GitLab
GitLab Omnibus в Docker arcula защищает тремя ресурсами. Они копируются разными способами, и в плане нужны все три.
| Ресурс в плане | Что внутри | Как копируется |
|---|---|---|
| PostgreSQL в контейнере GitLab | База GitLab | «pg_dump — согласованный дамп» |
| «GitLab: репозитории и загрузки» | Репозитории, загрузки, артефакты, LFS, пакеты, registry | «gitlab-backup» — штатный gitlab-backup create без базы |
| «GitLab: конфигурация и секреты» | gitlab.rb и gitlab-secrets.json из /etc/gitlab | Копия файлов |
Базу снимает дамп, поэтому gitlab-backup запускается с SKIP=db: база не копируется дважды.
Проверить план
- Откройте план защиты сервера.
- В «Данные приложений» найдите «GitLab: репозитории и загрузки» — в группе «остальное». Галочка должна стоять, в «Как копировать» — «gitlab-backup».
- Там же проверьте галочки у базы GitLab и у «GitLab: конфигурация и секреты».
- Сохраните план.
Без «GitLab: репозитории и загрузки» в бэкап попадёт только база — репозитории и загрузки не сохранятся. Ресурс появился после того, как план уже был подтверждён, — у него метка «новое». Он войдёт в бэкап, только когда вы сохраните план.
В «Как копировать» написано «gitlab-backup — агент пока не умеет (обновите его)» — агент старый, и пока это копия файлов без согласованности. См. Обновить агентов.
Без gitlab-secrets.json архив gitlab-backup не восстановить: в нём ключи шифрования GitLab. Поэтому «GitLab: конфигурация и секреты» нужна обязательно.
Как идёт бэкап
Агент запускает в контейнере GitLab:
gitlab-backup create BACKUP=arcula-<время> SKIP=dbАрхив переносится в /var/opt/gitlab/backups/snapshots/, уходит в бэкап и удаляется. В каталоге бэкапов GitLab архивы не копятся.
Упал gitlab-backup — этот компонент не попадёт в бэкап. Последние строки вывода — в журнале сервера.
Восстановить
Нужна та же версия и редакция GitLab (CE или EE), что в бэкапе. ЛК напоминает об этом у сервера: «Обзор» → «Понадобится при восстановлении».
Порядок: конфигурация и секреты, база, затем репозитории и загрузки.
1. arcula restore
На новой машине — prepare по recovery kit, как в статье Восстановить данные. Он вернёт каталог проекта, /etc/gitlab с gitlab-secrets.json, тома и базу из дампа. Проверьте в отчёте, что шаг базы выполнен: без неё архив восстанавливать нельзя.
Архив gitlab-backup arcula не применяет, а извлекает в /var/lib/arcula/restore/<id>/gitlab. Найдите его:
sudo find /var/lib/arcula/restore -name '*_gitlab_backup.tar'Достать только архив, не трогая работающий GitLab, — режим component для «GitLab: репозитории и загрузки».
2. Запустить GitLab
cd /opt/gitlab && docker compose up -dДождитесь, пока GitLab поднимется.
3. Репозитории и загрузки
Ниже контейнер называется gitlab, архив — arcula-20261024T120000Z_gitlab_backup.tar. Подставьте свои:
docker cp /var/lib/arcula/restore/<id>/gitlab/arcula-20261024T120000Z_gitlab_backup.tar gitlab:/var/opt/gitlab/backups/
docker exec gitlab chown git:git /var/opt/gitlab/backups/arcula-20261024T120000Z_gitlab_backup.tar
docker exec gitlab gitlab-ctl stop puma
docker exec gitlab gitlab-ctl stop sidekiq
docker exec -it gitlab gitlab-backup restore BACKUP=arcula-20261024T120000Z SKIP=db
docker exec gitlab gitlab-ctl restart
docker exec gitlab gitlab-rake gitlab:check SANITIZE=trueBACKUP — имя архива без _gitlab_backup.tar. SKIP=db обязателен: базу уже поднял arcula restore.
Та же статья — в панели, в разделе «Справка».