Это CRM-система, разработанная на Django, для автоматизации процессов привлечения клиентов, управления жизненным циклом лидов и анализа эффективности рекламных кампаний. Проект построен с использованием современных лучших практик, уделяя особое внимание качеству кода, безопасности, производительности и надежности.
- Управление услугами: Создание, редактирование и архивация услуг, предоставляемых компанией.
- Рекламные кампании: Управление рекламными кампаниями, их бюджетами и связью с услугами.
- Управление лидами (Leads): Полный жизненный цикл лида со статусами ("Новый", "В работе", "Конвертирован", "Потерян").
- Управление контрактами: Создание и ведение контрактов с клиентами.
- Управление активными клиентами: Отдельный реестр для клиентов с действующими контрактами.
- Динамический дашборд: Главная страница с ключевыми KPI и интерактивным графиком привлечения лидов за последние 30 дней (Chart.js).
- Общая статистика кампаний: Сводный отчет по всем кампаниям с расчетом ROI (рентабельности), количества лидов и клиентов.
- Детальная статистика кампании: "Проваливание" в отчет по конкретной кампании со списком всех ее лидов, их статусами и суммами контрактов.
- Фильтрация и сортировка: Все списки в системе поддерживают гибкую фильтрацию и сортировку по ключевым параметрам.
- Ролевая модель: Четкое разделение прав доступа для ролей: Администратор, Маркетолог, Оператор, Менеджер.
- Объектные права доступа (Object-Level Permissions): Реализована логика, при которой Менеджеры видят и могут управлять только своими лидами (
django-guardian). - Защита целостности данных: Реализована система "мягкого удаления" и защита от физического удаления ключевых исторических данных с помощью
ProtectedErrorи сигналов Django. - Защита от брутфорса: Интегрирована система
django-axesдля автоматической блокировки IP-адресов и пользователей после нескольких неудачных попыток входа. - Rate Limiting: Nginx ограничивает частоту запросов для защиты от подбора данных.
- Non-root контейнер: Основное приложение работает от пользователя с ограниченными правами.
- Защита от вредоносных файлов: Все загружаемые файлы (фото профилей, документы контрактов) автоматически проверяются антивирусом ClamAV.
- Production-Ready Security: Настроены все необходимые Security Headers (HSTS, X-Frame-Options и др.) и редирект на HTTPS.
- Контейнеризация: Весь проект и его сервисы (PostgreSQL, Redis, Celery, Nginx, ClamAV, Prometheus, Grafana) полностью обернуты в Docker и оркестрируются с помощью Docker Compose.
- Профессиональная среда разработки: Управление зависимостями осуществляется через PDM. Настроены скрипты для автоматизации всех рутинных задач (миграции, запуск проверок, наполнение БД).
- CI/CD: Настроен пайплайн на GitHub Actions, который автоматически запускает линтеры, проверку типов и тесты.
- Асинхронные задачи: Интегрирован Celery с Redis в качестве брокера для выполнения фоновых задач (отправка email-уведомлений).
- Проактивные уведомления: Настроены периодические задачи (Celery Beat) для отправки менеджерам email-уведомлений об истекающих контрактах.
- Мониторинг метрик: Интегрирован стек Prometheus + Grafana для сбора и визуализации метрик производительности приложения в реальном времени.
- Мониторинг ошибок: Интеграция с Sentry (опционально, через
SENTRY_DSN) для отслеживания ошибок. - Качество кода: Код соответствует стандартам PEP 8 (проверяется
Ruff), имеет аннотации типов (проверяетсяMypy), а качество автоматически поддерживается с помощьюpre-commitхуков.
- Бэкенд: Python, Django
- База данных: PostgreSQL
- Кэш и брокер сообщений: Redis
- Асинхронные задачи: Celery
- Веб-сервер: Gunicorn + Nginx
- Контейнеризация: Docker, Docker Compose
- Управление зависимостями: PDM
- Мониторинг: Prometheus, Grafana, Sentry SDK
- CI/CD: GitHub Actions
- Качество кода: Ruff, Mypy, Pytest, pre-commit
- Фронтенд: HTML, CSS, Bootstrap, JavaScript, Chart.js, Flatpickr
Проект разработан с учетом лучших практик и принципов для создания надежного и поддерживаемого ПО:
- SOLID, DRY, KISS, YAGNI: Код структурирован для минимизации дублирования, простоты и следования принципу единственной ответственности.
- Паттерн "Селекторы" (Selectors): Сложная логика запросов к базе данных вынесена из представлений (
View) в специальные функции-селекторы, что делаетView"тонкими" и упрощает тестирование. - Сигналы Django: Используются для автоматизации бизнес-процессов, таких как назначение прав доступа и отправка уведомлений при создании объектов.
Это самый простой и надежный способ запустить проект со всей инфраструктурой.
Предварительные требования:
Docker
Запуск:
-
Клонируйте репозиторий:
git clone https://github.com/Nicksok2413/CRM.git cd CRM -
Создайте и настройте
.envфайл: Скопируйте пример и заполните его вашими данными.cp .env.example .env
Важно:
- SECRET_KEY: Сгенерируйте новый секретный ключ.
- DEBUG: True для разработки, False для продакшен.
Задайте учетные данные для администратора, который будет создан автоматически.
- ADMIN_USERNAME: Имя пользователя (логин).
- ADMIN_PASSWORD: Пароль (используйте сложный пароль!).
- ADMIN_EMAIL: Email.
Задайте учетные для PostgreSQL:
- DB_NAME: Название базы данных.
- DB_USER: Имя пользователя базы данных.
- DB_PASSWORD: Пароль пользователя базы данных (используйте сложный пароль!).
Можно задать настройки SMTP-сервера для Email-уведомлений: смотрите секцию Email & notification settings.
Можно задать логин и пароль для Grafana UI: смотрите секцию Grafana settings.
Можно подключить Sentry (опционально). Задайте SENTRY_DSN в секции Sentry settings (Optional).
-
Соберите и запустите контейнеры:
docker compose up -d --build
docker compose up -d
--build: Необходимо выполнить при самом первом запуске или после внесения изменений в проекте.-d: Запускает контейнеры в фоновом режиме (detached mode).
Внимание! Первый запуск может занять несколько минут.
Что происходит при первом запуске автоматически:
- Применяются миграции базы данных.
- Создается суперпользователь с данными из
.envфайла. - Создается группы (роли) со всеми необходимыми правами доступа.
-
Приложение будет доступно по адресу:
https://127.0.0.1. Так как используется самоподписанный SSL-сертификат, браузер выдаст предупреждение — его нужно принять.
Предварительные требования:
- Python 3.12+
- PDM
- PostgreSQL
- Redis
- ClamAV
Установка:
- Клонируйте репозиторий и перейдите в него.
- Настройте
.envфайл (см. инструкцию выше). - Установите зависимости с помощью PDM:
pdm install
- Примените миграции:
pdm run migrate
- Запустите сервер разработки:
pdm run runserver
Все рутинные задачи автоматизированы с помощью скриптов в pyproject.toml.
| Команда | Описание |
|---|---|
pdm run run |
Запустить сервер разработки Django. |
pdm run celery-worker |
Запустить Celery worker для обработки фоновых задач. |
pdm run celery-beat |
Запустить планировщик Celery Beat для периодических задач. |
pdm run clear-migrations |
Очистка всех миграций. |
pdm run create-data-migration |
Создание кастомной миграции (суперпользователь + роли). |
pdm run migrate |
Применить миграции к базе данных. |
pdm run makemigrations |
Сгенерировать новые файлы миграций на основе изменений в моделях. |
pdm run populate |
Наполнить базу данных тестовыми данными (--count для количества). |
pdm run lint |
Запустить линтер Ruff. |
pdm run format |
Отформатировать код с помощью Ruff. |
pdm run types |
Проверить статические типы с помощью Mypy. |
pdm run test |
Запустить тесты с помощью Pytest. |
pdm run check |
Запустить все проверки качества кода последовательно. |
Проект имеет модульную структуру. Вся основная бизнес-логика разделена на Django-приложения внутри директории apps/:
apps/common: Общий, переиспользуемый код (модели, миксины, валидаторы).apps/users: Кастомная модельUser, управление профилями и аутентификация.apps/products: Управление услугами.apps/advertisements: Управление рекламными кампаниями и их статистика.apps/leads: Управление лидами и их жизненным циклом.apps/contracts: Управление контрактами.apps/customers: Управление активными клиентами и процесс активации.