Нестыковки деплоя

Статус на 2026-04-22 22:00

  • Customer Service задеплоен (:3014, customer_db создана, добавлен в compose/nginx/deploy-all SKILL, контейнер healthy). Конфликт портов разрулён переносом на 3014.
  • nginx fallback services[] — обновлён под 10 живых контейнеров.
  • pos-bff — оставлен в compose по решению пользователя (замороженные договорённости с PayKeeper, но пока продолжаем).
  • ⏳ Остальные 🟡 нестыковки ниже — не исправлены.

Сверка трёх слоёв: код микросервисов ↔ erp-infrastructure/docker-compose.yml + nginx ↔ состояние на VPS ↔ маппинг в .claude/skills/deploy-all/SKILL.md.

Легенда:

  • 🔴 блокер (что-то не работает или скоро сломается)
  • 🟡 рассинхрон (нужно привести в порядок, но не критично сейчас)
  • ⚪ устаревшая запись

✅ Customer Service отсутствует везде — РЕШЕНО

СлойБылоСтало
Кодport: ${PORT:3013} (конфликт)port: ${PORT:3014}
docker-compose.ymlблок отсутствовалдобавлен (3014:3014) ✅
envs/ на VPSнетcustomer-service.env создан ✅
БДcustomer_db не былосоздана в postgres ✅
deploy-all SKILL mappingнет строкидобавлена ✅
docker compose psконтейнера нетerp-customer-service Up healthy

По пути пофикшены 3 pre-existing баги компиляции: лишний } в PiiAnonymizer.java, неверный пакет импорта JsonRawValue, package-private loadActiveInFranchise в CustomerGroupService.

Nginx proxy_pass для /api/customers/ не добавлен — admin-bff ходит через внутреннюю сеть. Если понадобится прямой публичный доступ — добавим.


⏸ pos-bff деплоится, но репо заморожен — ОСТАВЛЕНО

Сознательное решение пользователя: POS-касса «заморожена на уровне договорённостей с PayKeeper», но пока продолжаем делать. Убирать pos-bff из compose/nginx — по команде.


✅ nginx default fallback устарел — РЕШЕНО

services[] в / response обновлён до 10 текущих сервисов (8 бэкендов + 2 BFF). Ручная синхронизация — при добавлении сервисов нужно править здесь же.


🟡 Не все бэкенд-сервисы проксированы через nginx наружу

Nginx имеет proxy_pass для:

  • /api/users/ → user-service ✅
  • /api/stores/ → store-service ✅
  • /api/v1/admin/ → admin-bff ✅
  • /admin/ + /assets/ → admin-bff (web) ✅
  • /pos/ → pos-bff ✅
  • /s3/ → MinIO ✅

Снаружи НЕ доступны: auth-service, catalog-service, order-service, warehouse-service, aggregator-service (и несозданный customer-service).

Это может быть by design (BFF-паттерн — только админ-BFF наружу, бэкенды через внутреннюю сеть). Но тогда:

  • /api/users/ и /api/stores/нелогично: остальные бэкенды так же должны быть скрыты.
  • Возможно это остаток старого времени, когда BFF ещё не было.

🟡 admin-bff не имеет проброса порта

admin-bff:
  container_name: erp-admin-bff
  # нет секции `ports:`

Контейнер слушает 3020/tcp только внутри docker-сети. Наружу попадает только через nginx (proxy_pass http://erp-admin-bff:3020). Это корректно для продакшена, но локально отладить без ports: "3020:3020" нельзя.


🟡 auth-service: docs vs реальность

  • ADR-001 (принят): «локальный JWT-фильтр вместо Auth Service на этапе MVP»
  • Overview: status: in_progress
  • Фактически: erp-auth-service задеплоен и healthy, в коде реализованы /login, /pin-login, /refresh, /logout, /forgot-password, /reset-password, /me, /internal/auth/validate
  • То есть Auth Service существует и работает, ADR-001 описывает другой слой (fallback JWT-валидация в каждом микросервисе, независимо от Auth Service)

Нужно либо уточнить Overview что Auth Service «задеплоен и используется для логина», либо обновить ADR-001 что текущая архитектура — Auth Service + локальный fallback-фильтр одновременно.


🟡 Пробелы в deploy-all SKILL.md

Маппинг в .claude/skills/deploy-all/SKILL.md содержит 9 сервисов: auth/user/store/catalog/order/warehouse/aggregator/admin-bff/pos-bff.

Не упоминает:

  • customer-service (нужно добавить когда появится в compose)
  • Будущие paykeeper-adapter, loyalty-service, finance-service, notification-service, report-service, integration-service, payment-service (планируются, не срочно)

🟡 application.yml: параметризация порта

Конвенция: server.port: ${PORT:NNNN} — порт через env. У customer-service defаult=3013, у aggregator=3013 (проверить у остальных).

Если два сервиса имеют один default, при подъёме локально без env переменных — будет конфликт. В compose env-файл переопределяет.


⚪ Planned сервисы в Repositories.md, которых нет в коде

07-Tasks/Repositories.md перечисляет будущие сервисы (Payment :3006, Loyalty :3007, Finance :3009, Notification :3010, Report :3011, Integration :3012). Они не в compose и не в коде — это нормально (пока planned).

Не в списке Repositories.md, но упомянут в Deep research бэклога PK — апрель 2026:

  • paykeeper-adapter (новый сервис, ACL-слой для интеграции с PayKeeper). Репо пока нет.

Сводная таблица: что должно быть на VPS vs фактически

ОжидаетсяФактDelta
erp-postgres✅ Up 11d healthy
erp-redis✅ Up 11d healthy
erp-kafka✅ Up 42m healthyрестарт 42 мин назад
erp-minio✅ Up 11d healthy
erp-nginx✅ Up 11d healthy
erp-auth-service✅ Up 5h healthy
erp-user-service✅ Up 5h healthy
erp-store-service✅ Up 5h healthy
erp-catalog-service✅ Up 5h healthy
erp-order-service✅ Up 5h healthy
erp-warehouse-service✅ Up 5h healthy
erp-aggregator-service✅ Up 2d healthyдавно не передеплаивали
erp-admin-bff✅ Up 1h healthyпоследний рестайл-деплой
erp-pos-bff✅ Up 5h healthyвсё ещё живой, хотя POS frozen
erp-customer-service✅ Up healthy (только что)127.0.0.1:3014, Kafka consumer order.completed активен

Customer Service — деплой сделан 2026-04-22

Выполнено в одном проходе:

  1. application.yml: port: ${PORT:3014} — коммит в erp-customer-service
  2. customer_db создана в postgres на VPS
  3. envs/customer-service.env создан
  4. ✅ Блок customer-service: добавлен в docker-compose.yml
  5. ✅ Строка добавлена в .claude/skills/deploy-all/SKILL.md
  6. ✅ Репо склонирован на VPS (HTTPS с токеном)
  7. ✅ 3 compile-fix в customer-service (PiiAnonymizer, JsonRawValue, loadActiveInFranchise)
  8. ✅ Docker build + up → контейнер healthy