Админка осталась отдельной ветвью admin-panel; в master её нет (ни кода, ни страниц, ни переменных окружения, ни тома настроек). Что перенесено: - parsing: имена групп вида «ИВТ-ТОП-11БО» распознаются, порядок групп = порядок столбцов таблицы (похожие заголовки с пробелами группой не считаются); - main: GET /groups отдаёт группы в порядке столбцов; интервал обновления из SCHEDULE_INTERVAL_MINUTES (со старым SCHEDULE_CACHE_TTL как fallback); - cache: по интервалу сверяем modified — если файл не менялся, не скачиваем; при загрузке считаем sha256 и пишем в лог и /status, изменился ли файл; - source: запросы к Яндекс.Диску с no-cache и меткой времени; - frontend: ответы API с Cache-Control: no-store, общий .env из корня проекта (и backend, и frontend), страницы/прокси админки нет; - Dockerfile/compose/.env.example: без ADMIN_* и без тома настроек; в api-образ попадают все модули backend (проверяется тестом test_deploy); - Makefile: make help/venv/run/run-api/run-front/test + docker-цели — «make run» поднимает всё локально без Docker; - README: быстрый старт, полный список зависимостей, запуск локально и в Docker; - deploy/: пример nginx и инструкция «второй стенд рядом с основным». Тесты: 114 (удалены админские), все зелёные.
59 lines
2.1 KiB
Makefile
59 lines
2.1 KiB
Makefile
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
|