From 3d205fa7e0517c0ae826aef487ef76b4fd9327c0 Mon Sep 17 00:00:00 2001 From: emelinda Date: Sun, 9 Aug 2026 20:54:20 +0300 Subject: [PATCH] =?UTF-8?q?BIM:=20=D0=B1=D0=B0=D0=B7=D0=B0=20bimapidb=20?= =?UTF-8?q?=D0=B8=20=D0=BE=D0=B1=D1=8F=D0=B7=D0=B0=D1=82=D0=B5=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D0=B0=D1=8F=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=BD=D0=B0=D1=8F=20GOOGLE=5FAPPLICATION=5FCREDENTIALS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Оба пода уходили в рестарты, причины разные и обе — мои. 1. bim-api: psycopg2.OperationalError: FATAL: database "bimapidb" does not exist Имя базы у приложения ЗАХАРДКОЖЕНО и переменной не задаётся — в entrypoint_api.sh (yoyo apply ... /bimapidb) и в models/database.py (PooledPostgresqlExtDatabase('bimapidb', ...)). Переменной DB_NAME в коде нет вообще, я подставлял её впустую. Запись в contour.databases переименована bim_db -> bimapidb, DB_NAME из vault-шаблона убран. Пустая bim_db остаётся в СУБД: бутстрап умеет только создавать. Данных в ней нет — проверено, ноль таблиц. 2. bim-worker: Exception: ENV_VARIABLE NOT SET: GOOGLE_APPLICATION_CREDENTIALS settings.py делает check_settings(): проходит по ВСЕМ ключам ENV_FIELDS и падает на первом незаданном, до проверки флагов дело не доходит. Убирать переменную вместе с Google-хранилищем было нельзя. Возвращена; файла по этому пути нет и не нужно — при FEATURE_ENABLE_GCLOUD=false его никто не открывает, важно лишь наличие самой переменной. Отсюда правило для этого приложения: набор переменных должен повторять apps/bim/dsinv целиком, образ там тот же (870965d1...). Менять можно только значения — адреса, бакет, брокер, — но не состав. --- aero/roles/sarex_stack/defaults/main.yml | 7 ++++--- apps/bim/aero/bim-api.yaml | 16 ++++++++++++---- apps/bim/aero/bim-worker.yaml | 10 +++++++++- infrastructure/postgresql/aero/postgresql.yaml | 7 ++++++- 4 files changed, 31 insertions(+), 9 deletions(-) diff --git a/aero/roles/sarex_stack/defaults/main.yml b/aero/roles/sarex_stack/defaults/main.yml index 23de13c..c9887cd 100644 --- a/aero/roles/sarex_stack/defaults/main.yml +++ b/aero/roles/sarex_stack/defaults/main.yml @@ -437,9 +437,10 @@ sarex_postgres_processing_user: processing sarex_postgres_workspaces_db: workspace_db sarex_postgres_workspaces_user: workspace -# То же для bim. Должно совпадать с записью bim_db в contour.databases -# (infrastructure/postgresql/aero). -sarex_postgres_bim_db: bim_db +# То же для bim. Имя базы задано не нами: в aero/bimbackend оно захардкожено +# в коде (entrypoint_api.sh и models/database.py), переменной для него нет. +# Должно совпадать с записью bimapidb в contour.databases. +sarex_postgres_bim_db: bimapidb sarex_postgres_bim_user: bim # Бакет медиафайлов django. ВНИМАНИЕ: чарт MinIO бакеты не создаёт — его нужно diff --git a/apps/bim/aero/bim-api.yaml b/apps/bim/aero/bim-api.yaml index 5d0e6be..3faa35c 100644 --- a/apps/bim/aero/bim-api.yaml +++ b/apps/bim/aero/bim-api.yaml @@ -50,7 +50,6 @@ spec: {{- with secret "secrets/data/apps/bim/postgres" -}} DB_HOST={{ index .Data.data "host" }} DB_PORT={{ index .Data.data "port" }} - DB_NAME={{ index .Data.data "database" }} DB_USER={{ index .Data.data "username" }} DB_PASSWORD={{ index .Data.data "password" }} {{- end -}} @@ -114,11 +113,20 @@ spec: value: "false" - name: FEATURE_ENABLE_WORKSPACES value: "true" - # Google-хранилища в контуре нет и не будет. Флаг выключен, а - # переменная GOOGLE_APPLICATION_CREDENTIALS и том с ключом, - # которые есть в dsinv, здесь убраны за ненадобностью. + # Google-хранилища в контуре нет и не будет — флаг выключен. + # Том с ключом, который есть в dsinv, здесь не нужен, а сама + # переменная ниже нужна, см. комментарий к ней. - name: FEATURE_ENABLE_GCLOUD value: "false" + # Значение НЕ УДАЛЯТЬ, даже при выключенном флаге выше. settings.py + # делает check_settings(): проходит по всем ключам ENV_FIELDS и + # падает на первом же незаданном — + # Exception: ENV_VARIABLE NOT SET: GOOGLE_APPLICATION_CREDENTIALS + # Флаги проверяются позже, до них дело не доходит. Файла по этому + # пути нет и не будет: при FEATURE_ENABLE_GCLOUD=false его никто не + # открывает, важно лишь наличие самой переменной. + - name: GOOGLE_APPLICATION_CREDENTIALS + value: /etc/sarex/google-storage/service_account.json # ВНИМАНИЕ: S3 в этом приложении НЕ НАСТРАИВАЕТСЯ на MinIO. # В storage/s3.py адрес зашит в код: # endpoint_url='https://storage.yandexcloud.net' diff --git a/apps/bim/aero/bim-worker.yaml b/apps/bim/aero/bim-worker.yaml index 467d075..5ddfc4d 100644 --- a/apps/bim/aero/bim-worker.yaml +++ b/apps/bim/aero/bim-worker.yaml @@ -37,7 +37,6 @@ spec: {{- with secret "secrets/data/apps/bim/postgres" -}} DB_HOST={{ index .Data.data "host" }} DB_PORT={{ index .Data.data "port" }} - DB_NAME={{ index .Data.data "database" }} DB_USER={{ index .Data.data "username" }} DB_PASSWORD={{ index .Data.data "password" }} {{- end -}} @@ -86,6 +85,15 @@ spec: value: "true" - name: FEATURE_ENABLE_GCLOUD value: "false" + # Значение НЕ УДАЛЯТЬ, даже при выключенном флаге выше. settings.py + # делает check_settings(): проходит по всем ключам ENV_FIELDS и + # падает на первом же незаданном — + # Exception: ENV_VARIABLE NOT SET: GOOGLE_APPLICATION_CREDENTIALS + # Флаги проверяются позже, до них дело не доходит. Файла по этому + # пути нет и не будет: при FEATURE_ENABLE_GCLOUD=false его никто не + # открывает, важно лишь наличие самой переменной. + - name: GOOGLE_APPLICATION_CREDENTIALS + value: /etc/sarex/google-storage/service_account.json - name: FEATURE_ENABLE_S3 value: "true" - name: S3_BUCKET diff --git a/infrastructure/postgresql/aero/postgresql.yaml b/infrastructure/postgresql/aero/postgresql.yaml index 6441075..01ae7bd 100644 --- a/infrastructure/postgresql/aero/postgresql.yaml +++ b/infrastructure/postgresql/aero/postgresql.yaml @@ -164,7 +164,12 @@ spec: - ltree - hstore restoreFromDump: false - - name: bim_db + # Имя ОБЯЗАНО быть bimapidb: в aero/bimbackend оно захардкожено и + # переменной не задаётся — и в entrypoint_api.sh (yoyo apply + # ... /bimapidb), и в models/database.py (PooledPostgresqlExtDatabase + # ('bimapidb', ...)). С любым другим именем приложение падает на + # старте: FATAL: database "bimapidb" does not exist. + - name: bimapidb user: bim passwordKey: bim extensions: []