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:
255
README.md
Normal file
255
README.md
Normal 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
|
||||
Reference in New Issue
Block a user