.PHONY: dev build migrate logs shell-api shell-gpu lint test down ps restart clean test-up test-down test-logs test-ps # ─── Переменные ──────────────────────────────────────────────────────────────── # Прод: docker-compose.prod.yml — app-сервисы + локальный ES, остальная инфра # (postgres/redis/rabbitmq/minio/ollama) уже существует и берётся из .env. # Dev (полностью локальный sandbox, свои postgres/redis/rabbitmq/minio/ollama + # hot reload) — поверх self-hosted примера, используется редко. # Test (то, что реально гоняется на машине разработчика день в день) — hot # reload против той же общей инфры, что и прод. COMPOSE_PROD = docker compose -f docker-compose.prod.yml COMPOSE_DEV = docker compose -f docker-compose.selfhosted.yml.example -f docker-compose.dev.yml COMPOSE_TEST = docker compose -f docker-compose.test.yml PROJECT = anti-plagiarism # ─── Разработка (полностью локальный sandbox, редко используется) ───────────── 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 # ─── Test (hot reload против общей инфры — повседневная разработка) ────────── test-up: $(COMPOSE_TEST) up --build -d test-down: $(COMPOSE_TEST) down test-logs: $(COMPOSE_TEST) logs -f test-ps: $(COMPOSE_TEST) ps # ─── Продакшн ───────────────────────────────────────────────────────────────── build: $(COMPOSE_PROD) build up: $(COMPOSE_PROD) up -d down: $(COMPOSE_PROD) down restart: $(COMPOSE_PROD) restart ps: $(COMPOSE_PROD) ps # ─── Миграции ───────────────────────────────────────────────────────────────── migrate: $(COMPOSE_PROD) exec api alembic upgrade head migrate-dev: $(COMPOSE_DEV) exec api alembic upgrade head makemigration: @read -p "Migration name: " name; \ $(COMPOSE_PROD) exec api alembic revision --autogenerate -m "$$name" downgrade: $(COMPOSE_PROD) exec api alembic downgrade -1 # ─── Логи ───────────────────────────────────────────────────────────────────── logs: $(COMPOSE_PROD) logs -f logs-api: $(COMPOSE_PROD) logs -f api logs-gpu: $(COMPOSE_PROD) logs -f worker-gpu logs-indexer: $(COMPOSE_PROD) logs -f worker-indexer logs-notifier: $(COMPOSE_PROD) logs -f worker-notifier logs-gost: $(COMPOSE_PROD) logs -f worker-gost # ─── Шеллы ──────────────────────────────────────────────────────────────────── shell-api: $(COMPOSE_PROD) exec api bash shell-gpu: $(COMPOSE_PROD) exec worker-gpu bash shell-indexer: $(COMPOSE_PROD) exec worker-indexer bash shell-db: @echo "Postgres общий (192.168.1.11) — подключайся напрямую: psql -h 192.168.1.11 -U antiplagiator antiplagiator" shell-redis: @echo "Redis общий (192.168.1.19) — подключайся напрямую: redis-cli -h 192.168.1.19 -n 3" # ─── Линтинг и тесты ────────────────────────────────────────────────────────── lint: $(COMPOSE_PROD) exec api ruff check . --fix $(COMPOSE_PROD) exec api mypy app/ lint-frontend: cd services/frontend && npm run lint test: $(COMPOSE_PROD) exec api pytest tests/ -v test-cov: $(COMPOSE_PROD) exec api pytest tests/ -v --cov=app --cov-report=html # ─── Утилиты ────────────────────────────────────────────────────────────────── # ВНИМАНИЕ: -v удаляет только ЛОКАЛЬНЫЕ volume (es_prod_data, faiss_index_prod) — # общие postgres/redis/rabbitmq/minio не в Compose, их не затронет. clean: $(COMPOSE_PROD) down -v --remove-orphans docker system prune -f # Запустить парсер (пример: make parse PARSER=openalex ARGS="--limit 1000") parse: $(COMPOSE_PROD) exec api python /scripts/run_parser.py $(PARSER) $(ARGS) # Создать MinIO бакеты (запускать один раз на общем MinIO 192.168.1.21, не локально) minio-init: @echo "MinIO общий (192.168.1.21) — бакеты documents/backups создаются на нём, см. .env MINIO_*" # Создать ES индекс es-init: bash infra/elasticsearch/setup.sh # Статистика Celery flower: @echo "Flower доступен по адресу http://localhost:5555" @$(COMPOSE_PROD) ps flower help: @echo "Академический помощник — команды make:" @echo "" @echo " make test-up — запустить тестовый стек (hot reload, общая инфра)" @echo " make dev — запустить полностью локальный sandbox (редко нужно)" @echo " make build — собрать прод-образы" @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 — удалить прод-контейнеры и ЛОКАЛЬНЫЕ volume"