feat: Add comprehensive Django user app with tests using model-bakery

- Implemented user authentication with JWT tokens
- Added user and profile models with OneToOne relationship
- Created service layer for business logic separation
- Implemented DRF serializers and views
- Added comprehensive test suite with model-bakery factories
- Fixed ipdb/pdbpp dependency conflicts with custom test runner
- Configured development and production environments
- Added deployment configurations for Apache, systemd, and Docker
This commit is contained in:
2026-01-19 14:12:33 +01:00
commit cbfbd8652d
51 changed files with 4183 additions and 0 deletions

255
README.md Normal file
View File

@@ -0,0 +1,255 @@
# 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
## Структура проекта
```
src/
├── config/ # Конфигурация Django
│ ├── settings/ # Настройки (base, dev, prod)
│ ├── celery.py # Конфигурация Celery
│ └── urls.py # URL маршруты
├── apps/
│ ├── data_processor/ # Приложение обработки данных
│ ├── scraping/ # Приложение веб-скрапинга
│ └── api/ # API endpoints
└── manage.py # Управление Django
docker/ # Docker конфигурации
deploy/ # Файлы развертывания
requirements.txt # Основные зависимости
requirements-dev.txt # Зависимости для разработки
```
## Быстрый старт (локальная разработка)
### 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 -r requirements.txt
uv pip install -r requirements-dev.txt
```
### 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
# Запуск всех тестов
pytest
# Запуск с покрытием
pytest --cov=src
# Запуск линтеров
flake8 src/
black src/
```
### Создание миграций
```bash
python manage.py makemigrations
python manage.py migrate
```
### Работа с задачами 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 задачи
```
## Безопасность
- Все секретные ключи хранятся в переменных окружения
- Используется 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