Полнофункциональный рекламный сервер для российского рынка с Web SDK, Backend API и двумя порталами управления.
Demo AdServer — это демонстрационный рекламный сервер, предназначенный для малого бизнеса и маркетологов в России. Проект включает три основных компонента:
| Компонент | Технологии | Описание |
|---|---|---|
| Web SDK | Vanilla JS, TypeScript | Лёгкий SDK (<5KB) для показа рекламы на сайтах издателей |
| Backend API | Go, PostgreSQL, Redis | Delivery API, Tracking API, Management API |
| Publisher Portal | Next.js 14, TypeScript | Портал для издателей — управление сайтами и статистика доходов |
| Advertiser Portal | Next.js 14, TypeScript | Портал для рекламодателей — создание кампаний и управление бюджетом |
┌─────────────────┐ ┌─────────────────┐
│ Advertiser │ │ Publisher │
│ Portal │ │ Portal │
│ (Next.js) │ │ (Next.js) │
└────────┬────────┘ └────────┬────────┘
│ │
│ Management API │
└───────────┬───────────┘
│
┌───────────▼───────────┐
│ Backend API (Go) │
│ │
│ • Delivery API │
│ • Tracking API │
│ • Management API │
└───────────┬───────────┘
│
┌───────────▼───────────┐
│ PostgreSQL + Redis │
└───────────────────────┘
│
┌───────────▼───────────┐
│ Publisher Sites │
│ (с Web SDK) │
└───────────────────────┘
- Мастер создания кампаний — 4-шаговый wizard с валидацией
- Загрузка баннеров — Drag & drop, HTML5, AMPHTML поддержка
- Таргетинг — География, устройства, время, категории сайтов
- Контроль бюджета — Hard caps, дневные лимиты, уведомления
- Статистика в реальном времени — Показы, клики, CTR, eCPM
- Управление сайтами — Добавление сайтов, создание рекламных мест
- Генерация кода — Готовый JavaScript код для интеграции
- Статистика доходов — Доходы по сайтам и периодам
- Real-time updates — Live счётчик показов и доходов
- Clean Architecture — Domain → Application → Infrastructure → Presentation
- Auto-moderation — Автоматическая проверка баннеров
- Graceful degradation — Работа при fallback на кэш
- Rate limiting — 100 req/min per IP (Redis)
- Go 1.21+
- Node.js 20+
- PostgreSQL 14+
- Redis 7+
cd backend
# Настройка БД
createdb adserver
psql adserver < migrations/schema.sql
# Конфигурация
export DB_HOST=localhost
export DB_PORT=5432
export DB_USER=postgres
export DB_PASSWORD=postgres
export DB_NAME=adserver
export REDIS_HOST=localhost
export REDIS_PORT=6379
# Запуск
go run cmd/server/main.goBackend запустится на http://localhost:8080
cd publisher-portal
npm install
npm run devДоступен на http://localhost:3001
cd advertiser-portal
npm install
npm run devДоступен на http://localhost:3002
GET /api/v1/delivery/{slot_id}
Возвращает рекламный креатив для показа на сайте издателя.
POST /api/v1/track/impression
POST /api/v1/track/click
Отслеживание показов и кликов.
GET /api/v1/campaigns
POST /api/v1/campaigns
GET /api/v1/campaigns/{id}
PUT /api/v1/campaigns/{id}
DELETE /api/v1/campaigns/{id}
demo-adserver/
├── backend/ # Go Backend API
│ ├── cmd/ # EntryPoint
│ ├── src/
│ │ ├── domain/ # Entities (Campaign, Banner, ...)
│ │ ├── application/ # Use cases, DTOs
│ │ ├── infrastructure/ # PostgreSQL, Redis
│ │ └── presentation/ # HTTP handlers
│ └── migrations/ # SQL миграции
│
├── publisher-portal/ # Next.js портал издателей
│ ├── app/ # App Router
│ ├── components/ # UI компоненты
│ └── lib/ # API клиенты, hooks
│
├── advertiser-portal/ # Next.js портал рекламодателей
│ ├── app/ # App Router
│ ├── components/ # UI компоненты
│ └── lib/ # API клиенты, hooks
│
└── docs/ # Документация
cd backend
go test ./...cd publisher-portal
npm test # Unit tests (Vitest)
npm run test:e2e # E2E tests (Playwright)cd advertiser-portal
npm test # Unit tests (Vitest)
npm run test:e2e # E2E tests (Playwright)Покрытие:
- Backend: ~88% (domain + application)
- Publisher Portal: 81%+
- Advertiser Portal: 73/73 tests passing
docker-compose up -dЗапустит:
- PostgreSQL на порту 5432
- Redis на порту 6379
- Backend на порту 8080
- Publisher Portal на порту 3001
- Advertiser Portal на порту 3002
MIT License — см. LICENSE
Demo AdServer для российского рынка