perf(deploy): не пересобирать окружение uv в рантайме контейнеров
Образ собран с `uv sync --frozen --no-dev`, но `uv run` перед каждым запуском заново синхронизирует venv и подтягивает dev-группу. В логах старта vidconf-backend-1 и vidconf-worker-1 на проде это видно как «Downloading ruff / mypy / pygments» и «Installed 12 packages». Хуже всего healthcheck'и: они выполняют ту же синхронизацию каждые 15 секунд всю жизнь контейнера. Проверено на локально собранном образе, одна и та же команда: uv run — качает 12 пакетов, venv 456 → 574 МБ uv run --no-sync — не качает ничего, venv остаётся 456 МБ Флаг добавлен во все вызовы в прод-путях: CMD образа, command/entrypoint/ healthcheck всех сервисов compose, миграции и seed в install.sh, те же команды в docs/deploy. Локальная разработка (dev-setup.md, backend/README.md, CI) не затронута — там dev-зависимости нужны. Заодно убрано устаревшее объяснение ретрая `up -d --wait`: первый старт больше не синхронизирует окружение. Версия uv в образе — 0.11.33, `--no-sync` поддерживается.
This commit is contained in:
@@ -63,7 +63,7 @@ CPU-only — отдельного GPU-варианта профилей для
|
||||
|
||||
Поведение:
|
||||
- **Дефолт (Enter):** применяет матрицу выбранного пресета к настройкам БД
|
||||
(defs: `docker compose exec -T backend uv run python -m scripts.apply_preset_settings --force`)
|
||||
(defs: `docker compose exec -T backend uv run --no-sync python -m scripts.apply_preset_settings --force`)
|
||||
- **Отказ (`n`):** сохраняет ручные правки админа; переменные `BOOTSTRAP_*` в `.env`
|
||||
обновляются, но скрипт применения настроек НЕ запускается
|
||||
- **Флаг `--yes`:** автоматически применяет пресет без вопроса (для CI/CD)
|
||||
@@ -111,7 +111,7 @@ Grafana/Prometheus не поднимаются автоматически — с
|
||||
собирает фронтенд-SPA и вкомпилирует статику, `frontend/Dockerfile`).
|
||||
4. Поднимает `postgres`/`redis` (`up -d --wait`) и применяет **до старта
|
||||
backend** миграции и seed одноразовыми контейнерами:
|
||||
`docker compose run --rm backend uv run alembic upgrade head` +
|
||||
`docker compose run --rm backend uv run --no-sync alembic upgrade head` +
|
||||
`... python -m scripts.seed`. Порядок критичен: `backend.lifespan`
|
||||
бутстрапит `instance_settings` при каждом старте приложения, поэтому на
|
||||
чистой БД таблицы обязаны существовать до первого запуска backend — иначе
|
||||
@@ -122,9 +122,8 @@ Grafana/Prometheus не поднимаются автоматически — с
|
||||
настройки инстанса не перетираются).
|
||||
5. Поднимает остальной стек: `docker compose <--profile ...> up -d --wait`
|
||||
(backend, worker, nginx с фронтом + сервисы активных профилей). Команда
|
||||
идемпотентна и обёрнута в ретрай (до 3 попыток): первый старт backend/worker
|
||||
включает `uv run` (синхронизация окружения + компиляция байткода), и на
|
||||
слабой/загруженной машине healthcheck может не успеть за отведённые
|
||||
идемпотентна и обёрнута в ретрай (до 3 попыток): на слабой/загруженной
|
||||
машине healthcheck может не успеть за отведённые
|
||||
retries — повтор лишь дожидается уже стартующих контейнеров.
|
||||
6. Печатает сводку: URL фронтенда/бэкенда, учётные данные администратора,
|
||||
команда для `--profile monitoring`.
|
||||
|
||||
Reference in New Issue
Block a user