Files
mostovik-backend/README.md
Aleksandr Meshchriakov cbfbd8652d 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
2026-01-19 14:12:33 +01:00

255 lines
7.1 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
## Структура проекта
```
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