Откат BIM v2: развёрнут не тот сервис

Коммит c8eefab развернул platform/bim-backend-v2 (Go, один httpserver) —
он приезжает из apps/bim/base. Нужен же aero/bimbackend: Python, пара
api + worker, S3-бакет sarex-bim-storage, связки с processing и
workspaces. В iac он лежит не в base, а отдельными манифестами
bim-api.yaml и bim-worker.yaml (см. apps/bim/dsinv).

Спутать их легко: ОБА пушат в реестр один и тот же образ bim-api, и
различить можно только по содержимому — v2 пишет в лог
"Starting BIMv2 API server", а у bimbackend точки входа
entrypoint_api.sh и entrypoint_worker.sh.

Откатывается всё: релиз, маршрут наружу, имя в сертификате, адрес
BIMV2_INTERNAL_HOST у django и обвязка (роль Vault, секрет, regcred,
путь синхронизации). Заводить их заново под bimbackend дешевле, чем
править остатки под другой сервис — у него могут отличаться и namespace,
и имя базы.

База bim_db при этом НЕ трогается и пересоздания не требует: проверено
до отката — ноль таблиц, 9 МБ пустого шаблона. v2 к ней подключился, но
схему не создал, миграции не отработали.
This commit is contained in:
emelinda 2026-08-09 15:04:33 +03:00
parent c8eefab4b6
commit 285255e628
5 changed files with 0 additions and 101 deletions

View File

@ -88,7 +88,6 @@ registry_secrets:
- {name: regcred, namespace: measurements} - {name: regcred, namespace: measurements}
- {name: regcred, namespace: processing} - {name: regcred, namespace: processing}
- {name: regcred, namespace: workspaces} - {name: regcred, namespace: workspaces}
- {name: regcred, namespace: bim}
# Поднимать стек (docker compose up -d). Требует запущенной службы docker и # Поднимать стек (docker compose up -d). Требует запущенной службы docker и
# docker login в cr.yandex — по умолчанию выключено. # docker login в cr.yandex — по умолчанию выключено.
@ -158,7 +157,6 @@ gitea_sync_paths:
- apps/measurements - apps/measurements
- apps/processing - apps/processing
- apps/workspaces - apps/workspaces
- apps/bim
# Рабочая копия репозитория gitea на хосте (клон, живёт между прогонами). # Рабочая копия репозитория gitea на хосте (клон, живёт между прогонами).
gitea_sync_workdir: "{{ deploy_dir }}/gitea-sync" gitea_sync_workdir: "{{ deploy_dir }}/gitea-sync"
@ -245,7 +243,6 @@ vault_k8s_roles:
- {name: processing, namespaces: [processing]} - {name: processing, namespaces: [processing]}
- {name: measurements, namespaces: [measurements]} - {name: measurements, namespaces: [measurements]}
- {name: workspaces, namespaces: [workspaces]} - {name: workspaces, namespaces: [workspaces]}
- {name: bim, namespaces: [bim]}
# Боевые креды инфраструктурных сервисов. Пути и имена ключей заданы чартами # Боевые креды инфраструктурных сервисов. Пути и имена ключей заданы чартами
# (см. vaultRoot у minio и auth.vault у rabbitmq в infrastructure/*/aero) — # (см. vaultRoot у minio и auth.vault у rabbitmq в infrastructure/*/aero) —
@ -373,18 +370,6 @@ vault_app_secrets:
# django, той самой учётки из secrets/apps/django/superuser выше. Из этого же # django, той самой учётки из secrets/apps/django/superuser выше. Из этого же
# пути django в base читает django_zitadel_access_token, но в контуре Zitadel # пути django в base читает django_zitadel_access_token, но в контуре Zitadel
# нет и та аннотация удалена в apps/django/aero — здесь удалять её НЕ нужно. # нет и та аннотация удалена в apps/django/aero — здесь удалять её НЕ нужно.
# --- Секреты приложения bim ---------------------------------------------
# Структура задана vault-шаблоном в apps/bim/base/backend.yaml: он собирает
# ПЯТЬ комплектов POSTGRES_*_N из одних и тех же ключей. В проде это разные
# кластеры-реплики, в контуре СУБД одна — шаблон просто повторяет её пять раз,
# поэтому здесь достаточно одного набора значений.
- path: secrets/apps/bim/postgres
data:
host: postgresql.postgresql.svc.cluster.local
port: "5432"
database: "{{ sarex_postgres_bim_db }}"
username: "{{ sarex_postgres_bim_user }}"
password: "{{ sarex_secrets.SAREX_BIM_DB_PASSWORD }}"
- path: secrets/vault/common/django_auth - path: secrets/vault/common/django_auth
data: data:
key: "{{ (superuser_name ~ ':' ~ superuser_password) | b64encode }}" key: "{{ (superuser_name ~ ':' ~ superuser_password) | b64encode }}"
@ -425,11 +410,6 @@ sarex_postgres_processing_user: processing
sarex_postgres_workspaces_db: workspace_db sarex_postgres_workspaces_db: workspace_db
sarex_postgres_workspaces_user: workspace sarex_postgres_workspaces_user: workspace
# То же для bim. Должно совпадать с записью bim_db в contour.databases
# (infrastructure/postgresql/aero).
sarex_postgres_bim_db: bim_db
sarex_postgres_bim_user: bim
# Бакет медиафайлов django. ВНИМАНИЕ: чарт MinIO бакеты не создаёт — его нужно # Бакет медиафайлов django. ВНИМАНИЕ: чарт MinIO бакеты не создаёт — его нужно
# завести отдельно, иначе загрузка файлов будет падать. # завести отдельно, иначе загрузка файлов будет падать.
sarex_django_s3_bucket: sarex-media-storage sarex_django_s3_bucket: sarex-media-storage

