bf4ed65d0e
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5.6 KiB
5.6 KiB
Лидерра — тест-сервер (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(tenantdemo, 3 проекта, демо-сделки). - SSH:
ssh -i ~/.ssh/liderra_deploy ubuntu@111.88.246.137(ключ на dev-машине; пароль входа отключён). - YC: облако
cloud-sasha261185, каталогdefault, VMliderra-test(ru-central1-a, 2vCPU/2GB/20%), SGliderra-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 в middlewareEnsureSaasAdmin) — отдельная доработка. 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-машине:
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
На сервере:
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 (после покупки домена)
- DNS: A-запись
test.<домен>(и/илиdemo.<домен>для subdomain-tenant) →111.88.246.137. - На сервере: в
/etc/nginx/sites-available/liderraзаменитьserver_name _;на домен,nginx -t && systemctl reload nginx. sudo certbot --nginx -d test.<домен> --non-interactive --agree-tos -m <email> --redirect.- В
.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).