# Gitea backup-сервер — КАК СОБРАНО НА САМОМ ДЕЛЕ (as-built)

**Дата:** 15.06.2026. **Статус:** работает в проде Yandex Cloud.
**Назначение:** замена заблокированного GitHub как git-хостинг + бэкап. Это документ as-built —
описывает реально развёрнутую систему. Планировавшийся комплект (`…-migration-runbook.md`,
`docker-compose.yml`, `push-mirror-setup.md`, `owner-checklist.md`) описывает другой (более сложный)
вариант — при расхождении истина здесь.

## Доступ

- **Веб (как GitHub):** https://111.88.252.149.nip.io — настоящий сертификат Let's Encrypt.
- **Репозиторий:** `liderra/portal` — 104 ветки, 2 тега, 2482 коммита (полная копия локального
  репозитория на 15.06.2026, `main` = `cc82665`).
- **Админ Gitea:** логин `liderra` (пароль задан при создании, **подлежит смене** через
  веб-UI → Settings → Account; в доке/чате не храним).

## Инфраструктура (Yandex Cloud)

- **Облако/каталог:** `cloud-sasha261185` / folder `default` (`b1gkcguod0994m1dhoam`).
- **ВМ:** `gitea`, id `fhm34n7949qf4jjbt5d3`, зона `ru-central1-a`, 2 vCPU (core-fraction 20%) /
  4 ГБ / SSD 40 ГБ, Ubuntu 22.04.
- **Сеть:** та же VPC, что боевой сервер (`enpncgalc472l4tdb5dr`), подсеть
  `default-ru-central1-a` — внутренняя связность с продом сохранена (для будущего канала).
- **Публичный IP:** `111.88.252.149` — **динамический** (закрепить как статический в этом
  аккаунте YC не вышло — кнопки «сделать статическим» нет ни в UI, ни в IP-адресах). Адрес
  стабилен при перезагрузке; меняется **только при полной остановке (stop)** ВМ.
  ⚠️ **Не останавливать ВМ.** Если IP сменится — обновить домен `<новыйIP>.nip.io` в Caddy и
  ROOT_URL Gitea (см. ниже).
- **SSH на ВМ:** `ssh -i ~/.ssh/gitea_vm yc-user@111.88.252.149` (ключ на dev-машине, без пароля).

## Стек на ВМ (Docker, без docker-compose — plain `docker run`)

Docker `docker.io` (29.1.3) + git, сеть `gitea-net`. Три контейнера, все с
`--restart unless-stopped` (поднимаются после ребута):

1. **gitea-db** — `postgres:16`, том `gitea-db`, порт 5432 НЕ проброшен (только внутри сети).
2. **gitea** — `gitea/gitea:latest`, том `gitea-data2`, БД postgres, `ROOT_URL=https://111.88.252.149.nip.io/`,
   `INSTALL_LOCK=true`, регистрация извне выключена. Порт 3000 наружу НЕ проброшен (фронтит Caddy
   по внутренней сети `gitea:3000`). Встроенный SSH-сервер Gitea выключен (конфликтовал на :22).
3. **caddy** — `caddy:latest`, порты 80/443, том `caddy-data`, команда
   `caddy reverse-proxy --from 111.88.252.149.nip.io --to gitea:3000` — авто-HTTPS (Let's Encrypt).

## Резервный бандл

На ВМ: `/home/yc-user/liderra-all.bundle` (37 МБ) — полный `git bundle --all` (192 ref'а),
восстановимая копия всей истории. Из него развёрнут `liderra-mirror.git` (использован для заливки
в Gitea).

## Как залили репозиторий (для повтора/обновления)

С dev-машины: `git bundle create /tmp/liderra-all.bundle --all` → scp на ВМ →
`git clone --mirror` в `liderra-mirror.git` → `git -C liderra-mirror.git push
http://liderra:<pw>@localhost:3000/liderra/portal.git --all` и `--tags` (через localhost — пароль
по сети не шёл). LFS в репозитории не используется (`git lfs ls-files` пусто).

## Что осталось (по желанию)

- 🔐 Сменить пароль админа Gitea (светился при настройке).
- 📦 Off-box зеркало (GitVerse/GitFlic) — push-mirror из Gitea как 3-й слой бэкапа.
- 📌 Статический IP — если появится доступ к этой функции в YC; иначе правило «не останавливать ВМ».
- 🌐 Перевод на красивый домен `git.liderra.ru` — добавить A-запись у DNS-провайдера liderra.ru
  (в YC публичной зоны для liderra.ru нет) и переключить Caddy `--from` + Gitea ROOT_URL.

## Карта расхождений с планировавшимся комплектом

| Планировалось | Собрано по факту |
|---|---|
| Домен `git.liderra.ru` | `111.88.252.149.nip.io` (DNS liderra.ru не в YC) |
| docker-compose + Caddyfile | `docker run` ×3 + `caddy reverse-proxy` (без compose/Caddyfile) |
| Статический IP | Динамический (нет функции закрепления в аккаунте) |
| Gitea SSH (git-по-ssh) | Выключен (конфликт :22); git по HTTPS |
