# zemlya — миграция на zbrcheck.ru (2026-05-19)

## Статус: миграция выполнена; нужен cleanup

DNS пропагировал на 193.108.113.35; Caddy выдал Let's Encrypt сертификаты для `zbrcheck.ru`, `www.zbrcheck.ru`, `pay.zbrcheck.ru`; код и конфиги обновлены; e2e smoke зелёный.

duckdns-домены (`zemlyaweb.duckdns.org`, `zbr.duckdns.org`) оставлены параллельно для zero-downtime на 24–48ч.

## ⏰ НАПОМНИТЬ ЮЗЕРУ: убрать duckdns из CORS после 24-48ч

**Дедлайн:** 2026-05-20 — 2026-05-21 (24-48ч от миграции 2026-05-19 поздно вечером).

**Что сделать:**

1. На mac mini — отредактировать `/Users/cebers_mini/Services/zemlya-web/backend/.env`:
   ```
   # Было (после миграции):
   CORS_ORIGINS=https://zbrcheck.ru,https://www.zbrcheck.ru,https://zemlyaweb.duckdns.org,http://127.0.0.1:20141,http://localhost:20141
   # Должно стать:
   CORS_ORIGINS=https://zbrcheck.ru,https://www.zbrcheck.ru,http://127.0.0.1:20141,http://localhost:20141
   ```

2. На VPS (193.108.113.35, root, pass `7pln1sZKoI`) — отредактировать `/etc/caddy/Caddyfile`:
   ```
   # Было:
   zbr.duckdns.org, pay.zbrcheck.ru {
   ...
   zemlyaweb.duckdns.org, zbrcheck.ru, www.zbrcheck.ru {
   # Должно стать:
   pay.zbrcheck.ru {
   ...
   zbrcheck.ru, www.zbrcheck.ru {
   ```
   Затем: `caddy validate --config /etc/caddy/Caddyfile && systemctl reload caddy`

3. Перезапустить backend на mac mini: `launchctl kickstart -k gui/$(id -u)/local.zemlya-web-backend`

4. (Опционально) удалить duckdns DNS-записи в duckdns.org, чтобы домены не висели «в воздухе».

Бэкапы перед миграцией:
- VPS: `/etc/caddy/Caddyfile.BACKUP-pre-zbrcheck-2026-05-19`
- mac: `frontend/lib/site.ts.BACKUP-pre-zbrcheck-2026-05-19`
- mac: `backend/.env.BACKUP-pre-zbrcheck-2026-05-19`
- mac: `bot/.env.BACKUP-pre-zbrcheck-2026-05-19`

## Что было сделано (комплектно)

### VPS
- `/etc/caddy/Caddyfile`: расширены site labels (alias-подход без дублирования логики)
- Сертификаты Let's Encrypt получены автоматически

### mac mini
- `frontend/lib/site.ts`: `SITE_URL = "https://zbrcheck.ru"`, `SITE_HOSTNAME = "zbrcheck.ru"`
- `backend/.env`: `WEB_BASE_URL = https://zbrcheck.ru`; `CORS_ORIGINS` дополнен новыми доменами (duckdns пока оставлен)
- `bot/.env`: `ROBOKASSA_TUNNEL_URL = https://pay.zbrcheck.ru`
- `npm run build` + kickstart всех 3 launchd-сервисов

### Robokassa (юзер должен сделать сам в личном кабинете)
- **Result URL:** `https://pay.zbrcheck.ru/robokassa/result`
- **Success URL:** `https://zbrcheck.ru/payment/success`
- **Fail URL:** `https://zbrcheck.ru/payment/fail`

**Без этого шага оплаты будут уходить на старый duckdns** — это критично проверить.

## E2E smoke (выполнено 2026-05-19, успешно)

| URL | Статус |
|---|---|
| `https://zbrcheck.ru/` | 200 |
| `https://www.zbrcheck.ru/` | 200 |
| `https://pay.zbrcheck.ru/health` | 200 |
| `/login`, `/help`, `/pricing` | 200 |
| `/api/auth/me`, `/api/auth/telegram/start` | 200 |
| `/sitemap.xml` | 200 с `https://zbrcheck.ru/` URLs |
| `full_audit.py` | 0/0 |

НЕ протестировано вручную (требует реальной интеракции):
- Полный логин через TG-бота (юзер должен сам пройти `/login` → подтвердить в боте)
- Оплата через Robokassa (нужно сначала обновить URLs в кабинете)
- Telegram WebApp / mini-app флоу (если используется)

## Связано
- `zemlya_web_overview.md` — обзор проекта
- `zemlya_audit_2026-05-19.md` — функциональный аудит сайт vs бот
