From 9abe5b510238b3712ecdaff43c2f7368183f014d Mon Sep 17 00:00:00 2001 From: Max Ronzhin Date: Mon, 10 Aug 2026 16:09:38 +0300 Subject: [PATCH] =?UTF-8?q?fix(deploy):=20=D0=BF=D0=BE=D1=87=D0=B8=D0=BD?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20DATABASE=5FURL=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=BB=D0=BE=D0=BA=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BD=D1=82=D0=B5=D0=B9=D0=BD=D0=B5=D1=80=D0=BD?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE=20=D1=81=D1=82=D0=B5=D0=BD=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Корневой .env указывает DATABASE_URL на localhost (нужен только для запуска backend на хосте вне контейнера), а compose подставлял эту строку внутрь контейнеров backend/worker/worker-transcriber как есть — localhost внутри контейнера это он сам, ConnectionRefused при любом docker compose up без обходной переменной окружения (грабля с 04.08). DATABASE_URL для контейнеров теперь всегда собирается в compose из POSTGRES_USER/POSTGRES_PASSWORD/POSTGRES_DB с хостом postgres — так же, как уже сделано для REDIS_URL. Прода не касается: install.sh (строка 380) и так пересобирает DATABASE_URL при установке с хостом postgres. Проверено на локальном стенде: docker compose --profile media up -d без обходной переменной, backend/worker подключились к БД без ConnectionRefused. --- deploy/docker-compose.yml | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml index 794a862..35b0f29 100644 --- a/deploy/docker-compose.yml +++ b/deploy/docker-compose.yml @@ -69,7 +69,12 @@ services: env_file: - ../.env environment: - DATABASE_URL: ${DATABASE_URL:-postgresql+asyncpg://vidconf:vidconf@postgres:5432/vidconf} + # Собран из POSTGRES_USER/POSTGRES_PASSWORD/POSTGRES_DB с жёстким хостом + # `postgres` (сессия 37) — так же, как REDIS_URL ниже, а не читается из + # .env.DATABASE_URL напрямую: тот в корневом .env указывает на `localhost` + # (для запуска backend на хосте вне контейнера, см. CONTEXT §2.1.0), а + # `localhost` внутри контейнера — это сам контейнер, не соседний postgres. + DATABASE_URL: postgresql+asyncpg://${POSTGRES_USER:-vidconf}:${POSTGRES_PASSWORD:-vidconf}@postgres:5432/${POSTGRES_DB:-vidconf} REDIS_URL: redis://:${REDIS_PASSWORD:?REDIS_PASSWORD не задан в .env}@redis:6379/0 PLUGINS_CONFIG_PATH: ${PLUGINS_CONFIG_PATH:-config/plugins.yaml} LIVEKIT_API_KEY: ${LIVEKIT_API_KEY:?LIVEKIT_API_KEY не задан в .env} @@ -89,7 +94,7 @@ services: MEDIA_ROOT: ${MEDIA_ROOT:-/app/media} # Версия инстанса (релиз v0.0.1) — install.sh копирует значение # из файла VERSION (корень репозитория) в .env; отдаётся в GET /api/health. - VIDCONF_VERSION: ${VIDCONF_VERSION:-0.0.36} + VIDCONF_VERSION: ${VIDCONF_VERSION:-0.0.37} # Число процессов uvicorn (см. backend/Dockerfile). Дефолт 2 рассчитан # на 4-ядерный сервер, где ядра делятся с LiveKit. Поднимая значение, # проверьте бюджет соединений с БД: каждый воркер держит свой пул @@ -143,7 +148,7 @@ services: env_file: - ../.env environment: - DATABASE_URL: ${DATABASE_URL:-postgresql+asyncpg://vidconf:vidconf@postgres:5432/vidconf} + DATABASE_URL: postgresql+asyncpg://${POSTGRES_USER:-vidconf}:${POSTGRES_PASSWORD:-vidconf}@postgres:5432/${POSTGRES_DB:-vidconf} REDIS_URL: redis://:${REDIS_PASSWORD:?REDIS_PASSWORD не задан в .env}@redis:6379/0 PLUGINS_CONFIG_PATH: ${PLUGINS_CONFIG_PATH:-config/plugins.yaml} PYTHONPATH: /app @@ -240,7 +245,7 @@ services: env_file: - ../.env environment: - DATABASE_URL: ${DATABASE_URL:-postgresql+asyncpg://vidconf:vidconf@postgres:5432/vidconf} + DATABASE_URL: postgresql+asyncpg://${POSTGRES_USER:-vidconf}:${POSTGRES_PASSWORD:-vidconf}@postgres:5432/${POSTGRES_DB:-vidconf} REDIS_URL: redis://:${REDIS_PASSWORD:?REDIS_PASSWORD не задан в .env}@redis:6379/0 PLUGINS_CONFIG_PATH: ${PLUGINS_CONFIG_PATH:-config/plugins.yaml} RECORDINGS_DIR: ${RECORDINGS_DIR:-/recordings} @@ -296,7 +301,7 @@ services: env_file: - ../.env environment: - DATABASE_URL: ${DATABASE_URL:-postgresql+asyncpg://vidconf:vidconf@postgres:5432/vidconf} + DATABASE_URL: postgresql+asyncpg://${POSTGRES_USER:-vidconf}:${POSTGRES_PASSWORD:-vidconf}@postgres:5432/${POSTGRES_DB:-vidconf} REDIS_URL: redis://:${REDIS_PASSWORD:?REDIS_PASSWORD не задан в .env}@redis:6379/0 PLUGINS_CONFIG_PATH: ${PLUGINS_CONFIG_PATH:-config/plugins.yaml} RECORDINGS_DIR: ${RECORDINGS_DIR:-/recordings}