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

7.1 KiB
Raw Blame History

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. Установка зависимостей

# Установка 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. Настройка окружения

# Копирование файла окружения
cp .env.example .env

# Редактирование .env файла по необходимости
nano .env

3. Запуск с Docker Compose (рекомендуется)

# Запуск всех сервисов
docker-compose up -d

# Проверка состояния контейнеров
docker-compose ps

# Просмотр логов
docker-compose logs -f web

4. Ручная настройка (без Docker)

Запуск баз данных:

# PostgreSQL
sudo systemctl start postgresql

# Redis
sudo systemctl start redis

Миграции и запуск:

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

Автоматическое развертывание

# Сделать скрипт исполняемым
chmod +x deploy/scripts/deploy.sh

# Запуск скрипта развертывания
sudo ./deploy/scripts/deploy.sh

Ручное развертывание

  1. Установка системных зависимостей:
sudo apt-get update
sudo apt-get install python3.11 python3.11-venv postgresql-15 redis-server nginx
  1. Настройка проекта:
# Клонирование репозитория
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;"
  1. Конфигурация systemd:
sudo cp deploy/systemd/*.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable gunicorn celery-worker celery-beat
  1. Настройка Apache:
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

Мониторинг и логирование

Логи приложения

# Логи Django
tail -f logs/django.log

# Логи Celery
tail -f logs/celery.log

# Системные логи
journalctl -u gunicorn -f
journalctl -u celery-worker -f

Мониторинг Celery

# Запуск Flower (в отдельном терминале)
celery -A config flower

# Доступ через браузер: http://localhost:5555

Разработка

Запуск тестов

# Запуск всех тестов
pytest

# Запуск с покрытием
pytest --cov=src

# Запуск линтеров
flake8 src/
black src/

Создание миграций

python manage.py makemigrations
python manage.py migrate

Работа с задачами Celery

# В коде 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 и используемым библиотекам:

Лицензия

MIT License