bf4ed65d0e
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
84 lines
5.6 KiB
Markdown
84 lines
5.6 KiB
Markdown
# Лидерра — тест-сервер (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 <repo> 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 <email> --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 <id>`.
|
||
|
||
## После теста — обязательно
|
||
|
||
- **Отозвать OAuth-токен Yandex Cloud** (Яндекс ID → Безопасность → сторонние приложения).
|
||
- При переходе к прод-конфигу: убрать `SAAS_ADMIN_TEST_BYPASS`, вернуть `crm_app_user` (после auth-rework).
|