# Django ETL Boilerplate Шаблон Django приложения для ETL (Extract, Transform, Load) операций с функциями веб-скрапинга. ## Технологический стек - **Python**: 3.11.2 - **Django**: 3.2.25 - **Django REST Framework**: 3.14.0 - **PostgreSQL**: 15.10 - **Redis**: 7.x - **Celery**: 5.3.6 - **Scrapy**: 2.11.2 - **Gunicorn**: 21.2.0 - **Apache**: 2.4.57 ## Структура проекта ``` mostovik-backend/ ├── src/ # Исходный код Django │ ├── config/ # Конфигурация Django │ │ ├── settings/ # Настройки (base, dev, prod, test) │ │ ├── celery.py # Конфигурация Celery │ │ └── urls.py # URL маршруты │ ├── apps/ # Django приложения │ │ └── user/ # Приложение пользователей │ └── manage.py # Управление Django ├── tests/ # Тесты (в корне проекта) │ ├── apps/user/ # Тесты для user app │ ├── conftest.py # Конфигурация pytest │ └── README.md # Документация по тестам ├── docker/ # Docker конфигурации ├── deploy/ # Файлы развертывания ├── pyproject.toml # Конфигурация проекта и инструментов ├── Makefile # Команды для разработки └── docker-compose.yml # Docker Compose для разработки ``` ## Быстрый старт (локальная разработка) ### 1. Установка зависимостей ```bash # Установка uv (если не установлен) curl -LsSf https://astral.sh/uv/install.sh | sh source $HOME/.cargo/env # Создание виртуального окружения с uv uv venv .venv source .venv/bin/activate # Установка зависимостей через uv uv pip install -e ".[dev]" # Или через Makefile make install # Настройка окружения разработки (pre-commit hooks) make setup-dev ``` ### 2. Настройка окружения ```bash # Копирование файла окружения cp .env.example .env # Редактирование .env файла по необходимости nano .env ``` ### 3. Запуск с Docker Compose (рекомендуется) ```bash # Запуск всех сервисов docker-compose up -d # Проверка состояния контейнеров docker-compose ps # Просмотр логов docker-compose logs -f web ``` ### 4. Ручная настройка (без Docker) #### Запуск баз данных: ```bash # PostgreSQL sudo systemctl start postgresql # Redis sudo systemctl start redis ``` #### Миграции и запуск: ```bash cd src # Миграции python manage.py makemigrations python manage.py migrate # Создание суперпользователя python manage.py createsuperuser # Запуск разработческого сервера python manage.py runserver # Запуск Celery worker (в отдельном терминале) celery -A config worker --loglevel=info # Запуск Celery beat (в отдельном терминале) celery -A config beat --loglevel=info ``` ## API Endpoints Основной префикс: `/api/` ### Data Processor - `GET/POST /api/data-sources/` - Источники данных - `GET/POST /api/data-pipelines/` - ETL пайплайны - `GET /api/extracted-data/` - Извлеченные данные - `GET /api/processing-logs/` - Логи обработки ### Web Scraping - `GET/POST /api/scraping-jobs/` - Задачи скрапинга - `GET /api/scraped-items/` - Скрапленные данные - `GET/POST /api/spider-configurations/` - Конфигурации пауков - `GET/POST /api/proxy-servers/` - Прокси сервера ### Аутентификация - `POST /api/api-token-auth/` - Получение API токена ## Развертывание на сервере Astra Linux ### Автоматическое развертывание ```bash # Сделать скрипт исполняемым chmod +x deploy/scripts/deploy.sh # Запуск скрипта развертывания sudo ./deploy/scripts/deploy.sh ``` ### Ручное развертывание 1. **Установка системных зависимостей:** ```bash sudo apt-get update sudo apt-get install python3.11 python3.11-venv postgresql-15 redis-server nginx ``` 2. **Настройка проекта:** ```bash # Клонирование репозитория git clone ваш_репозиторий.git /var/www/project cd /var/www/project # Создание виртуального окружения python3.11 -m venv venv source venv/bin/activate pip install -r requirements.txt # Настройка базы данных sudo -u postgres psql -c "CREATE DATABASE project_prod;" sudo -u postgres psql -c "CREATE USER project_user WITH PASSWORD 'secure_password';" sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE project_prod TO project_user;" ``` 3. **Конфигурация systemd:** ```bash sudo cp deploy/systemd/*.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable gunicorn celery-worker celery-beat ``` 4. **Настройка Apache:** ```bash sudo cp deploy/apache/project.conf /etc/apache2/sites-available/project.conf sudo a2ensite project.conf sudo a2enmod ssl rewrite headers expires sudo a2dissite 000-default sudo systemctl restart apache2 ``` ## Мониторинг и логирование ### Логи приложения ```bash # Логи Django tail -f logs/django.log # Логи Celery tail -f logs/celery.log # Системные логи journalctl -u gunicorn -f journalctl -u celery-worker -f ``` ### Мониторинг Celery ```bash # Запуск Flower (в отдельном терминале) celery -A config flower # Доступ через браузер: http://localhost:5555 ``` ## Разработка ### Запуск тестов ```bash # Запуск всех тестов make test # Запуск с покрытием make test-cov # Запуск только быстрых тестов make test-fast # Запуск тестов конкретного модуля make test TARGET=user # Линтинг и форматирование make lint make format # Проверка типов make type-check # Проверка безопасности make security-check ``` ### Создание миграций ```bash # Через Makefile make migrate # Или напрямую cd src python manage.py makemigrations python manage.py migrate # Создание суперпользователя make createsuperuser ``` ### Работа с задачами Celery ```python # В коде Python from apps.data_processor.tasks import process_extracted_data from apps.scraping.tasks import run_scraping_job # Запуск асинхронно result = process_extracted_data.delay() print(result.id) # ID задачи ``` ## Конфигурация инструментов Все конфигурации инструментов разработки централизованы в файле `pyproject.toml`: - **pytest**: настройки тестирования - **coverage**: отчеты о покрытии кода - **ruff**: линтинг и форматирование - **black**: форматирование кода - **isort**: сортировка импортов - **mypy**: проверка типов - **bandit**: проверка безопасности ### Полезные команды Make ```bash # Качество кода make lint # Проверка линтерами make format # Форматирование кода make type-check # Проверка типов make security-check # Проверка безопасности make pre-commit # Запуск всех pre-commit hooks # Тестирование make test # Все тесты make test-cov # Тесты с покрытием make test-fast # Только быстрые тесты # Разработка make shell # Django shell make migrate # Миграции make clean # Очистка временных файлов ``` ## Безопасность - Все секретные ключи хранятся в переменных окружения - Используется HTTPS в продакшене - Настроены заголовки безопасности в Apache - Регулярное обновление зависимостей ## Поддержка Для вопросов и поддержки обращайтесь к документации Django и используемым библиотекам: - [Django Documentation](https://docs.djangoproject.com/) - [Celery Documentation](https://docs.celeryproject.org/) - [Scrapy Documentation](https://docs.scrapy.org/) - [Django REST Framework](https://www.django-rest-framework.org/) ## Лицензия MIT License