Runbook
Перезапуск сервера¶
# Остановить (если запущен вручную)
# Ctrl+C или kill <pid>
# Проверить зависимости и поднять
cd onewallet_base_server && dart pub get
cd onewallet_base_server && dart bin/main.dart
При Docker-деплое: docker compose restart auth-center (или соответствующий сервис).
Wallet retry вручную¶
Если создание TigerBeetle-кошелька не завершилось (пользователь застрял без wallet_id), фоновый вызов PendingWalletCreationCall повторяется автоматически. Для принудительного запуска вручную:
-- Найти пользователей без wallet_id
SELECT u.id, u.email, up."userId"
FROM users u
JOIN user_profile up ON up."userId" = u.id
WHERE up."walletId" IS NULL
AND u.status = 'active';
Перезапуск сервера также перепланирует все FutureCall-и — они выполнятся в течение нескольких минут.
Unblock user¶
-- Разблокировать пользователя
UPDATE users SET status = 'active' WHERE id = <user_id>;
-- Зафиксировать в audit_log
INSERT INTO audit_log ("userId", action, "performedBy", details)
VALUES (<user_id>, 'user_unblock', 'operator', '{"reason": "manual"}');
Допустимые статусы: active, archived, deleted, registration_in_progress, registration_expired, kyc_pending.
Missing DB views (known issue)¶
Симптом: 10 integration-тестов падают с ошибкой об отсутствующей таблице/view.
Причина: Views v_tx_history и v_user_tb_accounts существуют в production-БД, но отсутствуют в тестовом контейнере (инициализируется только через Serverpod-миграции, которые views не создают).
Fix: добавить CREATE VIEW в test setup или в отдельный seed-скрипт для тестового контейнера.
-- Добавить в test/integration/test_utils/db_setup.sql (или аналог):
CREATE OR REPLACE VIEW v_tx_history AS ...;
CREATE OR REPLACE VIEW v_user_tb_accounts AS ...;
Подробнее: memory-файл project_missing_db_views_techdebt.md.
PII Key Rotation [PLAN]¶
Runbook не написан. Автоматической ротации нет. При ротации piiEncryptionKey требуется:
- Перешифровать все PII-поля в user_profile (телефон, nationalId)
- Обновить пепперы (piiPhoneHashPepper, piiNatIdHashPepper) и пересчитать хэши для поиска
- Сохранить старый ключ на период перехода
Проверка здоровья¶
При проблемах с сервером проверить по порядку:
| Компонент | Как проверить |
|---|---|
| PostgreSQL | psql -h 10.10.10.19 -U <user> -c "\l" |
| Redis | redis-cli -h 10.10.10.19 ping |
| Payment Manager | curl http://localhost:3000/health (или /api/pm/health через nginx) |
| Auth Center API | curl http://localhost:8080/ |
| Auth Center Web | curl http://localhost:8082/ |
| Notifications Redis | Проверить notificationsRedisUrl в passwords.yaml; XLEN stream.notifications.jobs |
| KYC Service | curl http://10.10.10.19:3003/health |
Логи сервера: Serverpod пишет в stdout; в Docker — docker logs <container>.