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:
@@ -400,7 +400,7 @@ docker exec vidconf-postgres-1 pg_dump -U vidconf vidconf | gzip > db-$(date +%F
|
||||
```bash
|
||||
gunzip -c db-2026-07-25.sql.gz | docker exec -i vidconf-postgres-1 psql -U vidconf vidconf
|
||||
# Догнать миграции, если бэкап снят на более старой версии кода:
|
||||
docker compose -f deploy/docker-compose.yml --env-file .env run --rm backend uv run alembic upgrade head
|
||||
docker compose -f deploy/docker-compose.yml --env-file .env run --rm backend uv run --no-sync alembic upgrade head
|
||||
docker compose -f deploy/docker-compose.yml --env-file .env restart backend worker
|
||||
```
|
||||
|
||||
|
||||
@@ -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`.
|
||||
|
||||
@@ -63,7 +63,7 @@ services:
|
||||
dockerfile: Dockerfile
|
||||
restart: unless-stopped
|
||||
# Без -B: beat уже запущен на базовом worker (см. правило выше).
|
||||
command: ["uv", "run", "celery", "-A", "workers.celery_app", "worker",
|
||||
command: ["uv", "run", "--no-sync", "celery", "-A", "workers.celery_app", "worker",
|
||||
"-Q", "summarize", "--hostname=worker-summarize-%h@%h", "--loglevel=info"]
|
||||
env_file:
|
||||
- ../.env
|
||||
|
||||
Reference in New Issue
Block a user