View File

@ -1,36 +0,0 @@
---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: bim
resources:
- ../base
# Патчей к самому релизу НЕТ, и это проверено, а не «руки не дошли».
#
# 1. DJANGO_HOST в base уже правильный — http://backend-svc.django...:80.
# Это редкость: у processing и workspaces в base лежал несуществующий
# backend.django:8000, здесь адрес корректный.
#
# 2. DB_CERT_PATH_2/3/4 указывают на /root/yandex_pg.pem — сертификат
# управляемой СУБД Яндекса, которого в контуре нет. Зануление не нужно:
# в bim-backend-v2 файл читается ТОЛЬКО под флагом —
# if !cfg.IntegrationTest && cfg.EnableSSL { GetTLSCert(cfg.DBCertPath) }
# а при ENABLE_SSL=0 (значение из base) к строке подключения дописывается
# ?sslmode=disable и путь не трогается вовсе.
#
# 3. Пять комплектов POSTGRES_* в vault-шаблоне base смотрят на один и тот же
# хост — так и задумано: в проде это разные кластеры-реплики, в контуре
# СУБД одна, и шаблон просто повторяет её пять раз.
#
# ВНИМАНИЕ, ИЗВЕСТНЫЙ РИСК. В ветке develop у bim-backend-v2 миграции
# накатываются при старте httpserver и ошибка фатальна:
# if err := appmigrations.RunOnStartup(cfg); err != nil {
# log.Fatalf("Error applying migrations: %v", err)
# }
# а внутри RunOnStartup адрес БД взят не из конфига, а из константы
# const v5ClusterAddr = "rc1b-sse4o3n9vea392g4.mdb.yandexcloud.net:6432"
# Из контура этот хост недостижим. Если тот же код попал в образ
# contour_f9f2a39-dirty, под будет падать в CrashLoopBackOff с этим текстом —
# и лечится это только сборкой образа, конфигурацией здесь ничего не сделать.
# Образ, впрочем, собран с master и с пометкой -dirty, то есть руками, так что
# там может быть уже исправлено. Проверяется по логам первого же пода.

View File

