Skip to content

A lightweight CRM system tailored for small business client management and workflow tracking.

Notifications You must be signed in to change notification settings

Nicksok2413/CRM

Repository files navigation

CRM-система на Django

Django CI Python Version Django Version PostgreSQL Nginx Code style: ruff

Это CRM-система, разработанная на Django, для автоматизации процессов привлечения клиентов, управления жизненным циклом лидов и анализа эффективности рекламных кампаний. Проект построен с использованием современных лучших практик, уделяя особое внимание качеству кода, безопасности, производительности и надежности.

🚀 Ключевые возможности

CRM

  • Управление услугами: Создание, редактирование и архивация услуг, предоставляемых компанией.
  • Рекламные кампании: Управление рекламными кампаниями, их бюджетами и связью с услугами.
  • Управление лидами (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.

⚙️ Архитектура и DevOps

  • Контейнеризация: Весь проект и его сервисы (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

Это самый простой и надежный способ запустить проект со всей инфраструктурой.

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

  • Docker

Запуск:

  1. Клонируйте репозиторий:

    git clone https://github.com/Nicksok2413/CRM.git
    cd CRM
  2. Создайте и настройте .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).

  3. Соберите и запустите контейнеры:

    Первый запуск:

    docker compose up -d --build

    Последующие запуски:

    docker compose up -d
    • --build: Необходимо выполнить при самом первом запуске или после внесения изменений в проекте.
    • -d: Запускает контейнеры в фоновом режиме (detached mode).

    Внимание! Первый запуск может занять несколько минут.

    Что происходит при первом запуске автоматически:

    • Применяются миграции базы данных.
    • Создается суперпользователь с данными из .env файла.
    • Создается группы (роли) со всеми необходимыми правами доступа.
  4. Приложение будет доступно по адресу: https://127.0.0.1. Так как используется самоподписанный SSL-сертификат, браузер выдаст предупреждение — его нужно принять.

Альтернативный способ: Локальная установка

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

  • Python 3.12+
  • PDM
  • PostgreSQL
  • Redis
  • ClamAV

Установка:

  1. Клонируйте репозиторий и перейдите в него.
  2. Настройте .env файл (см. инструкцию выше).
  3. Установите зависимости с помощью PDM:
    pdm install
  4. Примените миграции:
    pdm run migrate
  5. Запустите сервер разработки:
    pdm run runserver

⚙️ Основные команды (PDM)

Все рутинные задачи автоматизированы с помощью скриптов в 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: Управление активными клиентами и процесс активации.

About

A lightweight CRM system tailored for small business client management and workflow tracking.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published