PY := $(CURDIR)/.venv/bin/python PIP := $(CURDIR)/.venv/bin/pip .PHONY: help venv run dev run-api run-front test build up down restart logs ps deploy help: ## Показать этот список команд @grep -hE '^[a-zA-Z_-]+:.*?## ' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-10s\033[0m %s\n", $$1, $$2}' # --- локальный запуск (без Docker) ------------------------------------------- venv: ## Создать .venv и установить зависимости @test -x $(PY) || python3 -m venv .venv @$(PIP) install -q --upgrade pip @$(PIP) install -q -r requirements-dev.txt @echo "Зависимости готовы (.venv). Дальше: make run" run: venv ## Запустить API и сайт локально, без Docker @echo "API: http://127.0.0.1:8000/status" @echo "Сайт: http://127.0.0.1:8080 (открыть в браузере)" @echo "Остановить: Ctrl+C" @trap 'kill 0' EXIT; \ (cd src/backend && $(PY) -m uvicorn main:app --reload --port 8000) & \ (cd src/frontend && $(PY) -m uvicorn main:app --reload --port 8080) & \ wait dev: run ## То же, что run run-api: venv ## Запустить только API (http://127.0.0.1:8000) cd src/backend && $(PY) -m uvicorn main:app --reload --port 8000 run-front: venv ## Запустить только сайт (http://127.0.0.1:8080) cd src/frontend && $(PY) -m uvicorn main:app --reload --port 8080 test: venv ## Прогнать тесты $(PY) -m pytest tests -q # --- Docker (продакшен) ------------------------------------------------------ build: ## Собрать образы docker compose build up: ## Запустить сервисы в фоне docker compose up -d down: ## Остановить и удалить контейнеры docker compose down restart: ## Перезапустить сервисы docker compose restart logs: ## Логи сервисов (Ctrl+C для выхода) docker compose logs -f ps: ## Статус сервисов docker compose ps deploy: ## Собрать и запустить (docker) ./deploy.sh