# Этап 3 — БОЕВОЙ ПЕРЕЕЗД ВЫПОЛНЕН (liderra.ru → Yandex Managed PG)

**Дата:** 26.06.2026. **Результат:** ✅ прод liderra.ru работает на управляемом кластере `c9q2cvtjpq3hgq6l0r96`. Деньги целы, проверено на живом сайте. Окно простоя ~5 минут.

## Что сделано (последовательность окна)
Предокно (без простоя): prod-deploy-validator → **GO** (8/8 green); пересоздан ПУСТОЙ managed `liderra` (owner crm_migrator, ext anon/btree_gin/pg_trgm/pgcrypto, 5 ролей `--permissions liderra`); проверена связь app/supplier ролей через `sslmode=require`; бэкап `.env`.

Окно (простой):
1. `sudo -u www-data php artisan down --retry=120`.
2. `sudo systemctl stop liderra-queue.service liderra-queue-alert.service` (заморозка записи).
3. Снят PROD FROZEN baseline.
4. `sudo -u postgres pg_dump -Fc liderra` (peer auth, ~13 МБ сжато из ~415 МБ).
5. `pg_restore --no-owner --no-privileges` → чистый managed `liderra` (через rw-endpoint `c-<cid>.rw.mdb.yandexcloud.net:6432`, SSL verify-full + CA для админ-операции).
6. `02_grants.sql` (0 ошибок, hardened DO/EXCEPTION для GRANT членства) + `03_service_bypass_policies.sql` (srv_bypass=44).
7. Сверка денег ДО==ПОСЛЕ — **точное совпадение**.
8. Правка `app/.env`: `DB_HOST=c-<cid>.rw.mdb.yandexcloud.net`, `DB_PORT=6432`, `DB_SSLMODE=require`, пароли `crm_app_user`/`crm_supplier_worker` (managed). `DB_USERNAME`/`DB_SUPPLIER_USERNAME`/`DB_DATABASE` без изменений.
9. `sudo -u www-data php artisan config:cache` (квирк 107 — из-под www-data; config.php READABLE).
10. `sudo systemctl restart php8.3-fpm` + `start liderra-queue liderra-queue-alert`.
11. `sudo -u www-data php artisan up`.

## Сверка денег (ДО прод == ПОСЛЕ managed)
| Метрика | ДО (frozen prod) | ПОСЛЕ (managed) |
|---|---|---|
| tenant2 balance_rub | 1 838 400.00 | 1 838 400.00 |
| deals | 1016 | 1016 |
| tenants | 6 | 6 |
| Σ balances | 1 851 090.00 | 1 851 090.00 |
| balance_transactions | 916 | 916 |
| lead_charges | 879 | 879 |

## Проверка живого сайта (через приложение)
- `curl https://liderra.ru/` → **HTTP 200** (0.08 c), снаружи и локально.
- Деньги через приложение (`pgsql_supplier`, srv_bypass): `t2_balance=1838400.00 deals=1016`.
- RLS через приложение: `app_user` с `SET app.current_tenant_id='2'` → видит 1013 сделок (свой тенант). Изоляция работает.
- `php artisan db:show` → Host = `c-<cid>.rw.mdb.yandexcloud.net`, 16 open connections.
- laravel.log за 3 мин — ошибок нет.

## 🔙 ОТКАТ (доступен ≥7 дней, до ~03.07.2026)
Старая база — локальный PG на прод-VM (`127.0.0.1:5432`) — **НЕ ТРОНУТА** (только читалась для дампа). Бэкап старого `.env` → `/var/www/liderra/app/.env.bak-precutover`.
Откат: `sudo cp /var/www/liderra/app/.env.bak-precutover /var/www/liderra/app/.env` → `sudo -u www-data php artisan config:cache` → `sudo systemctl restart php8.3-fpm liderra-queue liderra-queue-alert`. (Записи, сделанные на managed после переключения, при откате не переедут — учесть.)
**НЕ удалять старую локальную базу и managed-кластер минимум до ~03.07.2026.**

## Хвосты-followup (не срочно — сайт работает)
1. **SSL `require` → `verify-full`:** добавить `'sslrootcert' => env('DB_SSLROOTCERT')` в `config/database.php` ($pgsqlConnection), положить CA на VM, выставить `DB_SSLROOTCERT` в `.env`, deploy. Сейчас трафик шифруется (`require`), но без проверки сертификата сервера; связь идёт внутри Yandex VPC (managed без публичного IP), MITM-риск низкий.
2. **Миграция аудита `2026_06_26_140000`:** на managed сейчас СТАРАЯ audit-функция прода (норм для обычной работы — append-only INSERT проходят). Нужна только для команды audit-rebuild (там старый путь через `session_replication_role` на managed недоступен).
3. **Выкатить ветку `feat/db-path-a-audit-guc-bypass-policies`** в прод-код (GUC-аудит + hardened 02_grants + canon schema v8.56).
4. **`tenant_requisites_tenant_id_fkey`** не воссоздан на managed (на проде 1 строка-сирота `tenant_requisites` ссылается на несуществующий тенант). Почистить сироту на источнике ИЛИ добавить FK `NOT VALID`.
5. **Пароли managed-ролей** живут в `app/.env` (штатно) — опционально в Lockbox.
6. **ПИЛОТ.md** обновить: прод теперь на Managed PG (а не локальный PG).
7. **Мониторинг** первых суток реального трафика на новой базе.
