# Лидерра — тест-сервер (Yandex Cloud) — runbook **Создан:** 2026-05-21. Тестовое окружение для ручной проверки (заказчик + Claude). Не продакшен. Спека: `docs/superpowers/specs/2026-05-21-test-deploy-yandex-cloud-design.md`. План: `docs/superpowers/plans/2026-05-21-test-deploy-yandex-cloud.md`. ## Доступ - **URL (HTTP, временно):** `http://111.88.246.137` — статический IP YC. - **HTTPS / домен:** добавляется после покупки домена (см. «Включить HTTPS»). - **Дверь сайта (HTTP Basic Auth):** логин `liderra` — пароль в `/home/ubuntu/liderra-secrets.txt` на сервере (ключ `basic_auth`). - **Демо-вход в портал:** `admin@demo.local` / `password` (tenant `demo`, 3 проекта, демо-сделки). - **SSH:** `ssh -i ~/.ssh/liderra_deploy ubuntu@111.88.246.137` (ключ на dev-машине; пароль входа отключён). - **YC:** облако `cloud-sasha261185`, каталог `default`, VM `liderra-test` (ru-central1-a, 2vCPU/2GB/20%), SG `liderra-test-sg` (22/80/443). ## Состав - Ubuntu 24.04: nginx (Basic Auth, webhook `/api/webhook/*` без auth) → PHP-FPM 8.3 → Laravel. - PostgreSQL 16 (БД `liderra`), Redis (sessions+cache+queue, predis). - Код в `/var/www/liderra/app`; фронтенд `public/build` (собирается на dev, заливается scp). - Службы: `liderra-queue.service` (queue worker, systemd, enabled) + cron `/etc/cron.d/liderra-scheduler` (schedule:run). Все автозапускаются после ребута. ## Важные отклонения от прод-дизайна (на решение позже) - **DB-роль приложения = `crm_app_user` (RLS включена)** — изоляция бизнес-данных между клиентами **работает** (deals/projects/billing/… строгие политики). Чтобы вход работал под строгой ролью, RLS-политики на таблицах `users` + `auth_log` сделаны «дружелюбными ко входу»: пропускают запрос, когда tenant-контекст ещё не установлен (auth/login), и фильтруют по тенанту после. Это server-only правка политик (не в schema.sql); для прода — кандидат в нормативную схему. - **Админка SaaS `/admin/*` под `crm_app_user` НЕ работает** (нет доступа к saas-таблицам — REVOKE). Для теста «от лица клиентов» не нужна. Понадобится — переключать admin-запросы на `crm_admin_user` (connection-switch в middleware `EnsureSaasAdmin`) — отдельная доработка. - **`SAAS_ADMIN_TEST_BYPASS=true`** — временный флаг (для будущей админки). Убрать после Yandex SSO (Б-1). - **Почта** = `log` (письма в файл). **APP_DEBUG=false**, **APP_ENV=production**. - Установлены dev-зависимости (faker нужен для сидов). ## Тестовые клиенты | Логин | Пароль | Компания | |---|---|---| | `admin@demo.local` | `password` | Demo (3 проекта + демо-сделки) | | `client1@liderra.test` | `password` | Компания 1 (2 проекта) | | `client2@liderra.test` | `password` | Компания 2 (2 проекта) | | `client3@liderra.test` | `password` | Компания 3 (2 проекта) | | `client4@liderra.test` | `password` | Компания 4 (2 проекта) | Изоляция проверена вживую: каждый видит только свои проекты (HTTP-логин + `/api/projects`). ## Обновить версию На dev-машине: ```powershell npm --prefix app run build git -C archive --format=tar HEAD app db -o $env:TEMP\liderra.tar scp -i ~/.ssh/liderra_deploy $env:TEMP\liderra.tar ubuntu@111.88.246.137:/tmp/ scp -i ~/.ssh/liderra_deploy -r app\public\build ubuntu@111.88.246.137:/tmp/build ``` На сервере: ```bash tar -xf /tmp/liderra.tar -C /var/www/liderra rm -rf /var/www/liderra/app/public/build && cp -r /tmp/build /var/www/liderra/app/public/build bash /var/www/liderra/redeploy.sh ``` ## Включить HTTPS (после покупки домена) 1. DNS: A-запись `test.<домен>` (и/или `demo.<домен>` для subdomain-tenant) → `111.88.246.137`. 2. На сервере: в `/etc/nginx/sites-available/liderra` заменить `server_name _;` на домен, `nginx -t && systemctl reload nginx`. 3. `sudo certbot --nginx -d test.<домен> --non-interactive --agree-tos -m --redirect`. 4. В `.env` обновить `APP_URL=https://test.<домен>`, затем `php artisan optimize`. ## Остановить / удалить (прекратить оплату) - Остановить VM: `yc compute instance stop liderra-test` (диск/IP сохраняются, мелкая плата). - Удалить совсем: `yc compute instance delete liderra-test` + `yc vpc address delete `. ## После теста — обязательно - **Отозвать OAuth-токен Yandex Cloud** (Яндекс ID → Безопасность → сторонние приложения). - При переходе к прод-конфигу: убрать `SAAS_ADMIN_TEST_BYPASS`, вернуть `crm_app_user` (после auth-rework).