Services: - api: FastAPI gateway with JWT auth, async endpoints, WebSocket - worker-gpu: CUDA sentence-transformers, FAISS IVFFlat, Ollama LLM - worker-indexer: Winnowing+MinHash plagiarism detection, PDF/DOCX extraction - worker-notifier: SMTP email notifications - worker-gost: GOST 7.1-2003 and GOST R 7.0.5-2008 formatting Infrastructure: - docker-compose.yml (production) + docker-compose.dev.yml (hot reload) - Nginx reverse proxy + WebSocket support - PostgreSQL 16 with Alembic migrations - Elasticsearch 8 with Russian/English analyzers - MinIO, RabbitMQ, Redis, Ollama Frontend: - React 18 + Vite + TypeScript + TailwindCSS + Zustand + React Query v5 - 9 pages: Home, Search, Cabinet, Task, Check, Bibliography, Pricing, Login, Register Scripts: - Parser stubs: OpenAlex, КиберЛенинка, arXiv (Phase 0 - to be filled) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
133 lines
4.8 KiB
Makefile
133 lines
4.8 KiB
Makefile
.PHONY: dev build migrate logs shell-api shell-gpu lint test down ps restart clean
|
|
|
|
# ─── Переменные ────────────────────────────────────────────────────────────────
|
|
COMPOSE = docker compose
|
|
COMPOSE_DEV = docker compose -f docker-compose.yml -f docker-compose.dev.yml
|
|
PROJECT = anti-plagiarism
|
|
|
|
# ─── Разработка ────────────────────────────────────────────────────────────────
|
|
dev:
|
|
@cp -n .env.example .env 2>/dev/null || true
|
|
$(COMPOSE_DEV) up --build
|
|
|
|
dev-d:
|
|
@cp -n .env.example .env 2>/dev/null || true
|
|
$(COMPOSE_DEV) up --build -d
|
|
|
|
# ─── Продакшн ─────────────────────────────────────────────────────────────────
|
|
build:
|
|
$(COMPOSE) build
|
|
|
|
up:
|
|
$(COMPOSE) up -d
|
|
|
|
down:
|
|
$(COMPOSE) down
|
|
|
|
restart:
|
|
$(COMPOSE) restart
|
|
|
|
ps:
|
|
$(COMPOSE) ps
|
|
|
|
# ─── Миграции ─────────────────────────────────────────────────────────────────
|
|
migrate:
|
|
$(COMPOSE) exec api alembic upgrade head
|
|
|
|
migrate-dev:
|
|
$(COMPOSE_DEV) exec api alembic upgrade head
|
|
|
|
makemigration:
|
|
@read -p "Migration name: " name; \
|
|
$(COMPOSE) exec api alembic revision --autogenerate -m "$$name"
|
|
|
|
downgrade:
|
|
$(COMPOSE) exec api alembic downgrade -1
|
|
|
|
# ─── Логи ─────────────────────────────────────────────────────────────────────
|
|
logs:
|
|
$(COMPOSE) logs -f
|
|
|
|
logs-api:
|
|
$(COMPOSE) logs -f api
|
|
|
|
logs-gpu:
|
|
$(COMPOSE) logs -f worker-gpu
|
|
|
|
logs-indexer:
|
|
$(COMPOSE) logs -f worker-indexer
|
|
|
|
logs-notifier:
|
|
$(COMPOSE) logs -f worker-notifier
|
|
|
|
logs-gost:
|
|
$(COMPOSE) logs -f worker-gost
|
|
|
|
# ─── Шеллы ────────────────────────────────────────────────────────────────────
|
|
shell-api:
|
|
$(COMPOSE) exec api bash
|
|
|
|
shell-gpu:
|
|
$(COMPOSE) exec worker-gpu bash
|
|
|
|
shell-indexer:
|
|
$(COMPOSE) exec worker-indexer bash
|
|
|
|
shell-db:
|
|
$(COMPOSE) exec postgres psql -U antiplagiator antiplagiator
|
|
|
|
shell-redis:
|
|
$(COMPOSE) exec redis redis-cli
|
|
|
|
# ─── Линтинг и тесты ──────────────────────────────────────────────────────────
|
|
lint:
|
|
$(COMPOSE) exec api ruff check . --fix
|
|
$(COMPOSE) exec api mypy app/
|
|
|
|
lint-frontend:
|
|
cd services/frontend && npm run lint
|
|
|
|
test:
|
|
$(COMPOSE) exec api pytest tests/ -v
|
|
|
|
test-cov:
|
|
$(COMPOSE) exec api pytest tests/ -v --cov=app --cov-report=html
|
|
|
|
# ─── Утилиты ──────────────────────────────────────────────────────────────────
|
|
clean:
|
|
$(COMPOSE) down -v --remove-orphans
|
|
docker system prune -f
|
|
|
|
# Запустить парсер (пример: make parse PARSER=openalex ARGS="--limit 1000")
|
|
parse:
|
|
$(COMPOSE) exec api python /scripts/run_parser.py $(PARSER) $(ARGS)
|
|
|
|
# Создать MinIO бакеты
|
|
minio-init:
|
|
$(COMPOSE) exec minio mc alias set local http://localhost:9000 minioadmin changeme
|
|
$(COMPOSE) exec minio mc mb local/documents || true
|
|
$(COMPOSE) exec minio mc mb local/backups || true
|
|
|
|
# Создать ES индекс
|
|
es-init:
|
|
bash infra/elasticsearch/setup.sh
|
|
|
|
# Статистика Celery
|
|
flower:
|
|
@echo "Flower доступен по адресу http://localhost:5555"
|
|
@$(COMPOSE) ps flower
|
|
|
|
help:
|
|
@echo "Академический помощник — команды make:"
|
|
@echo ""
|
|
@echo " make dev — запустить в режиме разработки (hot reload)"
|
|
@echo " make build — собрать Docker образы"
|
|
@echo " make up — запустить в продакшн режиме"
|
|
@echo " make down — остановить все сервисы"
|
|
@echo " make migrate — применить миграции Alembic"
|
|
@echo " make logs — показать логи всех сервисов"
|
|
@echo " make shell-api — открыть shell в контейнере api"
|
|
@echo " make lint — запустить линтер"
|
|
@echo " make test — запустить тесты"
|
|
@echo " make clean — удалить все контейнеры и volumes"
|