Files
mostovik-backend/README.md
Aleksandr Meshchriakov f121445313 feat(core): add core module with mixins, services, and background jobs
- Add Model Mixins: TimestampMixin, SoftDeleteMixin, AuditMixin, etc.
- Add Base Services: BaseService, BulkOperationsMixin, QueryOptimizerMixin
- Add Base ViewSets with bulk operations
- Add BackgroundJob model for Celery task tracking
- Add BaseAppCommand for management commands
- Add permissions, pagination, filters, cache, logging
- Migrate tests to factory_boy + faker
- Add CHANGELOG.md
- 297 tests passing
2026-01-21 11:47:26 +01:00

316 lines
9.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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