# День деплоя — чеклист на одну страницу

> **Для кого:** оператор перед и после заливки на VPS.  
> Подробности: [SERVER_READINESS_RU.md](../SERVER_READINESS_RU.md) · [DEPLOY_VERITHINK_COM_RU.md](../DEPLOY_VERITHINK_COM_RU.md)  
> OCD после деплоя: [CURSOR_MCP_GUIDE_RU.md](CURSOR_MCP_GUIDE_RU.md) §7

Замените **`YOUR_DOMAIN`** на `verifythink.com` (или ваш `PUBLIC_DOMAIN`).

**Папка на VPS:** `/var/www/www-root/data/www/verifythink.com/`

---

## До заливки (на ПК, ~30 мин)

| # | Действие | Команда | OK если |
|---|----------|---------|---------|
| 1 | Тесты / lanes | `.\scripts\verify-vt-ready.ps1` | exit 0 |
| 2 | OCD smoke | `.\scripts\verify-ocd-e2e-smoke.ps1` | `ocd-e2e-smoke: ok` |
| 3 | Preflight template | `.\scripts\deploy\preflight-dry-run.ps1` | exit 0 |
| 4 | `.env.prod` | скопировать из `.env.prod.example`, заполнить **7 секретов** + `PUBLIC_DOMAIN` + `ADMIN_SECRET` + **`VERITHINK_PUBLIC_SITE_MODE=coming_soon`** | `preflight.ps1` PASS |
| 5 | Сборка | `.\scripts\deploy\build-release.ps1` | артефакт `artifacts/verithink-*.tar.gz` |
| 6 | Git | коммиты на ветке деплоя запушены | `git push` ok |

**7 обязательных секретов:** `PUBLIC_DOMAIN`, `VERITHINK_ADMIN_TOKEN`, `VERITHINK_API_KEY`, `VERITHINK_INTROSPECT_SECRET`, `VERITHINK_SECRET_KEY`, `VERITHINK_LICENSE_ADMIN_TOKEN`, `VERITHINK_ACCOUNT_ADMIN_TOKEN`.

---

## На сервере (~45 мин)

| # | Действие | Пример | OK если |
|---|----------|--------|---------|
| 7 | Клон / обновление | `cd /var/www/www-root/data/www/verifythink.com && bash scripts/deploy/update-from-git.sh` | репо на диске |
| 8 | Env | `cd /var/www/www-root/data/www/verifythink.com && cp .env.prod.example .env.prod` → заполнить, `chmod 600` | нет пустых REQUIRED |
| 9 | Docker | `cd /var/www/www-root/data/www/verifythink.com && bash scripts/deploy/update-from-git.sh` | контейнеры running |
| 10 | Порты | снаружи только **80/443** | ReasonService **не** торчит напрямую |
| 11 | Health | `curl -s https://YOUR_DOMAIN/healthz` | `status=ok` |
| 12 | Admin | `https://aiaivt.YOUR_DOMAIN/<ADMIN_SECRET>/admin.html` + `X-Admin-Token` | не 401/404 |

Опционально: почта Brevo (`docs/BREVO_MAIL_RU.md`, `VERITHINK_MAIL_*`), lava/crypto — иначе magic link и оплата будут **503** (это ожидаемо без настройки).

---

## После деплоя — smoke с ПК (~15 мин)

```powershell
.\scripts\verify-prod-deploy.ps1 -Domain YOUR_DOMAIN
.\scripts\verify-prod-deploy.ps1 -Domain YOUR_DOMAIN -AdminToken $env:VERITHINK_ADMIN_TOKEN
```

| Страница | URL | Проверить |
|----------|-----|-----------|
| Landing | `https://YOUR_DOMAIN/` | RU/EN, статус local vs prod |
| Marketplace | `/marketplace.html` | каталог открывается |
| Reviews demo | `/reviews.html` | форма + список |
| Help | `/help.html` | ссылки на docs |
| VT doc | `/docs/public/CURSOR_MCP_GUIDE_RU.md` | **200**, не 404 |

---

## Настроить OCD / VeriThink на ПК (5 мин)

### Вариант A — правка `profile.json` вручную

Откройте `.verithink/testing/profile.json` и задайте:

```json
"environments": {
  "staging": {
    "baseUrl": "https://YOUR_DOMAIN",
    "healthUrl": "/healthz"
  }
}
```

Образец целиком: [profile.staging.example.json](../../.verithink/testing/profile.staging.example.json).

### Вариант B — скрипт

```powershell
.\scripts\apply-profile-staging.ps1 -Domain YOUR_DOMAIN
```

### Сравнение local vs prod

```powershell
$env:VERITHINK_STAGING_BASE_URL = 'https://YOUR_DOMAIN'   # альтернатива profile.json
.\scripts\run-ocd-test-compare.ps1 -Json
```

Ожидание: `staging` не `skipped`, health **ok**.

---

## Cursor + MCP после деплоя

| Сценарий | Что прописать |
|----------|----------------|
| Разработка на ПК | `VERITHINK_SERVICE_URL=http://127.0.0.1:8787` (как сейчас) |
| Команда / прод MCP | Hosted: `https://mcp.verifythink.com/mcp` + Bearer `vt_…` — [HOSTED_MCP.md](../HOSTED_MCP.md) |
| MCP на том же VPS | `VERITHINK_SERVICE_URL=http://127.0.0.1:8787` внутри сервера, Caddy снаружи |

**Не оставляйте** в Cursor `127.0.0.1:8787` если ReasonService крутится только на VPS.

---

## Логи и VT (что работает)

| Задача | Как |
|--------|-----|
| Логи MCP на **вашем ПК** | `reason_log_query` / `reason_diagnose` (локальный `%USERPROFILE%\.verithink\mcp.log`) |
| Логи browser-verify | `reason_test_logs` → `.artifacts/browser-verify/run.log` |
| Логи **на сервере** | SSH: `cd /var/www/www-root/data/www/verifythink.com && COMPOSE_PROJECT_NAME=verifythink docker compose -f docker-compose.prod.yml logs -f reasonservice` — VT **не** подключается по SSH сам |
| Deploy план | `reason_deploy_plan` + `reason_deploy_preflight` (чеклист, без секретов) |

Пути в `profile.json` → `logSources` — см. [profile.staging.example.json](../../.verithink/testing/profile.staging.example.json).

---

## Rollback (если что-то сломалось)

1. `cd /var/www/www-root/data/www/verifythink.com && COMPOSE_PROJECT_NAME=verifythink docker compose -f docker-compose.prod.yml down`
2. Вернуть предыдущий image/tag или `git checkout` предыдущего коммита
3. `cd /var/www/www-root/data/www/verifythink.com && bash scripts/deploy/update-from-git.sh`
4. Снова `verify-prod-deploy.ps1`

---

## Готово, когда

- [ ] `https://YOUR_DOMAIN/healthz` → ok  
- [ ] `verify-prod-deploy.ps1` → pass  
- [ ] `profile.json` staging URL заполнен  
- [ ] `run-ocd-test-compare.ps1` → staging не skipped  
- [ ] Reviews / landing / help открываются с интернета  
- [ ] Cursor: hosted MCP или осознанный local dev  
