G-SERVICE Docs
Архитектура ISP (OSS/BSS)

Локальная разработка

docker compose + bun dev + Turborepo — инфраструктура в Docker, приложения нативно с hot-reload

Архитектура

Dev:  docker compose up -d (инфра) + bun dev (приложения) → нативный HMR
Prod: GitLab CI → Docker → K3s → ArgoCD

Приложения запускаются нативно через bun dev (NestJS) и go run (Go). Инфраструктурные зависимости (PostgreSQL, RabbitMQ, Redis, FreeRADIUS, TimescaleDB, MinIO) запускаются в Docker через docker-compose.yml в корне репозитория.

Предварительные требования

  • Docker + Docker Compose
  • Bun 1.3+ (curl -fsSL https://bun.sh/install | bash)
  • Go 1.23+ (для Go-сервисов)
bun install   # зависимости (NestJS / frontend)

Быстрый старт

# 1. Инфраструктура
docker compose up -d

# 2. Приложения (frontend + docs)
bun dev

# 3. Go-сервисы (в отдельных терминалах)
cd apps/services/aaa-go && go run ./cmd/aaa/
cd apps/services/provisioning-go && go run ./cmd/provisioning/
cd apps/services/mediation-go && go run ./cmd/mediation/

Инфраструктурные сервисы (docker-compose.yml)

СервисПортНазначениеCredentials
PostgreSQL5432БД для BSS-сервисов (6 NestJS)postgres / postgres
PostgreSQL RADIUS5433БД для FreeRADIUS + AAA Serviceradius / radius
TimescaleDB5434БД для Mediation (time-series)mediation / mediation
FreeRADIUS1812/udpRADIUS Auth/Acct
RabbitMQ5672Брокер сообщений (AMQP)guest / guest
RabbitMQ UI15672Management UIguest / guest
Redis6379Кэш + BullMQ
MinIO9000/9001S3-совместимое хранилище (архив CDR)minioadmin / minioadmin

При первом запуске автоматически:

  • Создаются БД для каждого BSS-сервиса (scripts/init-databases.sql)
  • Применяются миграции FreeRADIUS (aaa-go/migrations/)
  • Применяются миграции TimescaleDB (mediation-go/migrations/)
  • Создаются S3-бакеты (mediation-archive, cdr-archive)

Приложения

ПриложениеURL / ПортТехнология
weblocalhost:3000Next.js
docslocalhost:3001Fumadocs
customer-corelocalhost:3010NestJS
product-cataloglocalhost:3011NestJS
billinglocalhost:3012NestJS
notificationlocalhost:3013NestJS
omslocalhost:3014NestJS
network-inventorylocalhost:3015NestJS
provisioning-golocalhost:8080Go
aaa-golocalhost:8081Go
mediation-golocalhost:8082Go

Turborepo запускает frontend-приложения параллельно. Turbopack обеспечивает мгновенный HMR.

Hot-reload

Редактируешь файл → Turbopack HMR → браузер (<50ms)
  • Изменения в apps/web/, apps/docs/ — мгновенный HMR через Turbopack
  • Изменения в packages/ — автоматически подхватываются через workspace-ссылки
  • Изменения в Go-сервисах — перезапуск go run (или использовать air для live reload)
  • bun.lock / package.json — перезапустить bun dev

Переменные окружения (Go-сервисы)

Go-сервисы конфигурируются через env-переменные. Defaults совпадают с docker-compose:

# aaa-go
DB_HOST=localhost DB_PORT=5433 DB_USER=radius DB_PASSWORD=radius DB_DATABASE=radius \
RADIUS_SECRET=testing123 RADIUS_COA_PORT=3799 \
go run ./cmd/aaa/

# provisioning-go
DB_HOST=localhost DB_PORT=5432 DB_USER=postgres DB_PASSWORD=postgres DB_DATABASE=provisioning_db \
RABBITMQ_URL=amqp://guest:guest@localhost:5672/ \
go run ./cmd/provisioning/

# mediation-go
DB_HOST=localhost DB_PORT=5434 DB_USER=mediation DB_PASSWORD=mediation DB_DATABASE=mediation \
RABBITMQ_URL=amqp://guest:guest@localhost:5672/ \
S3_ENDPOINT=http://localhost:9000 S3_ACCESS_KEY=minioadmin S3_SECRET_KEY=minioadmin \
go run ./cmd/mediation/

Docker-образы (production)

Multi-stage Dockerfiles в apps/*/Dockerfile (используются только в CI):

NestJS-сервисы:

pruner → turbo prune --docker

deps → bun install --frozen-lockfile (cached layer)

builder → turbo build

runner (node:22-alpine) → Next.js standalone / NestJS

Go-сервисы:

builder (golang:1.23-alpine) → go build -o /app

runner (gcr.io/distroless/static-debian12) → /app

Команды

docker compose up -d     # инфраструктура (PG, Redis, RabbitMQ, FreeRADIUS, MinIO)
docker compose down       # остановить инфраструктуру
docker compose logs -f    # логи инфраструктуры

bun dev                   # frontend-приложения с hot-reload
bun run build             # сборка всех приложений

helm template isp infra/chart/  # dry-run Helm-чарта

On this page