- Python 86.8%
- HTML 12.2%
- Shell 0.5%
- JavaScript 0.2%
- Makefile 0.2%
- Other 0.1%
| .forgejo/workflows | ||
| docker/postgres | ||
| docs | ||
| scripts | ||
| src | ||
| traefik_dynamic | ||
| .env.example | ||
| .gitignore | ||
| .pre-commit-config.yaml | ||
| CHANGELOG.md | ||
| deploy.sh | ||
| docker-compose.prod.env.example | ||
| docker-compose.prod.yml | ||
| docker-compose.yml | ||
| Dockerfile | ||
| Makefile | ||
| pyproject.toml | ||
| README.md | ||
| requirements.txt | ||
| restart.sh | ||
| VERSION | ||
MP Tool v2026.7.27
Платформа для управления маркетплейсами: сбор данных из Wildberries, Ozon, Яндекс.Маркет, управленческий учёт и аналитика.
Возможности
- 4 направления: Wildberries (заказы + продажи + реализации + карточки + остатки + реклама), Ozon, Яндекс.Маркет, финансы
- Умная синхронизация: probe → retro → steady, раздельные gates (statistics ≠ finance), rate-limit Redis, per-key dedup
- Финансовый учёт: доходы, расходы, комиссии, налоги, отчёты реализации по всем маркетплейсам
- Авто-валидация ключей: JWT-декодирование + seller-info при добавлении ключа WB
- Многопользовательский: организации, роли (владелец/админ/менеджер/аналитик/наблюдатель)
- Асинхронный: Django 6 + Gunicorn + Uvicorn + Celery + RabbitMQ + Redis (2 очереди: celery + advert)
- Дашборд v1/v2: 12 графиков, фильтры, PDF-экспорт. v2 на агрегированных данных — в 200× быстрее
- DailySummary: агрегированная таблица заказов/продаж (organization, nm_id, date, hour) — 1 запрос вместо 180+
- 27 тестов (✅ все проходят), CI/CD через Forgejo Actions
Быстрый старт
# 1. Клонировать
git clone https://git.isdata.tech/ciger3a/mp-tool.git
cd mp-tool
# 2. Установка зависимостей
make install
# или: pip install -r requirements.txt
# 3. Настройка окружения
cp .env.example .env
# отредактировать .env под свою среду
# 4. Запустить Docker Compose
docker compose up -d
# 5. Применить миграции
docker compose exec web python manage.py migrate
# 6. Создать суперпользователя
docker compose exec web python manage.py createsuperuser
# 7. Настроить расписание Celery Beat
docker compose exec web python manage.py setup_schedule
Makefile команды
make test # Запустить тесты
make lint # Проверить код
make migrate # Применить миграции
make shell # Django shell
make up # Docker Compose up
make down # Docker Compose down
make rebuild # Пересобрать и запустить
make coverage # Отчёт покрытия тестами
Модули
accounts/ — Ядро платформы (Workspace, Policy, Audit, Organization)
wildberries/ — WB API (заказы, продажи, финансы, карточки, остатки, реклама)
ozon/ — Ozon API (заказы v3, финансы v1, начисления)
yandex_market/ — Яндекс.Маркет (заказы, API-ключи)
finance/ — Управленский учёт (транзакции, отчёты, дашборд)
Архитектура
Слойная модель доступа
Workspace → ResourceGroup → Resource → Policy → Audit
└→ WorkspaceModule (интеграции)
└→ WorkspaceMembership (роли)
└→ ServiceAccount (API-ключи)
Workspace — корневая сущность. Всё в MP Tool происходит внутри рабочего пространства (изолированная среда). Каждая организация имеет свой Workspace.
User — кастомный AbstractUser. Связан с Organization через Membership (legacy), с Workspace через WorkspaceMembership.
WorkspaceMembership — пять ролей: owner (полный доступ), admin (управление), manager (управление ресурсами), analyst (доступ ко всем данным), viewer (только просмотр).
ResourceGroup — иерархия ресурсов через Nested Sets. Позволяет группировать данные (по брендам, отделам, проектам) и применять политики доступа на уровне группы.
Resource — единый реестр через GenericForeignKey. Любая бизнес-сущность (Order, Sale, API-ключ) регистрируется в Resource при сохранении.
Policy — RBAC + ABAC. Комбинация subject (кто), object (к чему), action (что), effect (разрешить/запретить). По умолчанию deny. Контекстные условия: время, IP, день недели.
AuditEntry — полный лог действий: create, update, delete, sync, export, login. Сохраняет before/after state, контекст запроса (IP, User-Agent).
WorkspaceModule — модульная система: wildberries, ozon, yandex_market, finance. Определяет активные интеграции для workspace.
ServiceAccount — API-токены для внешних систем с ограниченным scope и rate-limit.
Organization — legacy-модель для обратной совместимости (Phase 1). В будущем заменяется на Workspace. Сейчас связь 1:1 через workspace.
ResourceVersion — версионирование. Снапшоты каждой сущности при изменении для просмотра истории.
Три фазы развития
- Phase 1 (сейчас): Organization + Workspace, дублирование ролей через Membership/WorkspaceMembership
- Phase 2 (в планах): полная миграция на Workspace, удаление Organization
- Phase 3: включение Policy evaluation + Audit middleware — ABAC/RBAC с логированием каждого действия
┌─────────────┐ ┌──────────┐ ┌───────────────┐
│ Traefik │────▶│ Web │────▶│ PostgreSQL 18 │
│ (HTTPS/L7) │ │ Django 6 │ │ (192.168.1.41)│
└─────────────┘ └────┬─────┘ └───────────────┘
│
┌─────────┴──────────┐
│ │
┌──────▼──────┐ ┌───────▼───────┐
│ RabbitMQ │ │ Redis 8 │
│ (брокер) │ │ (кэш/результат)│
└──────┬───────┘ └───────────────┘
│
┌──────▼────────┐
│ Celery Worker │
│ (4 воркера) │
└───────────────┘
Стек
| Компонент | Технология |
|---|---|
| Backend | Python 3.12, Django 6.0.5, Celery 5.6.3 |
| Server | Gunicorn 26.0.0 + Uvicorn 0.46.0 (ASGI) |
| Frontend | Unfold (Tailwind), Chart.js, Playwright (PDF) |
| БД | PostgreSQL 18.3 (выделенный сервер 192.168.1.41) |
| Брокер | RabbitMQ 4.0 Management |
| Кэш | Redis 8 (AOF) |
| Прокси | Traefik v3.7.1 (авто HTTPS, Let's Encrypt) |
| S3 | MinIO (https://minio.isdata.tech) — карточки товаров |
| Git | Forgejo (https://git.isdata.tech) |
| CI/CD | Forgejo Actions |
| Контейнеры | Docker Compose (8 сервисов) |
Версии
| Версия | Дата | Описание |
|---|---|---|
| v2026.6.10 | 16.06.2026 | Health Dashboard, мониторинг, алерты Telegram, PG tuning |
| v2026.6.8 | 15.06.2026 | Разделение воркеров, мониторинг очередей |
| v2026.6.7 | 09.06.2026 | OzonOrder unique constraint, стабильность |
| v2026.6.6 | 08.06.2026 | OzonCard, OzonNomenclature, per-product реклама |
| v2026.6.5 | 08.06.2026 | Ozon orders sync, PDF экспорт (только светлая), очередь ozon |
| v2026.6.4 | 04.06.2026 | OzonProduct (фото, себестоимость, привязка), Ozon API v3, график отмен |
| v2026.6.3 | 02.06.2026 | Математика прибыли, per-product реклама, AJAX-фильтры |
| v2026.6.2 | 02.06.2026 | FinanceSummary, очереди, стабильность |
| v2026.5.17 | 29.05.2026 | Дашборды: рефакторинг, Воронка реализации, фильтры |
| v2026.5.16 | 29.05.2026 | Надёжность синхронизации, защита от переполнения очереди |
| v2026.5.15 | 26.05.2026 | Production health, чистка git, дедупликация расписаний |
| v2026.5.14 | 22.05.2026 | Health worker, DS автосинхронизация, бэкап PG |
| v2026.5.13 | 22.05.2026 | Дашборд v2, баги фикс |
| v2026.5.12 | 22.05.2026 | DailySummary + дашборд v2 |
| v2026.5.11 | 22.05.2026 | Баги фикс (WB crypto, Ozon finance, миграции) |
| v2026.5.10 | 22.05.2026 | Ozon сайдбар, правки |
| v2026.5.9 | 21.05.2026 | Ozon интеграция, фильтры |
| v2026.5.8 | 20.05.2026 | Экспорт рекламы, дашборд |
| v2026.5.7 | 19.05.2026 | PDF-экспорт, графики |
| v2026.5.6 | 19.05.2026 | 8 графиков дашборда, динамические фильтры |
| v2026.5.5 | 19.05.2026 | Дашборд v1, фильтры AJAX |
| v2026.5.4 | 18.05.2026 | WB реклама, Ozon финансы |
| v2026.5.3 | 17.05.2026 | Миграция на PostgreSQL 18.3 |
| v2026.5.1 | 16.05.2026 | Рефакторинг, очистка проекта |
| v0.27.x | 12-15.05.2026 | Ozon заказы, остатки, баги фикс |
| v0.26.x | 10-11.05.2026 | Celery wiring, beat-задачи |
| v0.25.x | 09.05.2026 | Логи, докплой |
| v0.24.x | 08.05.2026 | P&L отчёты |
| v0.23.x | 07.05.2026 | SalesReportDetail фильтры, экспорт |
| v0.22.x | 06.05.2026 | Rate-limiter, ретро-синхронизация, Crypto |
| v0.21.x | 05.05.2026 | Unfold, кастомный admin |
| v0.20.x | 04.05.2026 | Celery, синхронизация WB |
| v0.19.x | 03.05.2026 | Многопользовательность |
Деплой
# Prod-сервер (u24-sr1-soft)
ssh alex@192.168.1.40
# Скопировать обновления
docker compose -f /opt/mp-tool/docker-compose.prod.yml cp ...
# Рестарт сервиса
docker compose -f /opt/mp-tool/docker-compose.prod.yml restart web