# Настройка off-box зеркала (push-mirror) из Gitea

**Зачем:** второй уровень бэкапа. Если виртуальная машина с Gitea умрёт, копия репозитория
останется на стороннем хостинге. Часть комплекта — см. runbook шаги 9-10.

**Исполнитель:** 🧑‍💼 владелец (аккаунт/токен стороннего хостинга) + 📋 настройка в Gitea.

---

## 1. Выбрать сторонний российский хостинг

| Хостинг | Заметки |
|---|---|
| **GitVerse** (СберТех) | Managed RU-хостинг, GitHub-подобный. ⚠️ проверить актуальные лимиты приватных репозиториев и условия |
| **GitFlic** | Managed RU-хостинг, есть импорт из GitHub. ⚠️ проверить актуальные лимиты/условия |

Достаточно **одного** как зеркало. Это только резервная копия — CI/основная работа остаются на
своём Gitea.

⚠️ **проверить:** актуальное состояние, тарифы и лимиты выбранного хостинга на момент настройки
(вживую не подтверждено).

---

## 2. На стороне зеркала (🧑‍💼 владелец)

1. Завести аккаунт на выбранном хостинге.
2. Создать **пустой приватный репозиторий** под зеркало (напр. `liderra/portal-mirror`),
   БЕЗ инициализации README.
3. Создать **токен доступа** (personal access token) с правом записи в репозитории. Сохранить —
   это секрет, в общий доступ/репозиторий не класть.

---

## 3. В Gitea настроить push-mirror (📋 по комплекту)

В веб-интерфейсе Gitea: открыть репозиторий → **Настройки** → раздел **Зеркала** (Mirrors) →
добавить **Push Mirror**:

- **Remote Repository URL:** `https://<MIRROR_HOST>/<OWNER>/<REPO>.git`
- **Authorization:** имя пользователя + **токен** со стороннего хостинга (из п.2.3).
- **Sync interval:** напр. каждые 8 часов (или по желанию).
- Сохранить.

Gitea будет автоматически дозаливать новые коммиты/ветки на зеркало по расписанию.

---

## 4. Проверить, что зеркало реально синхронизировалось (📋 по комплекту)

Это обязательный шаг — сохранения настройки НЕДОСТАТОЧНО:

1. В Gitea на странице зеркал нажать **Synchronize Now** (запустить синхронизацию вручную).
2. Дождаться завершения (статус без ошибки).
3. Открыть репозиторий **на стороне зеркала** (GitVerse/GitFlic) и убедиться, что:
   - репозиторий не пустой, ветки на месте;
   - последний коммит в `main` совпадает с тем, что в Gitea.

Только после успешной сверки считать off-box бэкап рабочим.

---

## Траблшутинг

- **Sync падает с ошибкой авторизации** — перепроверить токен стороннего хостинга и право записи.
- **Зеркало пустое после sync** — проверить, что URL указывает на существующий пустой репозиторий
  и что исходный репозиторий в Gitea не пуст (сначала выполнить заливку, runbook шаги 7-8).
