Files
portal/docs/deploy/test-server-runbook.md
T
2026-05-21 11:42:25 +03:00

4.4 KiB
Raw Blame History

Лидерра — тест-сервер (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_admin_user (BYPASSRLS), а не crm_app_user. Причина: login делает глобальный User::where('email') без tenant-контекста — под RLS-ролью падает (см. спека §5.4). Следствие: изоляция компаний на уровне БД в тесте НЕ enforced (как на dev-суперюзере). Для прода нужно переработать auth-flow (pre-auth lookup через BYPASSRLS-подключение / per-subdomain login), тогда вернуть crm_app_user.
  • SAAS_ADMIN_TEST_BYPASS=true — временный флаг, открывает /admin/* без Yandex SSO. Убрать после SSO (Б-1).
  • Почта = log (письма в файл). APP_DEBUG=false, APP_ENV=production.
  • Установлены dev-зависимости (faker нужен для DemoSeeder).

Обновить версию

На 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 (после покупки домена)

  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).