@ -68,17 +68,6 @@ patches:
# четыре, и все четыре у celery: у backend те же переменные уже указывают # четыре, и все четыре у celery: у backend те же переменные уже указывают
# внутрь кластера. WORKFLOWS_USE=1, так что оставить как есть — значит # внутрь кластера. WORKFLOWS_USE=1, так что оставить как есть — значит
# получить зависания на недоступном домене вместо явной ошибки. # получить зависания на недоступном домене вместо явной ошибки.
# BIM API. В base адрес ведёт в namespace bim-api к сервису
# bim-backend-v2-service — ни того, ни другого в контуре нет: релиз
# разворачивается в namespace bim и называет сервис backend-svc.
# См. apps/bim/aero.
- op: test
path: /spec/values/services/celery/envs/8/name
value: BIMV2_INTERNAL_HOST
- op: replace
path: /spec/values/services/celery/envs/8/value/_default
value: http://backend-svc.bim.svc.cluster.local:80
- op: test - op: test
path: /spec/values/services/celery/envs/15/name path: /spec/values/services/celery/envs/15/name
value: SERVER_API_HOST value: SERVER_API_HOST
@ -164,16 +153,6 @@ patches:
path: /spec/values/services/backend/envs/2/value/_default path: /spec/values/services/backend/envs/2/value/_default
value: "False" value: "False"
# BIM API — то же, что у celery выше: в base адрес ведёт в namespace
# bim-api к сервису bim-backend-v2-service, а в контуре это namespace bim
# и сервис backend-svc.
- op: test
path: /spec/values/services/backend/envs/10/name
value: BIMV2_INTERNAL_HOST
- op: replace
path: /spec/values/services/backend/envs/10/value/_default
value: http://backend-svc.bim.svc.cluster.local:80
# --- Администратор платформы -------------------------------------------- # --- Администратор платформы --------------------------------------------
# Учётка приезжает из Vault под именами, которые ждёт штатная # Учётка приезжает из Vault под именами, которые ждёт штатная
# createsuperuser --noinput. Секрет кладёт ansible # createsuperuser --noinput. Секрет кладёт ansible

View File

@ -12,6 +12,3 @@ resources:
# Воркспейсы: api и фронтенд-ремоут. Фронтенд наружу не публикуется — его # Воркспейсы: api и фронтенд-ремоут. Фронтенд наружу не публикуется — его
# подгружает главный фронтенд платформы через свой nginx (/workspaces-v2/). # подгружает главный фронтенд платформы через свой nginx (/workspaces-v2/).
- ../../../apps/workspaces/aero - ../../../apps/workspaces/aero
# BIM API. Django обращается к нему через BIMV2_INTERNAL_HOST — адрес там
# чужой (namespace bim-api), поправлен патчем в apps/django/aero.
- ../../../apps/bim/aero

View File

@ -146,26 +146,6 @@ spec:
prefix: / prefix: /
service: frontend-svc.django.svc.cluster.local service: frontend-svc.django.svc.cluster.local
port: 80 port: 80
# BIM API. Отдельный поддомен, а не префикс на домене платформы:
# у сервиса нет своего фронтенда и нет общего с платформой origin,
# а его пути (/ping, /api/...) на общем домене конфликтовали бы с
# маршрутом /api/ django. Внутри кластера django обращается к нему
# напрямую по backend-svc.bim, этот маршрут — для внешних клиентов
# и отладки.
#
# Имя добавлено в dnsNames сертификата ниже: без этого браузер
# получит сертификат, в котором его нет.
bim:
namespace: gateway
hosts:
- bim.sarex.local.lonsdaleites.ru
gateways:
- gateway/contour-gateway
routes:
- path:
prefix: /
service: backend-svc.bim.svc.cluster.local
port: 80
# Management UI RabbitMQ. # Management UI RabbitMQ.
rabbitmq: rabbitmq:
namespace: gateway namespace: gateway
@ -223,7 +203,6 @@ spec:
- dashboard.sarex.local.lonsdaleites.ru - dashboard.sarex.local.lonsdaleites.ru
- rabbitmq.sarex.local.lonsdaleites.ru - rabbitmq.sarex.local.lonsdaleites.ru
- minio.sarex.local.lonsdaleites.ru - minio.sarex.local.lonsdaleites.ru
- bim.sarex.local.lonsdaleites.ru
issuerRef: issuerRef:
# Боевой издатель, см. infrastructure/cert-manager/aero/configs. # Боевой издатель, см. infrastructure/cert-manager/aero/configs.
name: letsencrypt-issuer-istio name: letsencrypt-issuer-istio