Compare commits
1 Commits
master
...
helm-maste
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
137df85ef7 |
6
.gitignore
vendored
6
.gitignore
vendored
@ -1,8 +1,4 @@
|
|||||||
.idea
|
.idea
|
||||||
.claude
|
.claude
|
||||||
CLAUDE.md
|
CLAUDE.md
|
||||||
.env
|
.env
|
||||||
|
|
||||||
tmp
|
|
||||||
.tmp/
|
|
||||||
snapshots/*
|
|
||||||
344
README.md
344
README.md
@ -1,349 +1,7 @@
|
|||||||
# FluxCD v2 Monorepooo
|
# FluxCD v2 Monorepo
|
||||||
|
|
||||||
Репозиторий Infrastructure as Code, управляемый [FluxCD v2](https://fluxcd.io/) с использованием Kustomize-оверлеев и Helm-релизов.
|
Репозиторий Infrastructure as Code, управляемый [FluxCD v2](https://fluxcd.io/) с использованием Kustomize-оверлеев и Helm-релизов.
|
||||||
|
|
||||||
## Карта инфраструктуры и межсервисных маршрутов
|
|
||||||
|
|
||||||
Диаграмма ниже показывает инфраструктурные компоненты кластера, их зависимости и типовые маршруты вызовов между бизнес-сервисами.
|
|
||||||
|
|
||||||
```mermaid
|
|
||||||
flowchart LR
|
|
||||||
%% ===== Внешний контур =====
|
|
||||||
User([👤 Пользователь<br/>Web / Mobile]):::ext
|
|
||||||
Admin([🛡 Администратор<br/>kubectl / flux]):::ext
|
|
||||||
LE([🔐 Let's Encrypt<br/>ACME v2]):::ext
|
|
||||||
GitRepo([📦 Git Repository<br/>FluxCD source]):::ext
|
|
||||||
OCI([🐳 OCI Registry<br/>cr.yandex]):::ext
|
|
||||||
|
|
||||||
%% ===== GitOps =====
|
|
||||||
subgraph GITOPS["⚙️ GitOps Control Plane"]
|
|
||||||
direction TB
|
|
||||||
FluxSource[source-controller]:::flux
|
|
||||||
FluxKust[kustomize-controller]:::flux
|
|
||||||
FluxHelm[helm-controller]:::flux
|
|
||||||
FluxNotif[notification-controller]:::flux
|
|
||||||
FluxSource --> FluxKust
|
|
||||||
FluxSource --> FluxHelm
|
|
||||||
FluxKust --> FluxNotif
|
|
||||||
FluxHelm --> FluxNotif
|
|
||||||
end
|
|
||||||
|
|
||||||
%% ===== Edge / Service Mesh =====
|
|
||||||
subgraph EDGE["🌐 Edge & Service Mesh — istio-system"]
|
|
||||||
direction TB
|
|
||||||
Gateway["Istio Gateway<br/>:443 / :80<br/>LoadBalancer"]:::mesh
|
|
||||||
Pilot["istiod / Pilot<br/>xDS :15010/:15012"]:::mesh
|
|
||||||
Base[Istio Base<br/>CRDs + RBAC]:::mesh
|
|
||||||
Cert["cert-manager<br/>v1.x"]:::mesh
|
|
||||||
IssuerProd[ClusterIssuer<br/>letsencrypt-prod]:::mesh
|
|
||||||
IssuerIstio[ClusterIssuer<br/>letsencrypt-istio]:::mesh
|
|
||||||
Pilot -->|sidecar inject| Gateway
|
|
||||||
Base --> Pilot
|
|
||||||
Cert --> IssuerProd
|
|
||||||
Cert --> IssuerIstio
|
|
||||||
IssuerIstio -. TLS cert .-> Gateway
|
|
||||||
end
|
|
||||||
|
|
||||||
%% ===== Платформа =====
|
|
||||||
subgraph PLATFORM["🛠 Платформа"]
|
|
||||||
direction TB
|
|
||||||
Dashboard["K8s Dashboard<br/>UI :8443"]:::platform
|
|
||||||
LPP["local-path-provisioner<br/>StorageClass: local-path"]:::platform
|
|
||||||
Vault["HashiCorp Vault<br/>:8200 KV/Transit"]:::platform
|
|
||||||
S3Proxy["S3 Proxy<br/>S3 API gateway"]:::platform
|
|
||||||
end
|
|
||||||
|
|
||||||
%% ===== Identity =====
|
|
||||||
subgraph IDENTITY["🪪 Identity & SSO"]
|
|
||||||
direction TB
|
|
||||||
Zitadel["Zitadel<br/>OIDC :8080"]:::identity
|
|
||||||
Keycloak["Keycloak<br/>OIDC/SAML :8080"]:::identity
|
|
||||||
OpenLDAP["OpenLDAP<br/>:389 / :636"]:::identity
|
|
||||||
Keycloak -- "LDAP federation" --> OpenLDAP
|
|
||||||
end
|
|
||||||
|
|
||||||
%% ===== Данные =====
|
|
||||||
subgraph DATA["🗄 Хранилища данных"]
|
|
||||||
direction TB
|
|
||||||
PG[("PostgreSQL<br/>:5432<br/>HA primary/replica")]:::data
|
|
||||||
Redis[("Redis<br/>:6379<br/>cache + pub/sub")]:::data
|
|
||||||
MinIO[("MinIO<br/>S3 :9000<br/>console :9001")]:::data
|
|
||||||
end
|
|
||||||
|
|
||||||
%% ===== Messaging =====
|
|
||||||
subgraph MSG["📨 Messaging"]
|
|
||||||
direction TB
|
|
||||||
Kafka[["Kafka<br/>:9092 / :9093 SASL<br/>3 brokers"]]:::msg
|
|
||||||
ZK[["ZooKeeper / KRaft<br/>:2181"]]:::msg
|
|
||||||
RMQ[["RabbitMQ<br/>:5672 / mgmt :15672"]]:::msg
|
|
||||||
Kafka --- ZK
|
|
||||||
end
|
|
||||||
|
|
||||||
%% ===== BPM =====
|
|
||||||
subgraph BPM["🔧 BPM"]
|
|
||||||
direction TB
|
|
||||||
Camunda["Camunda Platform<br/>REST :8080 / Tasklist"]:::app
|
|
||||||
Operate["Camunda Operate<br/>UI :8081"]:::app
|
|
||||||
end
|
|
||||||
|
|
||||||
%% ===== Бизнес-сервисы (каждый в своём namespace) =====
|
|
||||||
subgraph APPS["💼 Бизнес-сервисы — namespaces"]
|
|
||||||
direction LR
|
|
||||||
CI["ns: control-interface"]:::app
|
|
||||||
Django["ns: django"]:::app
|
|
||||||
EAV["ns: eav"]:::app
|
|
||||||
Workspaces["ns: workspaces"]:::app
|
|
||||||
Projects["ns: projects"]:::app
|
|
||||||
PM["ns: pm"]:::app
|
|
||||||
Contracts["ns: contracts"]:::app
|
|
||||||
Resources["ns: resources"]:::app
|
|
||||||
Subs["ns: subscriptions"]:::app
|
|
||||||
SysLog["ns: system-log"]:::app
|
|
||||||
MsgHub["ns: message-hub"]:::app
|
|
||||||
FaaS["ns: faas"]:::app
|
|
||||||
Flows["ns: flows"]:::app
|
|
||||||
Docs["ns: documentations"]:::app
|
|
||||||
DocLink["ns: document-link"]:::app
|
|
||||||
Attach["ns: attachments"]:::app
|
|
||||||
Transmittal["ns: transmittal"]:::app
|
|
||||||
CDE["ns: cde"]:::app
|
|
||||||
Drawings["ns: drawings"]:::app
|
|
||||||
BIM["ns: bim"]:::app
|
|
||||||
Stamp["ns: stamp-verification"]:::app
|
|
||||||
Inspect["ns: inspections"]:::app
|
|
||||||
Checklists["ns: checklists"]:::app
|
|
||||||
Remarks["ns: remarks"]:::app
|
|
||||||
Issues["ns: issues"]:::app
|
|
||||||
RFI["ns: rfi"]:::app
|
|
||||||
Reviews["ns: reviews"]:::app
|
|
||||||
Prescr["ns: prescriptions"]:::app
|
|
||||||
Compare["ns: comparisons"]:::app
|
|
||||||
Measure["ns: measurements"]:::app
|
|
||||||
Mapper["ns: mapper"]:::app
|
|
||||||
XSection["ns: cross-section"]:::app
|
|
||||||
Process["ns: processing"]:::app
|
|
||||||
Notes["ns: notes"]:::app
|
|
||||||
end
|
|
||||||
|
|
||||||
%% ===== GitOps потоки =====
|
|
||||||
Admin ==>|git push| GitRepo
|
|
||||||
GitRepo ==>|pull/poll| FluxSource
|
|
||||||
OCI ==>|OCI charts| FluxSource
|
|
||||||
FluxKust ==>|apply manifests| EDGE
|
|
||||||
FluxKust ==>|apply manifests| PLATFORM
|
|
||||||
FluxKust ==>|apply manifests| IDENTITY
|
|
||||||
FluxHelm ==>|HelmRelease| DATA
|
|
||||||
FluxHelm ==>|HelmRelease| MSG
|
|
||||||
FluxHelm ==>|HelmRelease| BPM
|
|
||||||
FluxHelm ==>|HelmRelease| APPS
|
|
||||||
|
|
||||||
%% ===== Внешний трафик =====
|
|
||||||
User ==>|HTTPS 443| Gateway
|
|
||||||
LE -. ACME HTTP-01 .-> Cert
|
|
||||||
Gateway ==>|VirtualService<br/>mTLS| CI
|
|
||||||
Gateway ==>|/api| Django
|
|
||||||
Gateway ==>|/bim| BIM
|
|
||||||
Gateway ==>|/cde| CDE
|
|
||||||
Gateway ==>|/docs| Docs
|
|
||||||
Gateway ==>|/pm| PM
|
|
||||||
Gateway ==>|VirtualService| Camunda
|
|
||||||
Gateway ==>|VirtualService| Operate
|
|
||||||
Gateway ==>|/auth| Keycloak
|
|
||||||
Gateway ==>|/oauth| Zitadel
|
|
||||||
Gateway ==>|/dashboard| Dashboard
|
|
||||||
Gateway ==>|/minio| MinIO
|
|
||||||
Admin -.->|kubectl| Dashboard
|
|
||||||
|
|
||||||
%% ===== Frontend → backend (через control-interface) =====
|
|
||||||
CI -- "API gateway" --> Django
|
|
||||||
CI -- "API gateway" --> PM
|
|
||||||
CI -- "API gateway" --> Projects
|
|
||||||
CI -- "API gateway" --> Workspaces
|
|
||||||
|
|
||||||
%% ===== Подключения к данным =====
|
|
||||||
Django -- "JDBC/ORM" --> PG
|
|
||||||
EAV -- "JDBC" --> PG
|
|
||||||
PM -- "JDBC" --> PG
|
|
||||||
Contracts -- "JDBC" --> PG
|
|
||||||
Resources -- "JDBC" --> PG
|
|
||||||
Projects -- "JDBC" --> PG
|
|
||||||
Workspaces -- "JDBC" --> PG
|
|
||||||
Subs -- "JDBC" --> PG
|
|
||||||
SysLog -- "JDBC" --> PG
|
|
||||||
Docs -- "JDBC" --> PG
|
|
||||||
DocLink -- "JDBC" --> PG
|
|
||||||
CDE -- "JDBC" --> PG
|
|
||||||
BIM -- "JDBC" --> PG
|
|
||||||
Drawings -- "JDBC" --> PG
|
|
||||||
Inspect -- "JDBC" --> PG
|
|
||||||
Checklists -- "JDBC" --> PG
|
|
||||||
Issues -- "JDBC" --> PG
|
|
||||||
Remarks -- "JDBC" --> PG
|
|
||||||
RFI -- "JDBC" --> PG
|
|
||||||
Reviews -- "JDBC" --> PG
|
|
||||||
Prescr -- "JDBC" --> PG
|
|
||||||
Compare -- "JDBC" --> PG
|
|
||||||
Measure -- "JDBC" --> PG
|
|
||||||
Mapper -- "JDBC" --> PG
|
|
||||||
XSection -- "JDBC" --> PG
|
|
||||||
Notes -- "JDBC" --> PG
|
|
||||||
Stamp -- "JDBC" --> PG
|
|
||||||
Transmittal -- "JDBC" --> PG
|
|
||||||
Camunda -- "JDBC" --> PG
|
|
||||||
Operate -- "JDBC" --> PG
|
|
||||||
Zitadel -- "JDBC" --> PG
|
|
||||||
Keycloak -- "JDBC" --> PG
|
|
||||||
|
|
||||||
%% ===== Redis (общий кэш / sessions) =====
|
|
||||||
Django -- "session/cache" --> Redis
|
|
||||||
CI -- "session" --> Redis
|
|
||||||
PM -- "cache" --> Redis
|
|
||||||
Workspaces -- "cache" --> Redis
|
|
||||||
Subs -- "pub/sub realtime" --> Redis
|
|
||||||
MsgHub -- "pub/sub" --> Redis
|
|
||||||
Flows -- "state" --> Redis
|
|
||||||
FaaS -- "queue" --> Redis
|
|
||||||
Camunda -- "cache" --> Redis
|
|
||||||
Keycloak -- "session" --> Redis
|
|
||||||
|
|
||||||
%% ===== S3 / объектное хранилище =====
|
|
||||||
Attach -- "PUT/GET" --> S3Proxy
|
|
||||||
Docs -- "filestream" --> S3Proxy
|
|
||||||
BIM -- "IFC/RVT" --> S3Proxy
|
|
||||||
Drawings -- "DWG/PDF" --> S3Proxy
|
|
||||||
CDE -- "files" --> S3Proxy
|
|
||||||
Compare -- "rendered diff" --> S3Proxy
|
|
||||||
Stamp -- "signed PDF" --> S3Proxy
|
|
||||||
Transmittal -- "bundles" --> S3Proxy
|
|
||||||
Process -- "raw + результаты" --> S3Proxy
|
|
||||||
Mapper -- "tiles" --> S3Proxy
|
|
||||||
Measure -- "snapshots" --> S3Proxy
|
|
||||||
XSection -- "профили" --> S3Proxy
|
|
||||||
S3Proxy -- "S3 API" --> MinIO
|
|
||||||
|
|
||||||
%% ===== Vault (secrets) =====
|
|
||||||
Django -. "kv" .-> Vault
|
|
||||||
Camunda -. "approle" .-> Vault
|
|
||||||
Keycloak -. "kv" .-> Vault
|
|
||||||
Zitadel -. "kv" .-> Vault
|
|
||||||
FaaS -. "approle" .-> Vault
|
|
||||||
Flows -. "approle" .-> Vault
|
|
||||||
|
|
||||||
%% ===== Storage / PVC =====
|
|
||||||
PG -.->|PVC| LPP
|
|
||||||
Redis -.->|PVC| LPP
|
|
||||||
Kafka -.->|PVC| LPP
|
|
||||||
ZK -.->|PVC| LPP
|
|
||||||
RMQ -.->|PVC| LPP
|
|
||||||
MinIO -.->|PVC| LPP
|
|
||||||
Vault -.->|PVC| LPP
|
|
||||||
|
|
||||||
%% ===== Kafka (event bus) =====
|
|
||||||
SysLog -- "consume audit.*" --> Kafka
|
|
||||||
MsgHub -- "produce notify.*" --> Kafka
|
|
||||||
Subs -- "consume notify.*" --> Kafka
|
|
||||||
Flows -- "produce/consume flows.*" --> Kafka
|
|
||||||
Camunda -- "produce bpm.events" --> Kafka
|
|
||||||
Operate -- "consume zeebe-records" --> Kafka
|
|
||||||
BIM -- "produce bim.processed" --> Kafka
|
|
||||||
Drawings -- "produce drawings.uploaded" --> Kafka
|
|
||||||
Process -- "consume processing.jobs" --> Kafka
|
|
||||||
Compare -- "consume drawings.uploaded" --> Kafka
|
|
||||||
Inspect -- "produce inspect.events" --> Kafka
|
|
||||||
Issues -- "consume inspect.events" --> Kafka
|
|
||||||
Remarks -- "produce remarks.events" --> Kafka
|
|
||||||
Reviews -- "consume remarks.events" --> Kafka
|
|
||||||
|
|
||||||
%% ===== RabbitMQ (work queues) =====
|
|
||||||
FaaS -- "consume tasks.*" --> RMQ
|
|
||||||
Flows -- "publish tasks.*" --> RMQ
|
|
||||||
Process -- "publish jobs" --> RMQ
|
|
||||||
Mapper -- "consume tile.jobs" --> RMQ
|
|
||||||
XSection -- "consume xs.jobs" --> RMQ
|
|
||||||
Stamp -- "consume sign.jobs" --> RMQ
|
|
||||||
Camunda -- "consume bpm.tasks" --> RMQ
|
|
||||||
|
|
||||||
%% ===== Межсервисные REST маршруты =====
|
|
||||||
PM -- "REST" --> Projects
|
|
||||||
PM -- "REST" --> Contracts
|
|
||||||
PM -- "REST" --> Resources
|
|
||||||
Projects -- "REST" --> Workspaces
|
|
||||||
Contracts -- "REST" --> Resources
|
|
||||||
Inspect -- "REST" --> Checklists
|
|
||||||
Inspect -- "REST" --> Issues
|
|
||||||
Issues -- "REST" --> Remarks
|
|
||||||
Reviews -- "REST" --> RFI
|
|
||||||
Reviews -- "REST" --> Prescr
|
|
||||||
RFI -- "REST" --> DocLink
|
|
||||||
DocLink --> Docs
|
|
||||||
DocLink --> CDE
|
|
||||||
CDE -- "REST" --> Docs
|
|
||||||
CDE -- "REST" --> Drawings
|
|
||||||
CDE -- "REST" --> BIM
|
|
||||||
Transmittal -- "REST" --> CDE
|
|
||||||
Transmittal -- "REST" --> Docs
|
|
||||||
Drawings -- "REST" --> Compare
|
|
||||||
Drawings -- "REST" --> Stamp
|
|
||||||
Measure -- "REST" --> Mapper
|
|
||||||
Mapper -- "REST" --> XSection
|
|
||||||
XSection --> Process
|
|
||||||
BIM -- "REST" --> Process
|
|
||||||
Notes -- "REST" --> DocLink
|
|
||||||
Flows -- "trigger" --> FaaS
|
|
||||||
Flows -- "start" --> Camunda
|
|
||||||
Camunda -- "callback" --> Flows
|
|
||||||
EAV -- "schemas" --> Django
|
|
||||||
MsgHub -- "deliver email/push" --> Subs
|
|
||||||
|
|
||||||
%% ===== AuthN / AuthZ =====
|
|
||||||
Django -. "OIDC validate" .-> Keycloak
|
|
||||||
CI -. "OIDC login" .-> Keycloak
|
|
||||||
PM -. "JWT" .-> Keycloak
|
|
||||||
Camunda -. "JWT" .-> Zitadel
|
|
||||||
Operate -. "OIDC" .-> Zitadel
|
|
||||||
Dashboard -. "OIDC" .-> Keycloak
|
|
||||||
BIM -. "JWT" .-> Keycloak
|
|
||||||
CDE -. "JWT" .-> Keycloak
|
|
||||||
Docs -. "JWT" .-> Keycloak
|
|
||||||
|
|
||||||
%% ===== Service mesh sidecar metrics =====
|
|
||||||
CI -. "envoy" .-> Pilot
|
|
||||||
Django -. "envoy" .-> Pilot
|
|
||||||
Camunda -. "envoy" .-> Pilot
|
|
||||||
BIM -. "envoy" .-> Pilot
|
|
||||||
Flows -. "envoy" .-> Pilot
|
|
||||||
|
|
||||||
|
|
||||||
%% ===== Стили =====
|
|
||||||
classDef ext fill:#1f2937,stroke:#9ca3af,stroke-width:2px,color:#f9fafb
|
|
||||||
classDef flux fill:#6366f1,stroke:#3730a3,stroke-width:2px,color:#fff
|
|
||||||
classDef mesh fill:#7c3aed,stroke:#4c1d95,stroke-width:2px,color:#fff
|
|
||||||
classDef platform fill:#0ea5e9,stroke:#075985,stroke-width:2px,color:#fff
|
|
||||||
classDef identity fill:#f59e0b,stroke:#92400e,stroke-width:2px,color:#fff
|
|
||||||
classDef data fill:#10b981,stroke:#065f46,stroke-width:2px,color:#fff
|
|
||||||
classDef msg fill:#ef4444,stroke:#991b1b,stroke-width:2px,color:#fff
|
|
||||||
classDef app fill:#ec4899,stroke:#9d174d,stroke-width:2px,color:#fff
|
|
||||||
|
|
||||||
style GITOPS fill:#e0e7ff,stroke:#6366f1,stroke-width:2px
|
|
||||||
style EDGE fill:#ede9fe,stroke:#7c3aed,stroke-width:2px
|
|
||||||
style PLATFORM fill:#e0f2fe,stroke:#0ea5e9,stroke-width:2px
|
|
||||||
style IDENTITY fill:#fef3c7,stroke:#f59e0b,stroke-width:2px
|
|
||||||
style DATA fill:#d1fae5,stroke:#10b981,stroke-width:2px
|
|
||||||
style MSG fill:#fee2e2,stroke:#ef4444,stroke-width:2px
|
|
||||||
style BPM fill:#fce7f3,stroke:#ec4899,stroke-width:2px
|
|
||||||
style APPS fill:#fce7f3,stroke:#ec4899,stroke-width:2px
|
|
||||||
```
|
|
||||||
|
|
||||||
📂 **Подробные диаграммы по каждому бизнес-сервису:** [`docs/apps/`](./docs/apps/README.md)
|
|
||||||
|
|
||||||
**Легенда:**
|
|
||||||
- 🟪 **Edge / Mesh** — терминация TLS, маршрутизация и mTLS между сервисами (Istio + cert-manager)
|
|
||||||
- 🟦 **Платформа** — служебные компоненты (storage, secrets, S3 proxy, dashboard)
|
|
||||||
- 🟧 **Identity** — единый вход и федерация пользователей (Zitadel, Keycloak, OpenLDAP)
|
|
||||||
- 🟩 **Данные** — постоянные хранилища (PostgreSQL, Redis, MinIO)
|
|
||||||
- 🟥 **Messaging** — асинхронный обмен (Kafka, RabbitMQ)
|
|
||||||
- 🟪 **Бизнес-сервисы** — прикладная логика (Camunda, бизнес-приложения)
|
|
||||||
|
|
||||||
## Структура репозитория
|
## Структура репозитория
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@ -1,85 +0,0 @@
|
|||||||
# =============================================================================
|
|
||||||
# AMS-Sync — пример конфигурации (.env)
|
|
||||||
# Версия: 1.0.0
|
|
||||||
# Скопируйте в .env и заполните значения.
|
|
||||||
#
|
|
||||||
# Сервис имеет два режима запуска:
|
|
||||||
# - `run` — демон-потребитель Kafka (CMD контейнера), использует блоки
|
|
||||||
# App / Kafka / Zitadel / Logger / Healthcheck (+ Auth);
|
|
||||||
# - CLI — команды migrate / sync / diff (запускаются вручную),
|
|
||||||
# дополнительно используют блоки Auth / User server / БД sarex.
|
|
||||||
# Значения по умолчанию проставлены там, где они заданы в коде.
|
|
||||||
# =============================================================================
|
|
||||||
|
|
||||||
# --- Приложение (без префикса) ---
|
|
||||||
# LOCAL | STAGE | PREPROD | PRODUCTION
|
|
||||||
ENVIRONMENT=LOCAL
|
|
||||||
# Топик Kafka с событиями пользователей
|
|
||||||
AMS_SYNC_TOPIC=ams-sync
|
|
||||||
# ID организации-хоста в Zitadel (обязателен)
|
|
||||||
HOST_ORGANIZATION_ID=
|
|
||||||
# При True входящие model_created обрабатываются через import_user (с верификацией)
|
|
||||||
VERIFY_USERS=False
|
|
||||||
|
|
||||||
# --- Kafka (префикс KAFKA_) ---
|
|
||||||
# JSON-массив адресов брокеров, напр. ["host:9091"]
|
|
||||||
KAFKA_BOOTSTRAP_SERVERS=
|
|
||||||
KAFKA_SASL_PLAIN_USERNAME=
|
|
||||||
KAFKA_SASL_PLAIN_PASSWORD=
|
|
||||||
# Путь к CA-сертификату для SSL-подключения к Kafka
|
|
||||||
KAFKA_SSL_CAFILE=
|
|
||||||
# PLAINTEXT | SSL | SASL_PLAINTEXT | SASL_SSL
|
|
||||||
KAFKA_SECURITY_PROTOCOL=SASL_SSL
|
|
||||||
# PLAIN | SCRAM-SHA-256 | SCRAM-SHA-512
|
|
||||||
KAFKA_SASL_MECHANISM=SCRAM-SHA-512
|
|
||||||
|
|
||||||
# --- Zitadel / AMS (префикс ZITADEL_) ---
|
|
||||||
# Хост Zitadel (обязателен для адаптера пользователей)
|
|
||||||
ZITADEL_HOST=https://idp.dev.stage.sarex.io
|
|
||||||
# Service-токен доступа к API Zitadel (обязателен)
|
|
||||||
ZITADEL_SERVICE_ACCESS_TOKEN=
|
|
||||||
# ВНИМАНИЕ: переменную читают сразу несколько классов с разным типом
|
|
||||||
# - адаптер пользователей ожидает int (минуты), напр. 10
|
|
||||||
# - адаптеры организаций/грантов ожидают строку, напр. "10m"
|
|
||||||
# Задавайте int, иначе адаптер пользователей упадёт на разборе.
|
|
||||||
ZITADEL_TIMEOUT=10
|
|
||||||
# Максимальный размер пачки при bulk-импорте
|
|
||||||
ZITADEL_MAX_BATCH=2000
|
|
||||||
# Эндпоинты (обычно не переопределяются)
|
|
||||||
ZITADEL_USERS_MANAGEMENT_ENDPOINT=management/v1/users
|
|
||||||
ZITADEL_USERS_ENDPOINT=v2/users
|
|
||||||
|
|
||||||
# --- Логирование (префикс LOG_) ---
|
|
||||||
LOG_LEVEL=INFO
|
|
||||||
# LOG_FORMAT=%(asctime)s [%(levelname)s]: %(message)s
|
|
||||||
|
|
||||||
# --- TCP Healthcheck (префикс HEALTHCHECK_) ---
|
|
||||||
HEALTHCHECK_HOST=0.0.0.0
|
|
||||||
HEALTHCHECK_PORT=8008
|
|
||||||
HEALTHCHECK_MAX_CONNECTIONS=10
|
|
||||||
HEALTHCHECK_REPLY=healthy
|
|
||||||
|
|
||||||
# --- Auth: sarex-backend (префикс AUTH_) ---
|
|
||||||
# Используется для получения JWT под админом (режим run и CLI)
|
|
||||||
AUTH_HOST=https://stage.sarex.io
|
|
||||||
AUTH_ADMIN_USERNAME=
|
|
||||||
AUTH_ADMIN_PASSWORD=
|
|
||||||
AUTH_AUTH_ENDPOINT=api/token/
|
|
||||||
|
|
||||||
# --- Sarex user server (префикс USER_SERVER_, только CLI) ---
|
|
||||||
# Источник метадаты пользователя для миграции/синхронизации
|
|
||||||
USER_SERVER_HOST=https://stage.sarex.io
|
|
||||||
USER_SERVER_USERS_ENDPOINT=api/core/admin/users
|
|
||||||
|
|
||||||
# --- База данных sarex-backend (префикс USER_DB_, только CLI) ---
|
|
||||||
# Источник пользователей/компаний для команд migrate/sync/diff
|
|
||||||
USER_DB_NAME=postgres
|
|
||||||
USER_DB_USER=postgres
|
|
||||||
USER_DB_PASSWORD=password
|
|
||||||
USER_DB_HOST=127.0.0.1
|
|
||||||
USER_DB_PORT=5432
|
|
||||||
# Имена таблиц (обычно не переопределяются)
|
|
||||||
USER_DB_USER_TABLE_NAME=base_baseuser
|
|
||||||
USER_DB_COMPANYUSER_TABLE_NAME=core_companyuser
|
|
||||||
USER_DB_COMPANY_TABLE_NAME=core_company
|
|
||||||
USER_DB_ITER_SIZE=10000
|
|
||||||
@ -1,218 +0,0 @@
|
|||||||
# Конфигурация проекта ams-sync
|
|
||||||
# Версия: 1.0.0
|
|
||||||
|
|
||||||
Документ описывает все переменные окружения и способы конфигурирования сервиса.
|
|
||||||
|
|
||||||
## Что делает сервис
|
|
||||||
|
|
||||||
`ams-sync` — утилита синхронизации пользователей sarex-backend с системой управления доступом (AMS) на базе **Zitadel**. У сервиса два режима работы:
|
|
||||||
|
|
||||||
- **`run`** — фоновый демон-потребитель Kafka (`src/internal/app/service/sync_service.py`, точка входа `python3 cmd.py run`, это же `CMD` контейнера). Слушает топик событий пользователей и создаёт/обновляет пользователей в Zitadel. Параллельно поднимает TCP-healthcheck.
|
|
||||||
- **CLI-команды** (`migrate` / `sync` / `diff`, реализованы в `src/internal/app/console.py`) — разовые задачи миграции и синхронизации, запускаются вручную. Читают пользователей и компании напрямую из БД sarex-backend.
|
|
||||||
|
|
||||||
## Способы конфигурирования
|
|
||||||
|
|
||||||
Сервис настраивается **только через переменные окружения**. Разбор выполняется библиотекой [`pydantic-settings`](https://docs.pydantic.dev/latest/concepts/pydantic_settings/). В отличие от монолитного `AppSettings`, настройки разбиты на несколько независимых классов, каждый со своим префиксом:
|
|
||||||
|
|
||||||
| Класс | Файл | Префикс |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| `Settings` (приложение) | `src/internal/app/service/settings.py` | *(без префикса)* |
|
|
||||||
| `KafkaSettings` | `src/internal/app/service/settings.py` | `kafka_` |
|
|
||||||
| `Settings` (console) | `src/internal/app/console.py` | *(без префикса)* |
|
|
||||||
| `Settings` (logger) | `src/internal/adapter/logger/logger.py` | `log_` |
|
|
||||||
| `Settings` (healthcheck) | `src/internal/adapter/tcphealthcheck/healthcheck.py` | `healthcheck_` |
|
|
||||||
| `Settings` (auth) | `src/internal/adapter/auth/http/adapter.py` | `auth_` |
|
|
||||||
| `Settings` (user server) | `src/internal/adapter/users/http/adapter.py` | `user_server_` |
|
|
||||||
| `Settings` (zitadel users) | `src/internal/adapter/users/zitadel/adapter.py` | `zitadel_` |
|
|
||||||
| `Settings` (organizations) | `src/internal/adapter/organizations/adapter.py` | `zitadel_` |
|
|
||||||
| `Settings` (grants) | `src/internal/adapter/grants/adapter.py` | `zitadel_` |
|
|
||||||
| `Settings` (user repo) | `src/internal/repository/users/repository.py` | `user_db_` |
|
|
||||||
| `Settings` (company repo) | `src/internal/repository/companies/repository.py` | `user_db_` |
|
|
||||||
|
|
||||||
Особенности разбора (`SettingsConfigDict`):
|
|
||||||
|
|
||||||
- у каждого класса задан `env_file=".env"`, `env_file_encoding="utf-8"` и `extra="ignore"` — при наличии файла `.env` в рабочей директории он загружается автоматически, лишние переменные игнорируются;
|
|
||||||
- вложенного разделителя нет — каждая группа настроек читается отдельным классом по своему префиксу (либо без префикса для классов приложения);
|
|
||||||
- CLI-команды принимают флаг `--env-file=` (по умолчанию `.env`), который прокидывается в конструкторы настроек как `_env_file`; режим `run` всегда читает `.env`.
|
|
||||||
|
|
||||||
Отдельного конфиг-файла (yaml/toml) у приложения нет.
|
|
||||||
|
|
||||||
Источники переменных по способам запуска:
|
|
||||||
|
|
||||||
| Способ запуска | Откуда берутся переменные |
|
|
||||||
| --- | --- |
|
|
||||||
| Локально (CLI) | Файл `.env` (или указанный через `--env-file=`) в директории с `cmd.py` и/или переменные окружения процесса |
|
|
||||||
| Локально (контейнер) | `Dockerfile`: `CMD ["python3", "cmd.py", "run"]`; переменные пробрасываются в окружение контейнера |
|
|
||||||
| Kubernetes (Helm) | `.helm/values.yaml`: блоки `universal-chart.envs` (обычные значения) и `universal-chart.secretEnvs` (значения из k8s-секретов). Базовый чарт — `universal-chart` |
|
|
||||||
| CI/CD (GitLab) | `.gitlab-ci.yml`: переменные пайплайна в `workflow.rules` (`RELEASE_NAME`, `STAND`, `CHART_*`, `IMAGE_NAME`, `HELM_SET_ARGS` и т.п.) |
|
|
||||||
|
|
||||||
Команды CLI (`python3 cmd.py <command>`, см. `README.md`):
|
|
||||||
|
|
||||||
| Команда | Аргументы | Назначение |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| `run` | — | Демон-потребитель Kafka + TCP-healthcheck (режим контейнера) |
|
|
||||||
| `migrate` | `--user-id`, `--with-password/--no-with-password` | Миграция пользователя(ей) из БД sarex-backend в Zitadel. Без `--user-id` мигрируются все (bulk) |
|
|
||||||
| `sync` | `--user-id`, `--company-id` | Синхронизация метадаты пользователя(ей) из БД sarex-backend в Zitadel |
|
|
||||||
| `diff` | — | Сравнение множества пользователей БД и Zitadel, отчёт по отсутствующим |
|
|
||||||
|
|
||||||
## Переменные приложения
|
|
||||||
|
|
||||||
Дефолт `—` означает, что значение обязательно (иначе ошибка старта).
|
|
||||||
|
|
||||||
### App (без префикса)
|
|
||||||
|
|
||||||
Класс `Settings` в `src/internal/app/service/settings.py` (режим `run`) и `Settings` в `console.py` (CLI).
|
|
||||||
|
|
||||||
| Переменная | Тип | Значение по умолчанию | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `ENVIRONMENT` | enum | `LOCAL` | Окружение: `LOCAL`/`STAGE`/`PREPROD`/`PRODUCTION` |
|
|
||||||
| `AMS_SYNC_TOPIC` | string | `ams-sync` | Имя топика Kafka с событиями пользователей |
|
|
||||||
| `HOST_ORGANIZATION_ID` | string | — | ID организации-хоста в Zitadel (обязателен и в `run`, и в CLI) |
|
|
||||||
| `VERIFY_USERS` | bool | `False` | При `True` события `model_created` обрабатываются через `import_user` (с верификацией e-mail), иначе через обычный `create` |
|
|
||||||
|
|
||||||
### Kafka (`KAFKA_*`)
|
|
||||||
|
|
||||||
| Переменная | Тип | Значение по умолчанию | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `KAFKA_BOOTSTRAP_SERVERS` | list[str] (JSON) | — | Адреса брокеров, напр. `["host:9091"]` |
|
|
||||||
| `KAFKA_SASL_PLAIN_USERNAME` | string | — | Логин SASL |
|
|
||||||
| `KAFKA_SASL_PLAIN_PASSWORD` | string | — | Пароль SASL |
|
|
||||||
| `KAFKA_SSL_CAFILE` | string | — | Путь к CA-сертификату для SSL |
|
|
||||||
| `KAFKA_SECURITY_PROTOCOL` | string | `SASL_SSL` | Протокол безопасности |
|
|
||||||
| `KAFKA_SASL_MECHANISM` | string | `SCRAM-SHA-512` | Механизм SASL |
|
|
||||||
|
|
||||||
### Zitadel / AMS (`ZITADEL_*`)
|
|
||||||
|
|
||||||
Префикс используют три класса (адаптеры пользователей, организаций и грантов). Общие поля:
|
|
||||||
|
|
||||||
| Переменная | Тип | Значение по умолчанию | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `ZITADEL_SERVICE_ACCESS_TOKEN` | string | — | Service-токен доступа к API Zitadel (Bearer) |
|
|
||||||
| `ZITADEL_HOST` | string | — (у адаптера пользователей); `https://idp.dev.stage.sarex.io` (у адаптеров организаций/грантов) | Базовый URL Zitadel |
|
|
||||||
| `ZITADEL_TIMEOUT` | int / string | `10` (адаптер пользователей, минуты) / `10m` (организации, гранты) | Таймаут. См. замечание о конфликте типов ниже |
|
|
||||||
| `ZITADEL_MAX_BATCH` | int | `2000` | Максимум пользователей в одной пачке bulk-импорта |
|
|
||||||
| `ZITADEL_USERS_MANAGEMENT_ENDPOINT` | string | `management/v1/users` | Базовый путь management-API |
|
|
||||||
| `ZITADEL_USERS_ENDPOINT` | string | `v2/users` | Базовый путь users-API v2 |
|
|
||||||
|
|
||||||
### Логирование (`LOG_*`)
|
|
||||||
|
|
||||||
| Переменная | Тип | Значение по умолчанию | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `LOG_LEVEL` | string | `INFO` | Уровень логирования |
|
|
||||||
| `LOG_FORMAT` | string | `%(asctime)s [%(levelname)s]: %(message)s` | Формат строки лога |
|
|
||||||
|
|
||||||
Логи пишутся в stdout и в файл `latest.log` в рабочей директории.
|
|
||||||
|
|
||||||
### TCP Healthcheck (`HEALTHCHECK_*`)
|
|
||||||
|
|
||||||
Только режим `run`. Поднимает сырой TCP-сокет, отвечающий строкой-ответом на каждое подключение.
|
|
||||||
|
|
||||||
| Переменная | Тип | Значение по умолчанию | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `HEALTHCHECK_HOST` | string | `0.0.0.0` | Адрес прослушивания |
|
|
||||||
| `HEALTHCHECK_PORT` | int | `8008` | Порт |
|
|
||||||
| `HEALTHCHECK_MAX_CONNECTIONS` | int | `10` | Размер очереди подключений (`listen`) |
|
|
||||||
| `HEALTHCHECK_REPLY` | string | `healthy` | Строка-ответ на подключение |
|
|
||||||
|
|
||||||
### Auth: sarex-backend (`AUTH_*`)
|
|
||||||
|
|
||||||
Получение JWT под сервисным админом (используется в обоих режимах — адаптер создаётся и в `run`, и в CLI).
|
|
||||||
|
|
||||||
| Переменная | Тип | Значение по умолчанию | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `AUTH_HOST` | string | — | Базовый URL sarex-backend |
|
|
||||||
| `AUTH_ADMIN_USERNAME` | string | — | Логин админа |
|
|
||||||
| `AUTH_ADMIN_PASSWORD` | string | — | Пароль админа |
|
|
||||||
| `AUTH_AUTH_ENDPOINT` | string | `api/token/` | Путь получения токена |
|
|
||||||
|
|
||||||
### Sarex user server (`USER_SERVER_*`) — только CLI
|
|
||||||
|
|
||||||
Источник метадаты пользователя при миграции/синхронизации.
|
|
||||||
|
|
||||||
| Переменная | Тип | Значение по умолчанию | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `USER_SERVER_HOST` | string | — | Базовый URL сервиса пользователей sarex-backend |
|
|
||||||
| `USER_SERVER_USERS_ENDPOINT` | string | `api/core/admin/users` | Базовый путь эндпоинта пользователей |
|
|
||||||
|
|
||||||
### База данных sarex-backend (`USER_DB_*`) — только CLI
|
|
||||||
|
|
||||||
Один префикс на два репозитория (пользователи и компании). Подключение через `psycopg2`.
|
|
||||||
|
|
||||||
| Переменная | Тип | Значение по умолчанию | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `USER_DB_NAME` | string | — | Имя базы данных |
|
|
||||||
| `USER_DB_USER` | string | — | Пользователь БД |
|
|
||||||
| `USER_DB_PASSWORD` | string | — | Пароль |
|
|
||||||
| `USER_DB_HOST` | string | — | Хост PostgreSQL |
|
|
||||||
| `USER_DB_PORT` | int | — | Порт PostgreSQL |
|
|
||||||
| `USER_DB_USER_TABLE_NAME` | string | `base_baseuser` | Таблица пользователей |
|
|
||||||
| `USER_DB_COMPANYUSER_TABLE_NAME` | string | `core_companyuser` | Таблица связи пользователь↔компания |
|
|
||||||
| `USER_DB_COMPANY_TABLE_NAME` | string | `core_company` | Таблица компаний |
|
|
||||||
| `USER_DB_ITER_SIZE` | int | `10000` | Размер серверного курсора при итерации |
|
|
||||||
|
|
||||||
## Переменные из Helm-чарта (`.helm/values.yaml`)
|
|
||||||
|
|
||||||
Базовый чарт — `universal-chart`. Обычные значения (`universal-chart.envs`) задаются на окружение (`_default`/`stage`/`preprod`/`production`):
|
|
||||||
|
|
||||||
| Переменная | Значения по окружениям |
|
|
||||||
| --- | --- |
|
|
||||||
| `AMS_SYNC_TOPIC` | `ams-sync` |
|
|
||||||
| `ENVIRONMENT` | `STAGE` / `PREPROD` / `PRODUCTION` |
|
|
||||||
| `HOST_ORGANIZATION_ID` | stage `339439562105337368`, preprod `337394329179947547`, production `337555824748561429` |
|
|
||||||
| `USER_SERVER_HOST` | stage `https://stage.sarex.io`, preprod `https://preprod.sarex.io`, production `https://.lk.sarex.io` |
|
|
||||||
| `AUTH_HOST` | stage `https://stage.sarex.io`, preprod `https://preprod.sarex.io`, production `https://lk.sarex.io` |
|
|
||||||
| `KAFKA_SECURITY_PROTOCOL` | `SASL_SSL` |
|
|
||||||
| `KAFKA_SASL_MECHANISM` | `SCRAM-SHA-512` |
|
|
||||||
|
|
||||||
Значения из секретов (`universal-chart.secretEnvs`, монтируются как env через `secretKeyRef`):
|
|
||||||
|
|
||||||
| Переменная | Секрет (`secretName`) | Ключ (`secretKey`) |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| `ZITADEL_HOST` | `zitadel-token-secret` | `zitadel-host` |
|
|
||||||
| `ZITADEL_SERVICE_ACCESS_TOKEN` | `zitadel-token-secret` | `zitadel-access-token` |
|
|
||||||
| `KAFKA_BOOTSTRAP_SERVERS` | `ams-kafka-secret` | `kafka-bootstrap-servers` |
|
|
||||||
| `KAFKA_SASL_PLAIN_USERNAME` | `ams-kafka-secret` | `kafka-username` |
|
|
||||||
| `KAFKA_SASL_PLAIN_PASSWORD` | `ams-kafka-secret` | `kafka-password` |
|
|
||||||
| `KAFKA_SSL_CAFILE` | `ams-kafka-secret` | `kafka-ca-file` |
|
|
||||||
| `AUTH_ADMIN_USERNAME` | `auth-secret` | `admin-username` |
|
|
||||||
| `AUTH_ADMIN_PASSWORD` | `auth-secret` | `admin-password` |
|
|
||||||
| `USER_DB_NAME` | `user-db-secret` | `user-db-name` |
|
|
||||||
| `USER_DB_USER` | `user-db-secret` | `user-db-user` |
|
|
||||||
| `USER_DB_PASSWORD` | `user-db-secret` | `user-db-password` |
|
|
||||||
| `USER_DB_HOST` | `user-db-secret` | `user-db-host` |
|
|
||||||
| `USER_DB_PORT` | `user-db-secret` | `user-db-port` |
|
|
||||||
|
|
||||||
Помимо env, чарт монтирует CA-сертификат Kafka из секрета `ya-ca-secret` в `/etc/ca-certificates/Yandex` (`volumes`/`volumeMounts`) и раздаёт `YandexInternalRootCA.crt` через configMap `ya-ca-cert`. Прочие значения чарта (не переменные приложения): `deployment.*` (имя, реплики, ресурсы, порт `8008`), `service.*` (ClusterIP, порт `8008`), `probes.*` (TCP-пробы на `8008`, по умолчанию выключены), `serviceAccount.*`, `imagePullSecrets.*`.
|
|
||||||
|
|
||||||
## Переменные в CI (`.gitlab-ci.yml`)
|
|
||||||
|
|
||||||
Пайплайн подключает общие шаблоны из `generic/common-ci` и переключает окружение по ветке/тегу через `workflow.rules`:
|
|
||||||
|
|
||||||
| Условие | STAND | Namespace |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| ветка `stage` | `stage` | `platform` (`STAGE_NAMESPACE`) |
|
|
||||||
| ветка `master` | `preprod` | `ams-sync-preprod` |
|
|
||||||
| тег (`CI_COMMIT_TAG`) | `prod` | `ams-sync-prod` |
|
|
||||||
|
|
||||||
Ключевые переменные пайплайна: `RELEASE_NAME=ams-sync`, `CHART_NAME=ams-sync`, `CHART_VERSION` (`0.0.1-<stand>`), `IMAGE_NAME`, `IMAGE_PATH=universal-chart.image.name`, `HELM_SET_ARGS`, `DOCKERFILE_PATH=Dockerfile`, флаги `ENABLE_LINTER`/`ENABLE_BUILD_CHART`/`ENABLE_BUILD_IMAGE`/`ENABLE_STATE_UPDATE`/`ENABLE_DEPLOY`.
|
|
||||||
|
|
||||||
## Замечания и потенциальные проблемы
|
|
||||||
|
|
||||||
- **Конфликт `ZITADEL_TIMEOUT`.** Переменную читают три класса с общим префиксом `zitadel_`, но разного типа: адаптер пользователей ожидает `int` (минуты, дефолт `10`), адаптеры организаций и грантов — `str` (дефолт `10m`). Если задать `ZITADEL_TIMEOUT=10m`, инициализация адаптера пользователей упадёт на разборе `int`. Рекомендуется задавать целое число.
|
|
||||||
- **`ZITADEL_HOST` без дефолта у адаптера пользователей.** В `users/zitadel/adapter.py` поле `host` обязательно (дефолта нет), тогда как в адаптерах организаций/грантов есть дефолт `https://idp.dev.stage.sarex.io`. Для режима `run` переменную нужно задать явно (в Helm приходит из секрета `zitadel-token-secret`).
|
|
||||||
- **Режим `run` не использует БД и user-server.** Демон-потребитель (`sync_service.py`) поднимает только logger, healthcheck, auth-провайдер, адаптер Zitadel и Kafka. Переменные `USER_DB_*` и `USER_SERVER_*` требуются только CLI-командам (`migrate`/`sync`/`diff`), хотя в Helm они проброшены для запуска этих команд через `kubectl exec`.
|
|
||||||
- **Приложение загружает `.env` автоматически** (у всех классов задан `env_file`), в отличие от некоторых других сервисов. CLI дополнительно поддерживает `--env-file=` для альтернативного файла.
|
|
||||||
- **TLS-проверка отключена.** Все исходящие HTTP-запросы (Zitadel, sarex-backend) выполняются с `verify=False`. Отдельного флага в конфиге нет.
|
|
||||||
- **Zitadel org-ID захардкожены в коде.** Помимо `HOST_ORGANIZATION_ID`, в use-case зашиты `glorax_org_id` и `dogma_org_id`, в которые распределяются пользователи по доменам e-mail (см. `usecase/migration/usecase.py`, `usecase/user/usecase.py`).
|
|
||||||
|
|
||||||
## Минимальный набор для режима `run` (демон)
|
|
||||||
|
|
||||||
- `ENVIRONMENT`, `HOST_ORGANIZATION_ID`, `AMS_SYNC_TOPIC`
|
|
||||||
- `KAFKA_BOOTSTRAP_SERVERS`, `KAFKA_SASL_PLAIN_USERNAME`, `KAFKA_SASL_PLAIN_PASSWORD`, `KAFKA_SSL_CAFILE` (+ при необходимости `KAFKA_SECURITY_PROTOCOL`, `KAFKA_SASL_MECHANISM`)
|
|
||||||
- `ZITADEL_HOST`, `ZITADEL_SERVICE_ACCESS_TOKEN`
|
|
||||||
- `AUTH_HOST`, `AUTH_ADMIN_USERNAME`, `AUTH_ADMIN_PASSWORD`
|
|
||||||
|
|
||||||
## Дополнительно для CLI (`migrate` / `sync` / `diff`)
|
|
||||||
|
|
||||||
- `USER_SERVER_HOST`
|
|
||||||
- `USER_DB_NAME`, `USER_DB_USER`, `USER_DB_PASSWORD`, `USER_DB_HOST`, `USER_DB_PORT`
|
|
||||||
@ -1,99 +0,0 @@
|
|||||||
# Интерфейсы сервиса ams-sync
|
|
||||||
# Версия: 1.0.0
|
|
||||||
|
|
||||||
Документ описывает интерфейсную поверхность сервиса: потребляемый топик Kafka, входящий TCP-healthcheck, исходящие HTTP-запросы к внешним сервисам (Zitadel, sarex-backend) и обращения к БД.
|
|
||||||
|
|
||||||
> `ams-sync` — не backend-сервис с REST API, а утилита синхронизации: демон-потребитель Kafka (`run`) плюс набор CLI-команд (`migrate`/`sync`/`diff`). Публичного HTTP API у сервиса нет — единственный входящий сокет отвечает на healthcheck сырой строкой (не HTTP). Поэтому файла `openapi.yaml` для сервиса нет.
|
|
||||||
|
|
||||||
## Как устроено взаимодействие
|
|
||||||
|
|
||||||
Приложение построено по слоям (adapter → repository → usecase → controller). Исходящие вызовы к внешним сервисам выполняются через `requests` (`requests.Session` с ретраями на `5xx`), к БД — через `psycopg2`. Все HTTP-запросы идут с `verify=False` (без проверки TLS). Базовые хосты берутся из переменных окружения (см. `CONFIGURATION.md`): `ZITADEL_HOST`, `AUTH_HOST`, `USER_SERVER_HOST`.
|
|
||||||
|
|
||||||
Аутентификация исходящих запросов:
|
|
||||||
|
|
||||||
- **Zitadel** — заголовок `Authorization: Bearer <ZITADEL_SERVICE_ACCESS_TOKEN>` (service-токен из конфига). Для части операций дополнительно проставляется `x-zitadel-orgid`.
|
|
||||||
- **sarex-backend** — JWT, получаемый под админом (`AUTH_ADMIN_USERNAME`/`AUTH_ADMIN_PASSWORD`) через `POST api/token/`; кешируется и обновляется за 30 секунд до `exp`.
|
|
||||||
|
|
||||||
## Входящие интерфейсы
|
|
||||||
|
|
||||||
### TCP Healthcheck
|
|
||||||
|
|
||||||
Только режим `run`. Сырой TCP-сокет (не HTTP): на каждое подключение отправляет строку `HEALTHCHECK_REPLY` (по умолчанию `healthy`) и закрывает соединение. Слушает `HEALTHCHECK_HOST:HEALTHCHECK_PORT` (по умолчанию `0.0.0.0:8008`). В Helm k8s-пробы настроены на TCP-порт `8008` (по умолчанию отключены).
|
|
||||||
|
|
||||||
### Kafka-потребитель
|
|
||||||
|
|
||||||
Топик — переменная `AMS_SYNC_TOPIC` (по умолчанию `ams-sync`). Параметры консьюмера (`src/internal/controller/sync_service/controller.py`):
|
|
||||||
|
|
||||||
| Параметр | Значение |
|
|
||||||
| --- | --- |
|
|
||||||
| `group_id` | `ams_sync_group` |
|
|
||||||
| `auto_offset_reset` | `earliest` |
|
|
||||||
| `enable_auto_commit` | `True` |
|
|
||||||
| десериализация | JSON (`utf-8`) |
|
|
||||||
|
|
||||||
Формат сообщения — объект с полями `type` и `body`. Диспетчеризация по `type`:
|
|
||||||
|
|
||||||
| `type` сообщения | Тело (`body`) | Обработчик | Действие |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `model_created` | `SarexUserWithPermissions` | при `VERIFY_USERS=True` — `import_user` UC, иначе `user` UC `create` | Создание пользователя в Zitadel + запись метадаты |
|
|
||||||
| `model_updated` | `Metadata` | `user` UC `update_metadata` | Обновление метадаты существующего пользователя в Zitadel |
|
|
||||||
|
|
||||||
Сообщения без `type` или `body` пропускаются с предупреждением. Ошибки обработки логируются (traceback), сообщение не переотправляется (auto-commit включён).
|
|
||||||
|
|
||||||
## Исходящие HTTP-запросы
|
|
||||||
|
|
||||||
### Zitadel (`ZITADEL_HOST`)
|
|
||||||
|
|
||||||
Адаптеры `users/zitadel/adapter.py` и `organizations/adapter.py`. Итоговый URL = `<ZITADEL_HOST>` + путь.
|
|
||||||
|
|
||||||
| Метод | Путь | Назначение |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| POST | `/v2/users/new` | Создать пользователя (human) |
|
|
||||||
| POST | `/management/v1/users/human/_import` | Импортировать пользователя (заголовок `x-zitadel-orgid`) |
|
|
||||||
| POST | `/admin/v1/import` | Массовый импорт пользователей (bulk, с таймаутом) |
|
|
||||||
| POST | `/v2/users` | Поиск пользователей (по username / email / org) |
|
|
||||||
| GET | `/management/v1/users/{id}` | Получить пользователя по id |
|
|
||||||
| GET | `/management/v1/users/{id}/metadata/{key}` | Получить метадату пользователя по ключу |
|
|
||||||
| POST | `/v2/users/{id}/metadata` | Массово задать метадату пользователя (значения в base64) |
|
|
||||||
| POST | `/v2/users/{id}/deactivate` | Деактивировать пользователя |
|
|
||||||
| DELETE | `/v2/users/{id}` | Удалить пользователя |
|
|
||||||
| POST | `/v2/organizations/_search` | Найти организацию по имени |
|
|
||||||
|
|
||||||
> Пути `/v2/...` частично захардкожены в адаптере, часть базовых путей управляется `ZITADEL_USERS_MANAGEMENT_ENDPOINT` (`management/v1/users`) и `ZITADEL_USERS_ENDPOINT` (`v2/users`). Методы грантов (`grants/adapter.py`) в текущей версии закомментированы.
|
|
||||||
|
|
||||||
### sarex-backend — авторизация (`AUTH_HOST`)
|
|
||||||
|
|
||||||
Адаптер `auth/http/adapter.py`.
|
|
||||||
|
|
||||||
| Метод | Путь | Назначение |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| POST | `{AUTH_AUTH_ENDPOINT}` (по умолчанию `api/token/`) | Получить JWT по логину/паролю админа. Возвращает поле `access` |
|
|
||||||
|
|
||||||
### sarex-backend — сервис пользователей (`USER_SERVER_HOST`), только CLI
|
|
||||||
|
|
||||||
Адаптер `users/http/adapter.py`. Сессия с ретраями на `500/502/503/504` (до 5 попыток).
|
|
||||||
|
|
||||||
| Метод | Путь | Назначение |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| GET | `{USER_SERVER_USERS_ENDPOINT}/{user_id}/metadata` (по умолчанию `api/core/admin/users/{user_id}/metadata`) | Получить метадату пользователя sarex для синхронизации в Zitadel |
|
|
||||||
|
|
||||||
## Обращения к БД sarex-backend (`USER_DB_*`), только CLI
|
|
||||||
|
|
||||||
Репозитории `repository/users` и `repository/companies` читают данные напрямую из PostgreSQL sarex-backend (только чтение, серверный курсор `itersize`).
|
|
||||||
|
|
||||||
| Операция | Таблицы | Назначение |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| Пользователь по id | `base_baseuser` | `migrate --user-id` / `sync --user-id` |
|
|
||||||
| Все пользователи (итерация) | `base_baseuser` | `migrate` / `sync` / `diff` (bulk) |
|
|
||||||
| Пользователи компании | `core_companyuser` ⋈ `base_baseuser` | `sync --company-id` (только с непустым email) |
|
|
||||||
| Компания по id / имени | `core_company` | Вспомогательные запросы |
|
|
||||||
|
|
||||||
## Внешние зависимости (инфраструктура)
|
|
||||||
|
|
||||||
| Зависимость | Режим | Назначение |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| Kafka | `run` | Источник событий пользователей (топик `AMS_SYNC_TOPIC`) |
|
|
||||||
| Zitadel (AMS) | `run` + CLI | Целевая система управления доступом (создание/обновление/удаление пользователей и метадаты) |
|
|
||||||
| sarex-backend (auth) | `run` + CLI | Получение JWT под админом |
|
|
||||||
| sarex-backend (user server) | CLI | Источник метадаты пользователя |
|
|
||||||
| PostgreSQL sarex-backend | CLI | Источник пользователей и компаний для миграции/синхронизации |
|
|
||||||
@ -1,204 +0,0 @@
|
|||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
|
||||||
kind: HelmRelease
|
|
||||||
metadata:
|
|
||||||
name: ams-sync
|
|
||||||
namespace: ams-sync
|
|
||||||
|
|
||||||
spec:
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
chart:
|
|
||||||
spec:
|
|
||||||
chart: universal-chart
|
|
||||||
version: "0.1.7"
|
|
||||||
sourceRef:
|
|
||||||
kind: HelmRepository
|
|
||||||
name: yc-oci-charts
|
|
||||||
namespace: flux-system
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
install:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
upgrade:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
values:
|
|
||||||
global:
|
|
||||||
env: _default
|
|
||||||
|
|
||||||
services:
|
|
||||||
backend:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/ams-sync:ugok
|
|
||||||
pullPolicy:
|
|
||||||
_default: IfNotPresent
|
|
||||||
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: ams-sync
|
|
||||||
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
stage: 1
|
|
||||||
preprod: 3
|
|
||||||
production: 3
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 8000
|
|
||||||
|
|
||||||
probes:
|
|
||||||
liveness:
|
|
||||||
enabled: false
|
|
||||||
readiness:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
service:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: ams-sync
|
|
||||||
|
|
||||||
type:
|
|
||||||
_default: ClusterIP
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 8000
|
|
||||||
|
|
||||||
targetPort:
|
|
||||||
_default: 8000
|
|
||||||
|
|
||||||
portName:
|
|
||||||
_default: http
|
|
||||||
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: regcred
|
|
||||||
labels:
|
|
||||||
monitoring: prometheus
|
|
||||||
|
|
||||||
envs:
|
|
||||||
- name: AMS_SYNC_TOPIC
|
|
||||||
value:
|
|
||||||
_default: "ams-sync"
|
|
||||||
|
|
||||||
- name: ENVIRONMENT
|
|
||||||
value:
|
|
||||||
_default: "PRODUCTION"
|
|
||||||
|
|
||||||
- name: HOST_ORGANIZATION_ID
|
|
||||||
value:
|
|
||||||
_default: "368536846176636704"
|
|
||||||
|
|
||||||
- name: ALERT_ENABLED
|
|
||||||
value:
|
|
||||||
_default: "False"
|
|
||||||
|
|
||||||
- name: USER_SERVER_HOST
|
|
||||||
value:
|
|
||||||
_default: "https://sarex.ugok.lan"
|
|
||||||
|
|
||||||
- name: AUTH_HOST
|
|
||||||
value:
|
|
||||||
_default: "https://sarex.ugok.lan"
|
|
||||||
|
|
||||||
- name: VERIFY_USERS
|
|
||||||
value:
|
|
||||||
_default: "True"
|
|
||||||
|
|
||||||
- name: KAFKA_SECURITY_PROTOCOL
|
|
||||||
value:
|
|
||||||
_default: "SSL"
|
|
||||||
|
|
||||||
- name: KAFKA_SASL_MECHANISM
|
|
||||||
value:
|
|
||||||
_default: "SCRAM-SHA-512"
|
|
||||||
secretEnvs:
|
|
||||||
- name: TELEGRAM_TOKEN
|
|
||||||
secretName:
|
|
||||||
_default: "telegram-secret"
|
|
||||||
secretKey: "telegram-token"
|
|
||||||
|
|
||||||
- name: TELEGRAM_GROUP_ID
|
|
||||||
secretName:
|
|
||||||
_default: "telegram-secret"
|
|
||||||
secretKey: "telegram-group-id"
|
|
||||||
|
|
||||||
- name: ZITADEL_HOST
|
|
||||||
secretName:
|
|
||||||
_default: "zitadel-token-secret"
|
|
||||||
secretKey: "zitadel-host"
|
|
||||||
|
|
||||||
- name: ZITADEL_SERVICE_ACCESS_TOKEN
|
|
||||||
secretName:
|
|
||||||
_default: "zitadel-token-secret"
|
|
||||||
secretKey: "zitadel-access-token"
|
|
||||||
|
|
||||||
- name: KAFKA_BOOTSTRAP_SERVERS
|
|
||||||
secretName:
|
|
||||||
_default: "ams-kafka-secret"
|
|
||||||
secretKey: "kafka-bootstrap-servers"
|
|
||||||
|
|
||||||
- name: KAFKA_SASL_PLAIN_USERNAME
|
|
||||||
secretName:
|
|
||||||
_default: "ams-kafka-secret"
|
|
||||||
secretKey: "kafka-username"
|
|
||||||
|
|
||||||
- name: KAFKA_SASL_PLAIN_PASSWORD
|
|
||||||
secretName:
|
|
||||||
_default: "ams-kafka-secret"
|
|
||||||
secretKey: "kafka-password"
|
|
||||||
|
|
||||||
- name: KAFKA_SSL_CAFILE
|
|
||||||
secretName:
|
|
||||||
_default: "ams-kafka-secret"
|
|
||||||
secretKey: "kafka-ca-file"
|
|
||||||
|
|
||||||
- name: AUTH_ADMIN_USERNAME
|
|
||||||
secretName:
|
|
||||||
_default: "auth-secret"
|
|
||||||
secretKey: "admin-username"
|
|
||||||
|
|
||||||
- name: AUTH_ADMIN_PASSWORD
|
|
||||||
secretName:
|
|
||||||
_default: "auth-secret"
|
|
||||||
secretKey: "admin-password"
|
|
||||||
|
|
||||||
- name: USER_DB_NAME
|
|
||||||
secretName:
|
|
||||||
_default: "user-db-secret"
|
|
||||||
secretKey: "user-db-name"
|
|
||||||
|
|
||||||
- name: USER_DB_USER
|
|
||||||
secretName:
|
|
||||||
_default: "user-db-secret"
|
|
||||||
secretKey: "user-db-user"
|
|
||||||
|
|
||||||
- name: USER_DB_PASSWORD
|
|
||||||
secretName:
|
|
||||||
_default: "user-db-secret"
|
|
||||||
secretKey: "user-db-password"
|
|
||||||
|
|
||||||
- name: USER_DB_HOST
|
|
||||||
secretName:
|
|
||||||
_default: "user-db-secret"
|
|
||||||
secretKey: "user-db-host"
|
|
||||||
|
|
||||||
- name: USER_DB_PORT
|
|
||||||
secretName:
|
|
||||||
_default: "user-db-secret"
|
|
||||||
secretKey: "user-db-port"
|
|
||||||
|
|
||||||
commitSha: ""
|
|
||||||
gitlabUri: ""
|
|
||||||
gitlabJobUrl: ""
|
|
||||||
owner: ""
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
namespace: ams-sync
|
|
||||||
resources:
|
|
||||||
- helmrelease.yaml
|
|
||||||
@ -1,220 +0,0 @@
|
|||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
|
||||||
kind: HelmRelease
|
|
||||||
metadata:
|
|
||||||
name: ams-sync
|
|
||||||
namespace: ams-sync
|
|
||||||
|
|
||||||
spec:
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
chart:
|
|
||||||
spec:
|
|
||||||
chart: universal-chart
|
|
||||||
version: "0.1.7"
|
|
||||||
sourceRef:
|
|
||||||
kind: HelmRepository
|
|
||||||
name: yc-oci-charts
|
|
||||||
namespace: flux-system
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
install:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
upgrade:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
values:
|
|
||||||
global:
|
|
||||||
env: _default
|
|
||||||
|
|
||||||
services:
|
|
||||||
backend:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/ams-sync:ugok
|
|
||||||
pullPolicy:
|
|
||||||
_default: IfNotPresent
|
|
||||||
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: ams-sync
|
|
||||||
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
stage: 1
|
|
||||||
preprod: 3
|
|
||||||
production: 3
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 8000
|
|
||||||
|
|
||||||
probes:
|
|
||||||
liveness:
|
|
||||||
enabled: false
|
|
||||||
readiness:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
service:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: ams-sync
|
|
||||||
|
|
||||||
type:
|
|
||||||
_default: ClusterIP
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 8000
|
|
||||||
|
|
||||||
targetPort:
|
|
||||||
_default: 8000
|
|
||||||
|
|
||||||
portName:
|
|
||||||
_default: http
|
|
||||||
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: regcred
|
|
||||||
volumes:
|
|
||||||
_default:
|
|
||||||
- name: kafka-cert
|
|
||||||
mountPath:
|
|
||||||
_default: /etc/ca-certificates/Yandex/YandexInternalRootCA.crt
|
|
||||||
subPath:
|
|
||||||
_default: YandexInternalRootCA.crt
|
|
||||||
readOnly:
|
|
||||||
_default: true
|
|
||||||
configMap:
|
|
||||||
name:
|
|
||||||
_default: kafka-cert
|
|
||||||
items:
|
|
||||||
- key: YandexInternalRootCA.crt
|
|
||||||
path:
|
|
||||||
_default: YandexInternalRootCA.crt
|
|
||||||
labels:
|
|
||||||
monitoring: prometheus
|
|
||||||
|
|
||||||
envs:
|
|
||||||
- name: AMS_SYNC_TOPIC
|
|
||||||
value:
|
|
||||||
_default: "ams-sync"
|
|
||||||
|
|
||||||
- name: ENVIRONMENT
|
|
||||||
value:
|
|
||||||
_default: "PRODUCTION"
|
|
||||||
|
|
||||||
- name: HOST_ORGANIZATION_ID
|
|
||||||
value:
|
|
||||||
_default: "368536846176636704"
|
|
||||||
|
|
||||||
- name: ALERT_ENABLED
|
|
||||||
value:
|
|
||||||
_default: "False"
|
|
||||||
|
|
||||||
- name: USER_SERVER_HOST
|
|
||||||
value:
|
|
||||||
_default: "https://sarex.ugok.lan"
|
|
||||||
|
|
||||||
- name: AUTH_HOST
|
|
||||||
value:
|
|
||||||
_default: "https://sarex.ugok.lan"
|
|
||||||
|
|
||||||
- name: VERIFY_USERS
|
|
||||||
value:
|
|
||||||
_default: "True"
|
|
||||||
|
|
||||||
- name: KAFKA_SECURITY_PROTOCOL
|
|
||||||
value:
|
|
||||||
_default: "SSL"
|
|
||||||
|
|
||||||
- name: KAFKA_SASL_MECHANISM
|
|
||||||
value:
|
|
||||||
_default: "SCRAM-SHA-512"
|
|
||||||
secretEnvs:
|
|
||||||
- name: TELEGRAM_TOKEN
|
|
||||||
secretName:
|
|
||||||
_default: "telegram-secret"
|
|
||||||
secretKey: "telegram-token"
|
|
||||||
|
|
||||||
- name: TELEGRAM_GROUP_ID
|
|
||||||
secretName:
|
|
||||||
_default: "telegram-secret"
|
|
||||||
secretKey: "telegram-group-id"
|
|
||||||
|
|
||||||
- name: ZITADEL_HOST
|
|
||||||
secretName:
|
|
||||||
_default: "zitadel-token-secret"
|
|
||||||
secretKey: "zitadel-host"
|
|
||||||
|
|
||||||
- name: ZITADEL_SERVICE_ACCESS_TOKEN
|
|
||||||
secretName:
|
|
||||||
_default: "zitadel-token-secret"
|
|
||||||
secretKey: "zitadel-access-token"
|
|
||||||
|
|
||||||
- name: KAFKA_BOOTSTRAP_SERVERS
|
|
||||||
secretName:
|
|
||||||
_default: "ams-kafka-secret"
|
|
||||||
secretKey: "kafka-bootstrap-servers"
|
|
||||||
|
|
||||||
- name: KAFKA_SASL_PLAIN_USERNAME
|
|
||||||
secretName:
|
|
||||||
_default: "ams-kafka-secret"
|
|
||||||
secretKey: "kafka-username"
|
|
||||||
|
|
||||||
- name: KAFKA_SASL_PLAIN_PASSWORD
|
|
||||||
secretName:
|
|
||||||
_default: "ams-kafka-secret"
|
|
||||||
secretKey: "kafka-password"
|
|
||||||
|
|
||||||
- name: KAFKA_SSL_CAFILE
|
|
||||||
secretName:
|
|
||||||
_default: "ams-kafka-secret"
|
|
||||||
secretKey: "kafka-ca-file"
|
|
||||||
|
|
||||||
- name: AUTH_ADMIN_USERNAME
|
|
||||||
secretName:
|
|
||||||
_default: "auth-secret"
|
|
||||||
secretKey: "admin-username"
|
|
||||||
|
|
||||||
- name: AUTH_ADMIN_PASSWORD
|
|
||||||
secretName:
|
|
||||||
_default: "auth-secret"
|
|
||||||
secretKey: "admin-password"
|
|
||||||
|
|
||||||
- name: USER_DB_NAME
|
|
||||||
secretName:
|
|
||||||
_default: "user-db-secret"
|
|
||||||
secretKey: "user-db-name"
|
|
||||||
|
|
||||||
- name: USER_DB_USER
|
|
||||||
secretName:
|
|
||||||
_default: "user-db-secret"
|
|
||||||
secretKey: "user-db-user"
|
|
||||||
|
|
||||||
- name: USER_DB_PASSWORD
|
|
||||||
secretName:
|
|
||||||
_default: "user-db-secret"
|
|
||||||
secretKey: "user-db-password"
|
|
||||||
|
|
||||||
- name: USER_DB_HOST
|
|
||||||
secretName:
|
|
||||||
_default: "user-db-secret"
|
|
||||||
secretKey: "user-db-host"
|
|
||||||
|
|
||||||
- name: USER_DB_PORT
|
|
||||||
secretName:
|
|
||||||
_default: "user-db-secret"
|
|
||||||
secretKey: "user-db-port"
|
|
||||||
|
|
||||||
commitSha: ""
|
|
||||||
gitlabUri: ""
|
|
||||||
gitlabJobUrl: ""
|
|
||||||
owner: ""
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
namespace: ams-sync
|
|
||||||
resources:
|
|
||||||
- backend.yaml
|
|
||||||
@ -1,41 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
|
||||||
kind: HelmRelease
|
|
||||||
metadata:
|
|
||||||
name: ams-sync
|
|
||||||
namespace: ams-sync
|
|
||||||
spec:
|
|
||||||
values:
|
|
||||||
services:
|
|
||||||
backend:
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/ams-sync:ugok
|
|
||||||
envs:
|
|
||||||
- name: AMS_SYNC_TOPIC
|
|
||||||
value:
|
|
||||||
_default: ams-sync
|
|
||||||
- name: ENVIRONMENT
|
|
||||||
value:
|
|
||||||
_default: PRODUCTION
|
|
||||||
- name: HOST_ORGANIZATION_ID
|
|
||||||
value:
|
|
||||||
_default: '377835910403719938'
|
|
||||||
- name: ALERT_ENABLED
|
|
||||||
value:
|
|
||||||
_default: 'False'
|
|
||||||
- name: USER_SERVER_HOST
|
|
||||||
value:
|
|
||||||
_default: http://backend.django.svc.cluster.local:8000
|
|
||||||
- name: AUTH_HOST
|
|
||||||
value:
|
|
||||||
_default: http://backend.django.svc.cluster.local:8000
|
|
||||||
- name: VERIFY_USERS
|
|
||||||
value:
|
|
||||||
_default: 'True'
|
|
||||||
- name: KAFKA_SECURITY_PROTOCOL
|
|
||||||
value:
|
|
||||||
_default: SSL
|
|
||||||
- name: KAFKA_SASL_MECHANISM
|
|
||||||
value:
|
|
||||||
_default: SCRAM-SHA-512
|
|
||||||
@ -1,11 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
namespace: ams-sync
|
|
||||||
resources:
|
|
||||||
- ../base
|
|
||||||
patches:
|
|
||||||
- path: backend.yaml
|
|
||||||
target:
|
|
||||||
kind: HelmRelease
|
|
||||||
name: ams-sync
|
|
||||||
@ -1,46 +0,0 @@
|
|||||||
# =============================================================================
|
|
||||||
# Attachments — пример конфигурации (.env)
|
|
||||||
# Скопируйте в .env и заполните значения.
|
|
||||||
# =============================================================================
|
|
||||||
# --- Приложение (необязательные, есть значения по умолчанию) ---
|
|
||||||
# Версия: 0.11.1
|
|
||||||
|
|
||||||
# API=/api
|
|
||||||
# NAME=Attachments
|
|
||||||
# VERSION=0.0.1
|
|
||||||
# DESCRIPTION=Attachments
|
|
||||||
|
|
||||||
# --- База данных PostgreSQL (обязательные) ---
|
|
||||||
DATABASE_NAME=attachments
|
|
||||||
DATABASE_USER=postgres
|
|
||||||
DATABASE_PASSWORD=change_me
|
|
||||||
DATABASE_HOST=db
|
|
||||||
DATABASE_PORT=5432
|
|
||||||
DATABASE_SSL_MODE=disable
|
|
||||||
|
|
||||||
# Пароль суперпользователя PostgreSQL для контейнера db (docker-compose)
|
|
||||||
POSTGRES_PASSWORD=change_me
|
|
||||||
|
|
||||||
# --- S3 (Yandex Object Storage) ---
|
|
||||||
# Вариант 1: путь к JSON с реквизитами сервисного аккаунта.
|
|
||||||
# Файл должен содержать: {"endpoint": "...", "access_key_id": "...", "secret_access_key": "..."}
|
|
||||||
YANDEX_S3_ACCOUNT_PATH=/etc/sarex/yc-s3-storage/yc-s3-service-account.json
|
|
||||||
|
|
||||||
# Вариант 2: задать реквизиты напрямую (если не используете JSON-файл).
|
|
||||||
# YANDEX_S3_ENDPOINT_URL=storage.yandexcloud.net
|
|
||||||
# YANDEX_S3_ACCESS_KEY_ID=change_me
|
|
||||||
# YANDEX_S3_SECRET_ACCESS_KEY=change_me
|
|
||||||
|
|
||||||
YANDEX_S3_VERIFY=true
|
|
||||||
# YANDEX_S3_USE_SSL=true
|
|
||||||
# YANDEX_S3_REGION=ru-central1
|
|
||||||
BUCKET_NAME=attachments-stage-2
|
|
||||||
|
|
||||||
# --- Логирование (префикс LOG_) ---
|
|
||||||
# LOG_LEVEL=INFO
|
|
||||||
|
|
||||||
# --- Трейсинг / OpenTelemetry (префикс TRACING_) ---
|
|
||||||
# TRACING_USE=false
|
|
||||||
# TRACING_HOST=localhost:4317
|
|
||||||
# TRACING_SERVICE_NAME=attachments
|
|
||||||
# TRACING_INSECURE=false
|
|
||||||
@ -1,129 +0,0 @@
|
|||||||
# Конфигурация проекта Attachments
|
|
||||||
# Версия: 0.11.1
|
|
||||||
|
|
||||||
Документ описывает все переменные окружения и способы конфигурирования сервиса.
|
|
||||||
|
|
||||||
## Способы конфигурирования
|
|
||||||
|
|
||||||
Настройка сервиса выполняется **только через переменные окружения**. Отдельного файла с настройками (yaml/toml) в приложении нет — за конфигурацию отвечает `internal/config/settings.py` на базе `pydantic.BaseSettings`.
|
|
||||||
|
|
||||||
Источники переменных окружения по способам запуска:
|
|
||||||
|
|
||||||
| Способ запуска | Откуда берутся переменные |
|
|
||||||
| --- | --- |
|
|
||||||
| Локально (docker-compose) | Файл `.env` в корне (`env_file: .env` в `docker-compose.yml`), плюс `POSTGRES_PASSWORD` для контейнера БД |
|
|
||||||
| Kubernetes (Helm) | `.helm/values.yaml`: блок `envs` (обычные значения) и `secretEnvs` (значения из k8s-секретов) |
|
|
||||||
| CI/CD (GitLab) | `.gitlab-ci.yml`: переменные пайплайна и build-args |
|
|
||||||
|
|
||||||
Дополнительно секреты доступа к S3 не задаются напрямую, а читаются из JSON-файла (см. `YANDEX_S3_ACCOUNT_PATH` ниже).
|
|
||||||
|
|
||||||
## Переменные приложения (класс `Settings`)
|
|
||||||
|
|
||||||
Читаются напрямую по имени (регистрозависимо, `case_sensitive = True`). Переменные без значения по умолчанию **обязательны** — без них приложение не стартует.
|
|
||||||
|
|
||||||
| Переменная | Тип | Обязательна | Значение по умолчанию | Назначение |
|
|
||||||
| --- | --- | --- | --- | --- |
|
|
||||||
| `API` | str | нет | `/api` | Префикс всех HTTP-роутов |
|
|
||||||
| `NAME` | str | нет | `Attachments` | Имя сервиса (title в FastAPI/OpenAPI) |
|
|
||||||
| `VERSION` | str | нет | `0.0.1` | Версия сервиса |
|
|
||||||
| `DESCRIPTION` | str | нет | `Attachments` | Описание сервиса |
|
|
||||||
| `YANDEX_S3_ENDPOINT_URL` | str | да* | — | Endpoint S3 (без схемы; `https://`/`http://` добавляется в коде по `YANDEX_S3_USE_SSL`) |
|
|
||||||
| `YANDEX_S3_ACCESS_KEY_ID` | str | да* | — | Access Key ID для S3 |
|
|
||||||
| `YANDEX_S3_SECRET_ACCESS_KEY` | str | да* | — | Secret Access Key для S3 |
|
|
||||||
| `YANDEX_S3_USE_SSL` | bool | нет | `True` | Использовать ли HTTPS при обращении к S3 |
|
|
||||||
| `YANDEX_S3_REGION` | str | нет | `ru-central1` | Регион S3 |
|
|
||||||
| `YANDEX_S3_VERIFY` | bool | да | — | Проверять ли SSL-сертификат S3 |
|
|
||||||
| `BUCKET_NAME` | str | да | — | Имя бакета для вложений |
|
|
||||||
| `DATABASE_NAME` | str | да | — | Имя базы данных PostgreSQL |
|
|
||||||
| `DATABASE_USER` | str | да | — | Пользователь БД |
|
|
||||||
| `DATABASE_PASSWORD` | str | да | — | Пароль пользователя БД |
|
|
||||||
| `DATABASE_HOST` | str | да | — | Хост БД |
|
|
||||||
| `DATABASE_PORT` | int | да | — | Порт БД |
|
|
||||||
| `DATABASE_SSL_MODE` | str | да | — | Режим SSL при подключении к БД (напр. `disable`, `require`, `verify-full`) |
|
|
||||||
|
|
||||||
\* Три переменные `YANDEX_S3_ENDPOINT_URL`, `YANDEX_S3_ACCESS_KEY_ID`, `YANDEX_S3_SECRET_ACCESS_KEY` формально обязательны, но при старте приложения они **проставляются автоматически** функцией `json_config_s3_account_settings()` из JSON-файла (см. `YANDEX_S3_ACCOUNT_PATH`). Задавать их вручную не нужно, если задан путь к файлу.
|
|
||||||
|
|
||||||
## Настройки S3 через JSON-файл
|
|
||||||
|
|
||||||
| Переменная | Обязательна | Назначение |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| `YANDEX_S3_ACCOUNT_PATH` | да | Путь к JSON-файлу с реквизитами сервисного аккаунта S3 |
|
|
||||||
|
|
||||||
При старте функция `json_config_s3_account_settings()` читает файл по этому пути и выставляет переменные окружения `YANDEX_S3_ENDPOINT_URL`, `YANDEX_S3_ACCESS_KEY_ID`, `YANDEX_S3_SECRET_ACCESS_KEY`.
|
|
||||||
|
|
||||||
Ожидаемая структура JSON-файла:
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"endpoint": "storage.yandexcloud.net",
|
|
||||||
"access_key_id": "<ключ>",
|
|
||||||
"secret_access_key": "<секрет>"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
В Kubernetes файл монтируется из секрета `attachments-s3-secret` (в prod — `yc-s3`) в `/etc/sarex/yc-s3-storage/yc-s3-service-account.json`.
|
|
||||||
|
|
||||||
## Логирование (класс `LoggerSettings`, префикс `LOG_`)
|
|
||||||
|
|
||||||
| Переменная | Тип | Значение по умолчанию | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `LOG_LEVEL` | str | `INFO` | Уровень логирования (`DEBUG`, `INFO`, `WARNING`, ...). При неизвестном значении откатывается на `INFO` |
|
|
||||||
| `LOG_FORMAT` | str | JSON-шаблон с полями `timestamp`, `level`, `message` | Формат строк лога (используется `pythonjsonlogger`) |
|
|
||||||
|
|
||||||
## Трейсинг / OpenTelemetry (класс `TraceSettings`, префикс `TRACING_`)
|
|
||||||
|
|
||||||
| Переменная | Тип | Значение по умолчанию | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `TRACING_USE` | bool | `False` | Включает OTEL-трейсинг, логгер и middleware |
|
|
||||||
| `TRACING_HOST` | str | `localhost:4317` | Адрес OTLP-коллектора |
|
|
||||||
| `TRACING_SERVICE_NAME` | str | `attachments` | Имя сервиса в трейсах |
|
|
||||||
| `TRACING_INSECURE` | bool | `False` | Небезопасное (без TLS) подключение к коллектору |
|
|
||||||
|
|
||||||
Трейсинг активируется только при `TRACING_USE=true`.
|
|
||||||
|
|
||||||
## Переменные инфраструктуры и сборки
|
|
||||||
|
|
||||||
Не читаются кодом приложения, но нужны для запуска/сборки/деплоя.
|
|
||||||
|
|
||||||
| Переменная | Где используется | Назначение |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| `POSTGRES_PASSWORD` | `docker-compose.yml` (контейнер `db`) | Пароль суперпользователя PostgreSQL при локальном запуске |
|
|
||||||
| `PIP_EXTRA_INDEX_URL` | `docker/Dockerfile` (build-arg) | Доп. индекс pip для установки приватных пакетов при сборке образа |
|
|
||||||
| `GITLAB_PYPI_EXTRA_INDEX_URL` | `.gitlab-ci.yml` | Значение, пробрасываемое в `PIP_EXTRA_INDEX_URL` при сборке в CI |
|
|
||||||
|
|
||||||
### Переменные CI/CD (`.gitlab-ci.yml`)
|
|
||||||
|
|
||||||
Служебные переменные пайплайна: `SERVICE_NAME`, `DOCKERFILE_PATH`, `BUILD_ARGS`, `CI_TRIGGER_SOURCE`, а также подставляемые по окружениям `STAND`, `NAMESPACE`, `RELEASE_NAME`, `CHART_NAME`, `CHART_VERSION`, `K8S_HUSTLER_BRANCH`, `HELM_SET_ARGS`. Окружение выбирается по ветке/тегу: `stage` → ветка `stage`, `preprod` → ветка `master`, `production` → git-тег.
|
|
||||||
|
|
||||||
## Переменные из Helm-чарта (`.helm/values.yaml`)
|
|
||||||
|
|
||||||
Обычные переменные (`envs`):
|
|
||||||
|
|
||||||
| Переменная | Значение | Примечание |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| `API_ADDRESS` | `0.0.0.0:8000` | Задаётся в чарте, но **кодом приложения не читается** |
|
|
||||||
| `POSTGRES_POOL_SIZE` | `10` | Задаётся в чарте, но **кодом приложения не читается** |
|
|
||||||
| `DATABASE_SSL_MODE` | `verify-full` | |
|
|
||||||
| `YANDEX_S3_VERIFY` | `true` | |
|
|
||||||
| `YANDEX_S3_ACCOUNT_PATH` | `/etc/sarex/yc-s3-storage/yc-s3-service-account.json` | |
|
|
||||||
| `BUCKET_NAME` | `attachments-stage-2` / `attachments-prod-2` | Зависит от окружения |
|
|
||||||
|
|
||||||
Переменные из секретов (`secretEnvs`, секрет `attachments-postgresql-secret` / `ya-pg-secret`):
|
|
||||||
|
|
||||||
| Переменная | Ключ секрета | Примечание |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| `DATABASE_PORT` | `port` | |
|
|
||||||
| `DATABASE_HOST` | `host` | |
|
|
||||||
| `DATABASE_USER` | `username` | |
|
|
||||||
| `DATABASE_PASSWORD` | `password` | |
|
|
||||||
| `DATABASE_NAME` | `database` | |
|
|
||||||
| `YC-PG-CERTIFICATE` | `ca.crt` | CA-сертификат PostgreSQL; также монтируется файлом в `/root/.postgresql/root.crt` |
|
|
||||||
|
|
||||||
## Минимальный набор для локального запуска
|
|
||||||
|
|
||||||
Для запуска через `docker-compose` в файле `.env` достаточно задать (см. `.env.example`):
|
|
||||||
|
|
||||||
- `POSTGRES_PASSWORD` — для контейнера БД
|
|
||||||
- `DATABASE_*` — параметры подключения к БД
|
|
||||||
- `BUCKET_NAME`, `YANDEX_S3_VERIFY`
|
|
||||||
- `YANDEX_S3_ACCOUNT_PATH` **или** напрямую `YANDEX_S3_ENDPOINT_URL` + `YANDEX_S3_ACCESS_KEY_ID` + `YANDEX_S3_SECRET_ACCESS_KEY`
|
|
||||||
70
apps/attachments/base/deployment.yaml
Normal file
70
apps/attachments/base/deployment.yaml
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: attachments
|
||||||
|
namespace: attachments
|
||||||
|
labels:
|
||||||
|
app: attachments
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: attachments
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: attachments
|
||||||
|
annotations:
|
||||||
|
traffic.sidecar.istio.io/excludeOutboundPorts: "8200"
|
||||||
|
vault.hashicorp.com/agent-init-first: "true"
|
||||||
|
vault.hashicorp.com/agent-inject: "true"
|
||||||
|
vault.hashicorp.com/agent-pre-populate-only: "true"
|
||||||
|
vault.hashicorp.com/auth-path: auth/kubernetes
|
||||||
|
vault.hashicorp.com/role: attachments
|
||||||
|
vault.hashicorp.com/agent-inject-secret-attachments-db: secrets/data/postgresql/apps/attachments
|
||||||
|
vault.hashicorp.com/agent-inject-template-attachments-db: |-
|
||||||
|
{{- with secret "secrets/data/postgresql/apps/attachments" -}}
|
||||||
|
DATABASE_HOST=postgresql.attachments.svc.cluster.local
|
||||||
|
DATABASE_PORT=5432
|
||||||
|
DATABASE_NAME=attachments_db
|
||||||
|
DATABASE_USER={{ index .Data.data "username" }}
|
||||||
|
DATABASE_PASSWORD={{ index .Data.data "password" }}
|
||||||
|
DATABASE_SSL_MODE=disable
|
||||||
|
{{- end -}}
|
||||||
|
vault.hashicorp.com/agent-inject-secret-attachments-s3: secrets/data/minio/apps/attachments
|
||||||
|
vault.hashicorp.com/agent-inject-template-attachments-s3: |-
|
||||||
|
{{- with secret "secrets/data/minio/apps/attachments" -}}
|
||||||
|
YANDEX_S3_ENDPOINT_URL=minio.minio:9000
|
||||||
|
YANDEX_S3_ACCESS_KEY_ID={{ index .Data.data "access_key" }}
|
||||||
|
YANDEX_S3_SECRET_ACCESS_KEY={{ index .Data.data "secret_key" }}
|
||||||
|
YANDEX_S3_USE_SSL=false
|
||||||
|
YANDEX_S3_REGION=ru-central
|
||||||
|
YANDEX_S3_VERIFY=false
|
||||||
|
BUCKET_NAME=attachments
|
||||||
|
{{- end -}}
|
||||||
|
spec:
|
||||||
|
serviceAccountName: attachments-vault
|
||||||
|
containers:
|
||||||
|
- name: attachments
|
||||||
|
image: cr.yandex/crp3ccidau046kdj8g9q/attachments:feature_6238c882
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
command: ["/bin/bash", "-ec"]
|
||||||
|
args:
|
||||||
|
- |
|
||||||
|
set -a
|
||||||
|
[ -f /vault/secrets/attachments-db ] && . /vault/secrets/attachments-db
|
||||||
|
[ -f /vault/secrets/attachments-s3 ] && . /vault/secrets/attachments-s3
|
||||||
|
set +a
|
||||||
|
exec /opt/attachments/entrypoint.sh
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
containerPort: 8000
|
||||||
|
protocol: TCP
|
||||||
|
env:
|
||||||
|
- name: POSTGRES_POOL_SIZE
|
||||||
|
value: "10"
|
||||||
|
- name: API_ADDRESS
|
||||||
|
value: 0.0.0.0:8000
|
||||||
|
imagePullSecrets:
|
||||||
|
- name: regcred
|
||||||
@ -1,110 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
|
||||||
kind: HelmRelease
|
|
||||||
metadata:
|
|
||||||
name: attachments
|
|
||||||
namespace: attachments
|
|
||||||
spec:
|
|
||||||
interval: 10m
|
|
||||||
chart:
|
|
||||||
spec:
|
|
||||||
chart: universal-chart
|
|
||||||
version: "0.1.9"
|
|
||||||
sourceRef:
|
|
||||||
kind: HelmRepository
|
|
||||||
name: yc-oci-charts
|
|
||||||
namespace: flux-system
|
|
||||||
interval: 10m
|
|
||||||
install:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
upgrade:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
values:
|
|
||||||
global:
|
|
||||||
env: _default
|
|
||||||
services:
|
|
||||||
attachments:
|
|
||||||
enabled: true
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: attachments-vault
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
name:
|
|
||||||
_default: attachments
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
port:
|
|
||||||
_default: 8000
|
|
||||||
command:
|
|
||||||
_default: ["/bin/bash", "-ec"]
|
|
||||||
args:
|
|
||||||
_default:
|
|
||||||
- |
|
|
||||||
set -a
|
|
||||||
[ -f /vault/secrets/attachments-db ] && . /vault/secrets/attachments-db
|
|
||||||
[ -f /vault/secrets/attachments-s3 ] && . /vault/secrets/attachments-s3
|
|
||||||
set +a
|
|
||||||
exec /opt/attachments/entrypoint.sh
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/attachments:feature_6238c882
|
|
||||||
pullPolicy:
|
|
||||||
_default: IfNotPresent
|
|
||||||
service:
|
|
||||||
enabled: true
|
|
||||||
name:
|
|
||||||
_default: attachments-service
|
|
||||||
type:
|
|
||||||
_default: ClusterIP
|
|
||||||
port:
|
|
||||||
_default: 8000
|
|
||||||
targetPort:
|
|
||||||
_default: 8000
|
|
||||||
portName:
|
|
||||||
_default: http
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: regcred
|
|
||||||
envs:
|
|
||||||
- name: POSTGRES_POOL_SIZE
|
|
||||||
value:
|
|
||||||
_default: "10"
|
|
||||||
- name: API_ADDRESS
|
|
||||||
value:
|
|
||||||
_default: 0.0.0.0:8000
|
|
||||||
podAnnotations:
|
|
||||||
_default:
|
|
||||||
traffic.sidecar.istio.io/excludeOutboundPorts: "4317,4318,9411,8200"
|
|
||||||
vault.hashicorp.com/agent-init-first: "true"
|
|
||||||
vault.hashicorp.com/agent-inject: "true"
|
|
||||||
vault.hashicorp.com/agent-pre-populate-only: "true"
|
|
||||||
vault.hashicorp.com/auth-path: auth/kubernetes
|
|
||||||
vault.hashicorp.com/role: attachments
|
|
||||||
vault.hashicorp.com/agent-inject-secret-attachments-db: secrets/data/apps/attachments/postgres
|
|
||||||
vault.hashicorp.com/agent-inject-template-attachments-db: |-
|
|
||||||
{{- with secret "secrets/data/apps/attachments/postgres" -}}
|
|
||||||
DATABASE_HOST={{ index .Data.data "host" }}
|
|
||||||
DATABASE_PORT={{ index .Data.data "port" }}
|
|
||||||
DATABASE_NAME={{ index .Data.data "database" }}
|
|
||||||
DATABASE_USER={{ index .Data.data "username" }}
|
|
||||||
DATABASE_PASSWORD={{ index .Data.data "password" }}
|
|
||||||
DATABASE_SSL_MODE=disable
|
|
||||||
{{- end -}}
|
|
||||||
vault.hashicorp.com/agent-inject-secret-attachments-s3: secrets/data/minio/apps/attachments
|
|
||||||
vault.hashicorp.com/agent-inject-template-attachments-s3: |-
|
|
||||||
{{- with secret "secrets/data/minio/apps/attachments" -}}
|
|
||||||
YANDEX_S3_ENDPOINT_URL=minio.minio:9000
|
|
||||||
YANDEX_S3_ACCESS_KEY_ID={{ index .Data.data "access_key" }}
|
|
||||||
YANDEX_S3_SECRET_ACCESS_KEY={{ index .Data.data "secret_key" }}
|
|
||||||
YANDEX_S3_USE_SSL=false
|
|
||||||
YANDEX_S3_REGION=ru-central
|
|
||||||
YANDEX_S3_VERIFY=false
|
|
||||||
BUCKET_NAME=attachments
|
|
||||||
{{- end -}}
|
|
||||||
@ -4,4 +4,6 @@ kind: Kustomization
|
|||||||
namespace: attachments
|
namespace: attachments
|
||||||
resources:
|
resources:
|
||||||
- namespace.yaml
|
- namespace.yaml
|
||||||
- helmrelease.yaml
|
- serviceaccount.yaml
|
||||||
|
- deployment.yaml
|
||||||
|
- service.yaml
|
||||||
|
|||||||
@ -5,4 +5,3 @@ metadata:
|
|||||||
name: attachments
|
name: attachments
|
||||||
labels:
|
labels:
|
||||||
istio-injection: enabled
|
istio-injection: enabled
|
||||||
security.deckhouse.io/pod-policy: privileged
|
|
||||||
|
|||||||
14
apps/attachments/base/service.yaml
Normal file
14
apps/attachments/base/service.yaml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: attachments-service
|
||||||
|
namespace: attachments
|
||||||
|
spec:
|
||||||
|
type: ClusterIP
|
||||||
|
selector:
|
||||||
|
app: attachments
|
||||||
|
ports:
|
||||||
|
- port: 8000
|
||||||
|
targetPort: 8000
|
||||||
|
protocol: TCP
|
||||||
5
apps/attachments/base/serviceaccount.yaml
Normal file
5
apps/attachments/base/serviceaccount.yaml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
name: attachments-vault
|
||||||
|
namespace: attachments
|
||||||
@ -1,142 +0,0 @@
|
|||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
|
||||||
kind: HelmRelease
|
|
||||||
metadata:
|
|
||||||
name: attachments
|
|
||||||
namespace: attachments
|
|
||||||
|
|
||||||
spec:
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
chart:
|
|
||||||
spec:
|
|
||||||
chart: universal-chart
|
|
||||||
version: "0.1.7"
|
|
||||||
sourceRef:
|
|
||||||
kind: HelmRepository
|
|
||||||
name: yc-oci-charts
|
|
||||||
namespace: flux-system
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
install:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
upgrade:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
values:
|
|
||||||
global:
|
|
||||||
env: _default
|
|
||||||
|
|
||||||
services:
|
|
||||||
backend:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/attachments:production_6dbb4dce
|
|
||||||
pullPolicy:
|
|
||||||
_default: IfNotPresent
|
|
||||||
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: attachments
|
|
||||||
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
stage: 1
|
|
||||||
preprod: 3
|
|
||||||
production: 3
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 8000
|
|
||||||
|
|
||||||
probes:
|
|
||||||
liveness:
|
|
||||||
enabled: false
|
|
||||||
readiness:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
service:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: attachments-service
|
|
||||||
|
|
||||||
type:
|
|
||||||
_default: ClusterIP
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 8000
|
|
||||||
|
|
||||||
targetPort:
|
|
||||||
_default: 8000
|
|
||||||
|
|
||||||
portName:
|
|
||||||
_default: http
|
|
||||||
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: regcred
|
|
||||||
labels:
|
|
||||||
monitoring: prometheus
|
|
||||||
|
|
||||||
envs:
|
|
||||||
- name: POSTGRES_POOL_SIZE
|
|
||||||
value:
|
|
||||||
_default: "10"
|
|
||||||
|
|
||||||
- name: API_ADDRESS
|
|
||||||
value:
|
|
||||||
_default: "0.0.0.0:8000"
|
|
||||||
|
|
||||||
- name: YANDEX_S3_ACCOUNT_PATH
|
|
||||||
value:
|
|
||||||
_default: "/etc/sarex/yc-s3-storage/yc-s3-service-account.json"
|
|
||||||
|
|
||||||
- name: BUCKET_NAME
|
|
||||||
value:
|
|
||||||
_default: "attachments-storage"
|
|
||||||
|
|
||||||
- name: DATABASE_SSL_MODE
|
|
||||||
value:
|
|
||||||
_default: "disable"
|
|
||||||
|
|
||||||
- name: YANDEX_S3_VERIFY
|
|
||||||
value:
|
|
||||||
_default: "false"
|
|
||||||
secretEnvs:
|
|
||||||
- name: DATABASE_HOST
|
|
||||||
secretName:
|
|
||||||
_default: "postgres-secret"
|
|
||||||
secretKey: "host"
|
|
||||||
|
|
||||||
- name: DATABASE_PORT
|
|
||||||
secretName:
|
|
||||||
_default: "postgres-secret"
|
|
||||||
secretKey: "port"
|
|
||||||
|
|
||||||
- name: DATABASE_NAME
|
|
||||||
secretName:
|
|
||||||
_default: "postgres-secret"
|
|
||||||
secretKey: "database"
|
|
||||||
|
|
||||||
- name: DATABASE_USER
|
|
||||||
secretName:
|
|
||||||
_default: "postgres-secret"
|
|
||||||
secretKey: "username"
|
|
||||||
|
|
||||||
- name: DATABASE_PASSWORD
|
|
||||||
secretName:
|
|
||||||
_default: "postgres-secret"
|
|
||||||
secretKey: "password"
|
|
||||||
|
|
||||||
commitSha: ""
|
|
||||||
gitlabUri: ""
|
|
||||||
gitlabJobUrl: ""
|
|
||||||
owner: ""
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
namespace: attachments
|
|
||||||
resources:
|
|
||||||
- backend.yaml
|
|
||||||
@ -1,142 +0,0 @@
|
|||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
|
||||||
kind: HelmRelease
|
|
||||||
metadata:
|
|
||||||
name: attachments
|
|
||||||
namespace: attachments
|
|
||||||
|
|
||||||
spec:
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
chart:
|
|
||||||
spec:
|
|
||||||
chart: universal-chart
|
|
||||||
version: "0.1.7"
|
|
||||||
sourceRef:
|
|
||||||
kind: HelmRepository
|
|
||||||
name: yc-oci-charts
|
|
||||||
namespace: flux-system
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
install:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
upgrade:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
values:
|
|
||||||
global:
|
|
||||||
env: _default
|
|
||||||
|
|
||||||
services:
|
|
||||||
backend:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/attachments:production_6dbb4dce
|
|
||||||
pullPolicy:
|
|
||||||
_default: IfNotPresent
|
|
||||||
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: attachments
|
|
||||||
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
stage: 1
|
|
||||||
preprod: 3
|
|
||||||
production: 3
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 8000
|
|
||||||
|
|
||||||
probes:
|
|
||||||
liveness:
|
|
||||||
enabled: false
|
|
||||||
readiness:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
service:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: attachments-service
|
|
||||||
|
|
||||||
type:
|
|
||||||
_default: ClusterIP
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 8000
|
|
||||||
|
|
||||||
targetPort:
|
|
||||||
_default: 8000
|
|
||||||
|
|
||||||
portName:
|
|
||||||
_default: http
|
|
||||||
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: regcred
|
|
||||||
labels:
|
|
||||||
monitoring: prometheus
|
|
||||||
|
|
||||||
envs:
|
|
||||||
- name: POSTGRES_POOL_SIZE
|
|
||||||
value:
|
|
||||||
_default: "10"
|
|
||||||
|
|
||||||
- name: API_ADDRESS
|
|
||||||
value:
|
|
||||||
_default: "0.0.0.0:8000"
|
|
||||||
|
|
||||||
- name: YANDEX_S3_ACCOUNT_PATH
|
|
||||||
value:
|
|
||||||
_default: "/etc/sarex/yc-s3-storage/yc-s3-service-account.json"
|
|
||||||
|
|
||||||
- name: BUCKET_NAME
|
|
||||||
value:
|
|
||||||
_default: "attachments-storage"
|
|
||||||
|
|
||||||
- name: DATABASE_SSL_MODE
|
|
||||||
value:
|
|
||||||
_default: "disable"
|
|
||||||
|
|
||||||
- name: YANDEX_S3_VERIFY
|
|
||||||
value:
|
|
||||||
_default: "false"
|
|
||||||
secretEnvs:
|
|
||||||
- name: DATABASE_HOST
|
|
||||||
secretName:
|
|
||||||
_default: "postgres-secret"
|
|
||||||
secretKey: "host"
|
|
||||||
|
|
||||||
- name: DATABASE_PORT
|
|
||||||
secretName:
|
|
||||||
_default: "postgres-secret"
|
|
||||||
secretKey: "port"
|
|
||||||
|
|
||||||
- name: DATABASE_NAME
|
|
||||||
secretName:
|
|
||||||
_default: "postgres-secret"
|
|
||||||
secretKey: "database"
|
|
||||||
|
|
||||||
- name: DATABASE_USER
|
|
||||||
secretName:
|
|
||||||
_default: "postgres-secret"
|
|
||||||
secretKey: "username"
|
|
||||||
|
|
||||||
- name: DATABASE_PASSWORD
|
|
||||||
secretName:
|
|
||||||
_default: "postgres-secret"
|
|
||||||
secretKey: "password"
|
|
||||||
|
|
||||||
commitSha: ""
|
|
||||||
gitlabUri: ""
|
|
||||||
gitlabJobUrl: ""
|
|
||||||
owner: ""
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
namespace: attachments
|
|
||||||
resources:
|
|
||||||
- backend.yaml
|
|
||||||
@ -1,11 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
namespace: attachments
|
|
||||||
resources:
|
|
||||||
- ../base
|
|
||||||
patches:
|
|
||||||
- path: patch.yaml
|
|
||||||
target:
|
|
||||||
kind: HelmRelease
|
|
||||||
name: attachments
|
|
||||||
@ -1,35 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
|
||||||
kind: HelmRelease
|
|
||||||
metadata:
|
|
||||||
name: attachments
|
|
||||||
namespace: attachments
|
|
||||||
spec:
|
|
||||||
values:
|
|
||||||
services:
|
|
||||||
attachments:
|
|
||||||
podAnnotations:
|
|
||||||
_default:
|
|
||||||
vault.hashicorp.com/auth-path: auth/kubernetes
|
|
||||||
vault.hashicorp.com/role: attachments
|
|
||||||
vault.hashicorp.com/agent-inject-secret-attachments-db: secrets/data/apps/attachments/postgres
|
|
||||||
vault.hashicorp.com/agent-inject-template-attachments-db: |-
|
|
||||||
{{- with secret "secrets/data/apps/attachments/postgres" -}}
|
|
||||||
DATABASE_HOST={{ index .Data.data "host" }}
|
|
||||||
DATABASE_PORT={{ index .Data.data "port" }}
|
|
||||||
DATABASE_NAME={{ index .Data.data "database" }}
|
|
||||||
DATABASE_USER={{ index .Data.data "username" }}
|
|
||||||
DATABASE_PASSWORD={{ index .Data.data "password" }}
|
|
||||||
DATABASE_SSL_MODE=disable
|
|
||||||
{{- end -}}
|
|
||||||
# vault.hashicorp.com/agent-inject-secret-attachments-s3: secrets/data/minio/apps/attachments
|
|
||||||
# vault.hashicorp.com/agent-inject-template-attachments-s3: |-
|
|
||||||
# {{- with secret "secrets/data/minio/apps/attachments" -}}
|
|
||||||
# YANDEX_S3_ENDPOINT_URL=minio.minio:9000
|
|
||||||
# YANDEX_S3_ACCESS_KEY_ID={{ index .Data.data "access_key" }}
|
|
||||||
# YANDEX_S3_SECRET_ACCESS_KEY={{ index .Data.data "secret_key" }}
|
|
||||||
# YANDEX_S3_USE_SSL=false
|
|
||||||
# YANDEX_S3_REGION=ru-central
|
|
||||||
# YANDEX_S3_VERIFY=false
|
|
||||||
# BUCKET_NAME=attachments
|
|
||||||
# {{- end -}}
|
|
||||||
@ -1,44 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
|
||||||
kind: HelmRelease
|
|
||||||
metadata:
|
|
||||||
name: attachments
|
|
||||||
namespace: attachments
|
|
||||||
spec:
|
|
||||||
values:
|
|
||||||
services:
|
|
||||||
attachments:
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/attachments:0.0.9
|
|
||||||
envs:
|
|
||||||
- name: DATABASE_HOST
|
|
||||||
value:
|
|
||||||
_default: postgres-service.attachments.svc.cluster.local
|
|
||||||
- name: DATABASE_PORT
|
|
||||||
value:
|
|
||||||
_default: '5432'
|
|
||||||
- name: DATABASE_NAME
|
|
||||||
value:
|
|
||||||
_default: attachments
|
|
||||||
- name: POSTGRES_POOL_SIZE
|
|
||||||
value:
|
|
||||||
_default: '10'
|
|
||||||
- name: API_ADDRESS
|
|
||||||
value:
|
|
||||||
_default: 0.0.0.0:8000
|
|
||||||
- name: DATABASE_SSL_MODE
|
|
||||||
value:
|
|
||||||
_default: disable
|
|
||||||
- name: YANDEX_S3_VERIFY
|
|
||||||
value:
|
|
||||||
_default: 'False'
|
|
||||||
- name: YANDEX_S3_USE_SSL
|
|
||||||
value:
|
|
||||||
_default: 'False'
|
|
||||||
- name: YANDEX_S3_ACCOUNT_PATH
|
|
||||||
value:
|
|
||||||
_default: /etc/sarex/yc-s3-storage/yc-s3-service-account.json
|
|
||||||
- name: BUCKET_NAME
|
|
||||||
value:
|
|
||||||
_default: attachments
|
|
||||||
@ -1,11 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
namespace: attachments
|
|
||||||
resources:
|
|
||||||
- ../base
|
|
||||||
patches:
|
|
||||||
- path: attachments.yaml
|
|
||||||
target:
|
|
||||||
kind: HelmRelease
|
|
||||||
name: attachments
|
|
||||||
@ -4,8 +4,8 @@ kind: Kustomization
|
|||||||
resources:
|
resources:
|
||||||
- ../base
|
- ../base
|
||||||
- postgresql.yaml
|
- postgresql.yaml
|
||||||
patches: []
|
patches:
|
||||||
# - path: replicas.yaml
|
- path: replicas.yaml
|
||||||
# target:
|
target:
|
||||||
# kind: HelmRelease
|
kind: Deployment
|
||||||
# name: attachments
|
name: attachments
|
||||||
|
|||||||
@ -9,7 +9,7 @@ spec:
|
|||||||
chart:
|
chart:
|
||||||
spec:
|
spec:
|
||||||
chart: postgresql-contour
|
chart: postgresql-contour
|
||||||
version: "13.0.15"
|
version: "17.0.7"
|
||||||
sourceRef:
|
sourceRef:
|
||||||
kind: HelmRepository
|
kind: HelmRepository
|
||||||
name: yc-oci-charts
|
name: yc-oci-charts
|
||||||
@ -44,7 +44,7 @@ spec:
|
|||||||
image:
|
image:
|
||||||
registry: cr.yandex/crp3ccidau046kdj8g9q
|
registry: cr.yandex/crp3ccidau046kdj8g9q
|
||||||
repository: contour/postgresql
|
repository: contour/postgresql
|
||||||
tag: 13.0.15
|
tag: 17.0.7
|
||||||
pullPolicy: Always
|
pullPolicy: Always
|
||||||
metrics:
|
metrics:
|
||||||
enabled: false
|
enabled: false
|
||||||
@ -89,10 +89,6 @@ spec:
|
|||||||
timeoutSeconds: 5
|
timeoutSeconds: 5
|
||||||
successThreshold: 1
|
successThreshold: 1
|
||||||
failureThreshold: 6
|
failureThreshold: 6
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
cpu: 50m
|
|
||||||
memory: 128Mi
|
|
||||||
nodeSelector:
|
nodeSelector:
|
||||||
dedicated: db
|
dedicated: db
|
||||||
tolerations:
|
tolerations:
|
||||||
@ -103,7 +99,7 @@ spec:
|
|||||||
contour:
|
contour:
|
||||||
enabled: true
|
enabled: true
|
||||||
adminUser: "postgres"
|
adminUser: "postgres"
|
||||||
sharedPreloadLibraries: ""
|
sharedPreloadLibraries: "pg_stat_statements"
|
||||||
vault:
|
vault:
|
||||||
enabled: true
|
enabled: true
|
||||||
role: postgresql
|
role: postgresql
|
||||||
@ -116,7 +112,6 @@ spec:
|
|||||||
user: attachments
|
user: attachments
|
||||||
passwordKey: attachments
|
passwordKey: attachments
|
||||||
extensions: []
|
extensions: []
|
||||||
restoreFromDump: true
|
restoreFromDump: false
|
||||||
dumpKey: "sanitized_dumps_multi/attachments/288/attachments_company288_20260626T202844Z.tar.gz"
|
|
||||||
s3-proxy:
|
s3-proxy:
|
||||||
endpointUrl: "s3-proxy-service.postgresql.svc.cluster.local"
|
endpointUrl: "s3-proxy-service.postgresql.svc.cluster.local"
|
||||||
|
|||||||
@ -1,13 +1,8 @@
|
|||||||
---
|
---
|
||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
apiVersion: apps/v1
|
||||||
kind: HelmRelease
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
name: attachments
|
name: attachments
|
||||||
namespace: attachments
|
namespace: attachments
|
||||||
spec:
|
spec:
|
||||||
values:
|
replicas: 1
|
||||||
services:
|
|
||||||
attachments:
|
|
||||||
deployment:
|
|
||||||
replicaCount:
|
|
||||||
_default: 2
|
|
||||||
|
|||||||
@ -1,15 +0,0 @@
|
|||||||
# auth-flow-frontend — переменные СБОРКИ (build-time), НЕ рантайм-.env.
|
|
||||||
# Приложение не читает .env: значения подставляются в код на этапе сборки
|
|
||||||
# через webpack DefinePlugin (см. webpack.config.ts) или Dockerfile --build-arg / CI BUILD_ARGS.
|
|
||||||
|
|
||||||
# Окружение сборки: local | stage | prod | preprod | contour
|
|
||||||
# local -> mode=development, isDev=true (доступны dev-роуты /login, /logout, /)
|
|
||||||
# остальные -> mode=production
|
|
||||||
ENDPOINT=local
|
|
||||||
|
|
||||||
# Токен приватного npm-реестра @sarex-team (nexus.infra.sarex.io), нужен для `npm i` (.npmrc)
|
|
||||||
NPM_NEXUS_TOKEN=
|
|
||||||
|
|
||||||
# NOTE: IS_DEV вычисляется автоматически (ENDPOINT === 'local'), задавать вручную не нужно.
|
|
||||||
# NOTE: authority и client_id OIDC (Zitadel) НЕ задаются здесь — хостовое приложение
|
|
||||||
# кладёт их в localStorage (STORAGE.AUTHORITY / STORAGE.CLIENT_ID) во время работы.
|
|
||||||
@ -1,162 +0,0 @@
|
|||||||
# Конфигурация проекта auth-flow-frontend
|
|
||||||
|
|
||||||
Документ описывает способы конфигурирования микрофронтенда аутентификации `auth-flow-frontend` (React + webpack), а также все переменные сборки, деплоя и рантайма.
|
|
||||||
|
|
||||||
## Способы конфигурирования
|
|
||||||
|
|
||||||
В отличие от бэкенд-сервисов, приложение **не читает `.env` и не использует dotenv**. Это статический фронтенд, собираемый webpack, поэтому конфигурация распределена по трём уровням:
|
|
||||||
|
|
||||||
1. **Сборка (build-time).** Переменная `ENDPOINT` определяет окружение. Её значение подставляется в код на этапе сборки через `webpack.DefinePlugin` (`webpack.config.ts`) — заменяет обращения `process.env.ENDPOINT` и `process.env.IS_DEV` на строковые литералы. Выбор режима (`development`/`production`) и флага `isDev` выполняется в `webpack/build.config.ts`.
|
|
||||||
2. **Установка зависимостей.** Пакеты `@sarex-team/*` тянутся из приватного npm-реестра (`.npmrc` → `nexus.infra.sarex.io`). Для доступа нужен токен `NPM_NEXUS_TOKEN`.
|
|
||||||
3. **Рантайм (runtime).** Параметры OIDC-провайдера — `authority` и `client_id` — читаются из `localStorage` (`src/config/zitadel.ts`) по ключам `STORAGE.AUTHORITY` и `STORAGE.CLIENT_ID` из `@sarex-team/sdk-js`. Их задаёт хостовое приложение, а не сборка.
|
|
||||||
|
|
||||||
Источники переменных по способам запуска:
|
|
||||||
|
|
||||||
| Способ запуска | Откуда берутся переменные |
|
|
||||||
| --- | --- |
|
|
||||||
| Локально (dev) | `npm run dev` → `ENDPOINT=local webpack serve`. Dev-сервер на `https://localhost:9000` |
|
|
||||||
| Локально (build) | `npm run build` → `webpack --config webpack.config.ts` (по умолчанию `ENDPOINT=prod`, см. `build.config.ts`) |
|
|
||||||
| Docker | `Dockerfile`: build-args `ENDPOINT` и `NPM_NEXUS_TOKEN`; сборка dist → отдача через nginx |
|
|
||||||
| Kubernetes (Helm) | `.helm/values.yaml` (чарт `universal-chart`): блок `services.frontend`, `global.env` |
|
|
||||||
| CI/CD (GitLab) | `.gitlab-ci.yml`: `workflow.rules` (ветка/тег → `STAND`, `ENDPOINT`, `CHART_VERSION`), `BUILD_ARGS`, `HELM_SET_ARGS` |
|
|
||||||
|
|
||||||
## Переменные сборки (build-time)
|
|
||||||
|
|
||||||
Подставляются в код на этапе сборки; в рантайме это уже константы.
|
|
||||||
|
|
||||||
| Переменная | Тип | Значение по умолчанию | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `ENDPOINT` | enum | `prod` (в `build.config.ts`, если не задана) | Окружение сборки: `local`/`stage`/`prod`/`preprod`/`contour`. Определяет `mode` (`development` для `local`, иначе `production`) и `isDev` |
|
|
||||||
| `IS_DEV` | bool | — (вычисляется) | `true`, если `ENDPOINT === 'local'`. Включает dev-роуты (`/login`, `/logout`, `/`). Задаётся автоматически через `DefinePlugin`, вручную указывать не нужно |
|
|
||||||
| `NPM_NEXUS_TOKEN` | string | — | Токен авторизации в приватном npm-реестре `@sarex-team` (`.npmrc`). Обязателен для `npm i` |
|
|
||||||
|
|
||||||
> `mode` по окружениям (`webpack/build.config.ts`): `local` → `development`, `stage`/`prod`/`preprod`/`contour` → `production`. Неизвестное значение `ENDPOINT` приводит к ошибке сборки.
|
|
||||||
|
|
||||||
## Переменные рантайма (localStorage)
|
|
||||||
|
|
||||||
Читаются в браузере во время работы приложения; задаются хостовым приложением, не сборкой.
|
|
||||||
|
|
||||||
| Ключ | Источник | Назначение |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| `STORAGE.AUTHORITY` | `@sarex-team/sdk-js` | URL issuer'а Zitadel (`authority` OIDC). Обязателен — при отсутствии `src/config/zitadel.ts` бросает `Error("Authority or client ID is not set")` |
|
|
||||||
| `STORAGE.CLIENT_ID` | `@sarex-team/sdk-js` | `client_id` OIDC-клиента. Обязателен (та же проверка) |
|
|
||||||
| `sarex_logout` (`LOGOUT_STORAGE_KEY`) | `src/config/logout.ts` | Состояние логаута между вкладками (`{ logoutAt, owner, reason }`). Снимается только валидным токеном в `setTokensInfo` |
|
|
||||||
| access / refresh / id токены | `storage` из `@sarex-team/sdk-js` | Устанавливаются в `setTokensInfo` (`storage.setAccessToken`/`setRefreshToken`/`setIdentityToken`) после успешного колбэка |
|
|
||||||
|
|
||||||
## Конфигурация OIDC (Zitadel)
|
|
||||||
|
|
||||||
Задаётся в `src/config/zitadel.ts` (`configZitadel: ZitadelConfig`), клиент создаётся через `createZitadelAuth`.
|
|
||||||
|
|
||||||
| Параметр | Значение | Назначение |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| `authority` | из `localStorage` (`STORAGE.AUTHORITY`) | Issuer Zitadel |
|
|
||||||
| `client_id` | из `localStorage` (`STORAGE.CLIENT_ID`) | Идентификатор клиента |
|
|
||||||
| `response_type` | `code` | Authorization Code Flow |
|
|
||||||
| `scope` | `openid profile email offline_access urn:zitadel:iam:user:metadata` | Запрашиваемые области |
|
|
||||||
| `redirect_uri` | `${window.location.origin}/auth/callback` | URL возврата после логина |
|
|
||||||
| `post_logout_redirect_uri` | `${window.location.origin}/login` | URL после логаута |
|
|
||||||
| `redirectMethod` | `replace` | Замена записи в истории браузера |
|
|
||||||
| `revokeTokensOnSignout` | `false` | Не отзывать токены при выходе |
|
|
||||||
| `automaticSilentRenew` | `false` | Фоновое обновление токенов выключено |
|
|
||||||
| `validateSubOnSilentRenew` | `false` | — |
|
|
||||||
| `silentRequestTimeoutInSeconds` | `100` | Таймаут silent-запроса |
|
|
||||||
|
|
||||||
## Роуты приложения
|
|
||||||
|
|
||||||
Определены в `src/config/urls.ts`, диспетчеризация в `src/App.tsx`.
|
|
||||||
|
|
||||||
| Роут | Константа | Доступность | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `/auth/callback` | `CALLBACK` | всегда | Обработка OIDC-колбэка (по умолчанию для неизвестных путей) |
|
|
||||||
| `/auth/error` | `ERROR` | всегда | Страница ошибки аутентификации |
|
|
||||||
| `/login` | `LOGIN` | только dev | Dev-страница входа |
|
|
||||||
| `/logout` | `LOGOUT` | только dev | Dev-страница выхода |
|
|
||||||
| `/` | `HOME` | только dev | Dev-навигация |
|
|
||||||
|
|
||||||
> В production разрешены только `/auth/callback` и `/auth/error` (`ALLOWED_PATHS`); в dev дополнительно `/login`, `/logout`, `/` (`ALLOWED_PATHS_DEV`). Неразрешённый путь заменяется на `/auth/callback` (`history.replaceState`).
|
|
||||||
|
|
||||||
## Сборка (webpack)
|
|
||||||
|
|
||||||
`webpack.config.ts` + `webpack/build.config.ts`.
|
|
||||||
|
|
||||||
| Параметр | Значение | Примечание |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| `entry` | `src/index.tsx` | Точка входа |
|
|
||||||
| `output.path` | `dist/` | |
|
|
||||||
| `output.filename` | `index.js` | |
|
|
||||||
| `output.publicPath` | `/` (dev) или `/auth/callback/` (prod) | Зависит от `isDev` |
|
|
||||||
| loader | `esbuild-loader`, target `es2015` | Для `.tsx?/.jsx?` |
|
|
||||||
| `devServer` | `https`, `port: 9000`, `hot`, `historyApiFallback`, `open` | Только dev |
|
|
||||||
| plugins | `HtmlWebpackPlugin` (`public/index.html`), `DefinePlugin` (`ENDPOINT`, `IS_DEV`) | |
|
|
||||||
|
|
||||||
Node-версия для разработки: `v20.0.0` (`.nvmrc`; в `package.json` заявлено `v20.0.0`, реальная база образа — `node:20`).
|
|
||||||
|
|
||||||
## Docker
|
|
||||||
|
|
||||||
`Dockerfile` — двухстадийная сборка.
|
|
||||||
|
|
||||||
| Стадия | База | Действия |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| build | `cr.yandex/crp3ccidau046kdj8g9q/node:20` | `npm i` (с `NPM_NEXUS_TOKEN`), `npm run build` (с `ENDPOINT`) |
|
|
||||||
| runtime | `cr.yandex/crp3ccidau046kdj8g9q/nginx:latest` | Копирует `/app/dist/` → `/dist/`, `nginx/nginx.conf` → `/etc/nginx/nginx.conf` |
|
|
||||||
|
|
||||||
Build-args: `ENDPOINT`, `NPM_NEXUS_TOKEN`.
|
|
||||||
|
|
||||||
## Nginx
|
|
||||||
|
|
||||||
`nginx/nginx.conf` — отдача статики и healthcheck.
|
|
||||||
|
|
||||||
| Локация | Поведение |
|
|
||||||
| --- | --- |
|
|
||||||
| `= /auth/callback/index.js` | `alias /dist/index.js` |
|
|
||||||
| `^~ /auth/callback` | `try_files $uri $uri/ /index.html`; заголовки `Cache-Control: no-store,...`, кеш отключён |
|
|
||||||
| `= /ping` | `200 {"result": "ok"}` (healthcheck) |
|
|
||||||
|
|
||||||
`listen 80`, `root /dist`, логи в stdout/stderr, `gzip on`.
|
|
||||||
|
|
||||||
## Helm-чарт (`.helm/values.yaml`)
|
|
||||||
|
|
||||||
Деплой через зонтичный чарт `universal-chart` (`oci://cr.yandex/crp3ccidau046kdj8g9q/charts`, версия `0.1.7`; `Chart.yaml` приложения — `auth-flow-frontend` `1.0.0`). Значения задаются с ключами по окружениям (`_default`/`stage`/`preprod`/`production`).
|
|
||||||
|
|
||||||
| Параметр | Значение | Назначение |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| `global.env` | `stage` (`_default` в файле) | Активное окружение чарта |
|
|
||||||
| `services.frontend.enabled` | `true` | Включение сервиса |
|
|
||||||
| `deployment.name._default` | `auth-flow-frontend` | Имя деплоймента |
|
|
||||||
| `deployment.replicaCount` | `_default: 1`, `production: 2` | Число реплик |
|
|
||||||
| `deployment.port._default` | `80` | Порт контейнера |
|
|
||||||
| `deployment.revisionHistoryLimit._default` | `5` | Хранимые ревизии |
|
|
||||||
| `deployment.resources.requests` | `memory: 128Mi`, `cpu: 100m` | Реквесты ресурсов |
|
|
||||||
| `deployment.probes.liveness/readiness` | `httpGet` `/` : `80` | Пробы |
|
|
||||||
| `image.name._default` | `cr.yandex/crp3ccidau046kdj8g9q/auth-flow-frontend` | Образ |
|
|
||||||
| `image.pullPolicy._default` | `IfNotPresent` | |
|
|
||||||
| `imagePullSecrets.name._default` | `dockerhub` (enabled `false`) | Секрет реестра |
|
|
||||||
| `service` | `ClusterIP`, port/targetPort `80`, portName `http`, имя `auth-flow-frontend-service` | Service |
|
|
||||||
| `envs` | `[]` | Переменные окружения контейнера (пусто) |
|
|
||||||
| `volumes._default` | `[]` | Тома |
|
|
||||||
| `commitSha`/`gitlabUri`/`gitlabJobUrl`/`owner` | заполняются из CI (`owner` по умолчанию `team-abc`) | Метаданные |
|
|
||||||
|
|
||||||
## CI (`.gitlab-ci.yml`)
|
|
||||||
|
|
||||||
Подключает общие шаблоны `generic/common-ci` (`common-security-scan.yaml`, `universal-pipeline.yaml` ref `apps-business`).
|
|
||||||
|
|
||||||
Базовые переменные: `SERVICE_NAME=auth-flow-frontend`, `DOCKERFILE_PATH=./Dockerfile`, `CI_TRIGGER_SOURCE=app`.
|
|
||||||
|
|
||||||
Переключение окружения по `workflow.rules`:
|
|
||||||
|
|
||||||
| Условие | STAND | ENDPOINT | CHART_VERSION | K8S_HUSTLER_BRANCH |
|
|
||||||
| --- | --- | --- | --- | --- |
|
|
||||||
| `merge_request_event` | — | — | — (`ENABLE_BUILD_IMAGE=false`) | — |
|
|
||||||
| ветка `stage` | `stage` | `stage` | `0.0.1-stage` | `universal-chart-stage` |
|
|
||||||
| тег (`CI_COMMIT_TAG`) | `production` | `prod` | `0.0.1-prod` | `universal-chart-production` |
|
|
||||||
|
|
||||||
> Правило для ветки `master` → `preprod` присутствует, но **закомментировано**. `NAMESPACE` для всех окружений — `platform`, `RELEASE_NAME`/`CHART_NAME` — `${SERVICE_NAME}`.
|
|
||||||
|
|
||||||
`BUILD_ARGS` прокидывают `--build-arg ENDPOINT=<env>` и `--build-arg NPM_NEXUS_TOKEN=${NPM_NEXUS_TOKEN}`. `HELM_SET_ARGS` устанавливают `universal-chart.services.frontend.image.name.<env>`, `global.env`, а также `commitSha`, `gitlabUri`, `gitlabJobUrl`, `owner`.
|
|
||||||
|
|
||||||
## Замечания и потенциальные проблемы
|
|
||||||
|
|
||||||
- **Обязательные runtime-параметры.** Если в `localStorage` нет `AUTHORITY` или `CLIENT_ID`, `src/config/zitadel.ts` бросает ошибку при инициализации — приложение не стартует. Эти значения должен положить хостовый сервис до загрузки микрофронтенда.
|
|
||||||
- **Нет `.env`.** Приложение не читает dotenv; `process.env.ENDPOINT`/`IS_DEV` существуют только на этапе сборки (замена через `DefinePlugin`). Значение `ENDPOINT` задаётся только через CLI/`--build-arg`/CI.
|
|
||||||
- **publicPath в prod** — `/auth/callback/`: приложение обслуживается nginx под префиксом `/auth/callback`, что согласовано с `redirect_uri` OIDC.
|
|
||||||
- **`silentRenew` отключён** намеренно (`automaticSilentRenew: false`) — обновление токенов не выполняется в фоне.
|
|
||||||
@ -1,80 +0,0 @@
|
|||||||
# Эндпоинты, с которыми взаимодействует auth-flow-frontend
|
|
||||||
|
|
||||||
Документ описывает внешние эндпоинты, внутренние роуты и каналы межвкладочной коммуникации микрофронтенда аутентификации `auth-flow-frontend`.
|
|
||||||
|
|
||||||
## Как устроено взаимодействие
|
|
||||||
|
|
||||||
Приложение отвечает только за аутентификацию по протоколу **OIDC (Authorization Code Flow + PKCE)**. Прямых REST-запросов к бэкенд-сервисам Sarex у него **нет** — всё сетевое взаимодействие идёт с провайдером идентификации **Zitadel** через обёртку `@sarex-team/sdk-js/zitadel` (поверх `oidc-client`).
|
|
||||||
|
|
||||||
Клиент создаётся в `src/config/zitadel.ts` (`createZitadelAuth(configZitadel)`). Базовый адрес провайдера (`authority`, issuer) и `client_id` берутся из `localStorage` во время работы, а не задаются сборкой. OIDC-клиент сам находит конкретные эндпоинты issuer'а через discovery-документ `/.well-known/openid-configuration`.
|
|
||||||
|
|
||||||
## Провайдер идентификации (Zitadel) по окружениям
|
|
||||||
|
|
||||||
Фактический `authority` подставляется хостовым приложением через `localStorage` (`STORAGE.AUTHORITY`) — в самом `auth-flow-frontend` хосты не захардкожены. Ниже — известные для платформы Sarex значения (справочно):
|
|
||||||
|
|
||||||
| Окружение | `authority` (issuer) |
|
|
||||||
| --- | --- |
|
|
||||||
| `stage` | `https://idp.dev.stage.sarex.io` |
|
|
||||||
| `prod` | `https://login.sarex.io` |
|
|
||||||
|
|
||||||
## OIDC-эндпоинты провайдера
|
|
||||||
|
|
||||||
Обнаруживаются через discovery и вызываются `oidc-client` относительно `authority`. Итоговые пути определяются метаданными issuer'а.
|
|
||||||
|
|
||||||
| Эндпоинт (метаданные) | Метод | Где инициируется | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `/.well-known/openid-configuration` | GET | инициализация `UserManager` | Discovery метаданных провайдера |
|
|
||||||
| `authorization_endpoint` | GET (redirect) | `LoginPage` → `zitadel.authorize()` | Старт авторизации, редирект на форму входа |
|
|
||||||
| `token_endpoint` | POST | `AuthCallbackPage` → `zitadel.userManager.signinCallback()` | Обмен `code` → access/refresh/id токены |
|
|
||||||
| `jwks_uri` | GET | `oidc-client` | Ключи для проверки подписи токенов |
|
|
||||||
| `userinfo_endpoint` | GET | `oidc-client` (при необходимости) | Профиль пользователя |
|
|
||||||
| `end_session_endpoint` | GET (redirect) | `LogoutPage` → `zitadel.signout()` | Завершение сессии (логаут) |
|
|
||||||
|
|
||||||
Параметры OIDC-запросов (из `configZitadel`):
|
|
||||||
|
|
||||||
- `response_type`: `code`
|
|
||||||
- `scope`: `openid profile email offline_access urn:zitadel:iam:user:metadata`
|
|
||||||
- `redirect_uri`: `${window.location.origin}/auth/callback`
|
|
||||||
- `post_logout_redirect_uri`: `${window.location.origin}/login`
|
|
||||||
- `revokeTokensOnSignout`: `false`, `automaticSilentRenew`: `false`
|
|
||||||
|
|
||||||
## Внутренние роуты приложения
|
|
||||||
|
|
||||||
Диспетчеризация — в `src/App.tsx` по `window.location.pathname` (роуты из `src/config/urls.ts`).
|
|
||||||
|
|
||||||
| Роут | Страница | Метод | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `/auth/callback` | `AuthCallbackPage` | — | Обработка OIDC-колбэка: `signinCallback()`, установка токенов, рассылка события в `login_channel`. Дефолт для неизвестных путей |
|
|
||||||
| `/auth/error` | `AuthErrorPage` | — | Отображение ошибки аутентификации (параметры `error`, `error_description`, `state`, `message` из query) |
|
|
||||||
| `/login` | `LoginPage` (dev) | — | Кнопка входа (`zitadel.authorize()`) |
|
|
||||||
| `/logout` | `LogoutPage` (dev) | — | Кнопка выхода (`zitadel.signout()`) |
|
|
||||||
| `/` | `MainPage` (dev) | — | Dev-навигация (login/logout) |
|
|
||||||
| `/ping` | nginx | GET | Healthcheck, отдаёт `{"result": "ok"}` |
|
|
||||||
|
|
||||||
## Поток аутентификации (кратко)
|
|
||||||
|
|
||||||
1. `LoginPage` вызывает `zitadel.authorize()` → редирект на `authorization_endpoint` Zitadel.
|
|
||||||
2. Провайдер возвращает пользователя на `redirect_uri` = `/auth/callback` с `code`.
|
|
||||||
3. `AuthCallbackPage` вызывает `signinCallback()` → обмен `code` на токены через `token_endpoint`.
|
|
||||||
4. Токены сохраняются (`setTokensInfo` → `storage.setAccessToken/setRefreshToken/setIdentityToken`), снимается флаг логаута.
|
|
||||||
5. Результат рассылается остальным вкладкам, происходит закрытие overlay-окна (`window.opener`) или переход на `/` (`HOME`).
|
|
||||||
6. При ошибке — редирект на `/auth/error` с деталями.
|
|
||||||
|
|
||||||
## Межвкладочная и оконная коммуникация
|
|
||||||
|
|
||||||
| Канал | Ключ / имя | Назначение |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| `BroadcastChannel` | `login_channel` | Сообщения `{ type: "login_success" }` и `{ type: "login_error", reason }` между вкладками |
|
|
||||||
| `localStorage` | `sarex_logout` (`LOGOUT_STORAGE_KEY`) | Состояние логаута между вкладками (`logoutAt`, `owner`, `reason`) |
|
|
||||||
| window events | `setTokensInfoIntoWindowEvents` (`@sarex-team/sdk-js`) | Оповещение хостового приложения об обновлении токенов (`reason: "auth_callback"`) |
|
|
||||||
| `window.opener` | — | Режим overlay: после успешного входа окно закрывается (`window.close()`) |
|
|
||||||
|
|
||||||
## Обработка ошибок
|
|
||||||
|
|
||||||
Логика — в `src/utils/authError.ts`; отображение — `AuthErrorPage`.
|
|
||||||
|
|
||||||
- Параметры ошибки читаются из query-строки колбэка: `error`, `error_description`, `state`, `message` (`parseAuthErrorFromSearch`).
|
|
||||||
- Причина ошибки: `error_description` → `message` → `error` → `"Unknown error"` (`getAuthErrorReason`).
|
|
||||||
- URL страницы ошибки собирается `buildAuthErrorUrl` (query из непустых параметров, иначе просто `/auth/error`).
|
|
||||||
- Если контекста ошибки нет — редирект на `/` (`HOME`).
|
|
||||||
- Пользователю доступны кнопки «Скопировать детали ошибки» (`formatAuthErrorForCopy`) и «Вернуться на форму входа» (`/login`), а также ссылка в поддержку `mailto:support@sarex.io`.
|
|
||||||
@ -1,7 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
namespace: auth-flow
|
|
||||||
resources:
|
|
||||||
- namespace.yaml
|
|
||||||
- helmrelease.yaml
|
|
||||||
@ -1,7 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Namespace
|
|
||||||
metadata:
|
|
||||||
name: auth-flow
|
|
||||||
labels:
|
|
||||||
istio-injection: enabled
|
|
||||||
@ -1,92 +0,0 @@
|
|||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
|
||||||
kind: HelmRelease
|
|
||||||
metadata:
|
|
||||||
name: frontend
|
|
||||||
namespace: auth-flow
|
|
||||||
|
|
||||||
spec:
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
chart:
|
|
||||||
spec:
|
|
||||||
chart: universal-chart
|
|
||||||
version: "0.1.7"
|
|
||||||
sourceRef:
|
|
||||||
kind: HelmRepository
|
|
||||||
name: yc-oci-charts
|
|
||||||
namespace: flux-system
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
install:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
upgrade:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
values:
|
|
||||||
global:
|
|
||||||
env: _default
|
|
||||||
|
|
||||||
services:
|
|
||||||
frontend:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/auth-flow-frontend:production_48bec2ff
|
|
||||||
pullPolicy:
|
|
||||||
_default: IfNotPresent
|
|
||||||
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: frontend
|
|
||||||
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
stage: 1
|
|
||||||
preprod: 3
|
|
||||||
production: 3
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 80
|
|
||||||
|
|
||||||
probes:
|
|
||||||
liveness:
|
|
||||||
enabled: false
|
|
||||||
readiness:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
service:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: frontend-service
|
|
||||||
|
|
||||||
|
|
||||||
type:
|
|
||||||
_default: ClusterIP
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 80
|
|
||||||
|
|
||||||
targetPort:
|
|
||||||
_default: 80
|
|
||||||
|
|
||||||
portName:
|
|
||||||
_default: http
|
|
||||||
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: regcred
|
|
||||||
|
|
||||||
|
|
||||||
commitSha: ""
|
|
||||||
gitlabUri: ""
|
|
||||||
gitlabJobUrl: ""
|
|
||||||
owner: ""
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
namespace: auth-flow
|
|
||||||
resources:
|
|
||||||
- helmrelease.yaml
|
|
||||||
@ -1,92 +0,0 @@
|
|||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
|
||||||
kind: HelmRelease
|
|
||||||
metadata:
|
|
||||||
name: frontend
|
|
||||||
namespace: auth-flow
|
|
||||||
|
|
||||||
spec:
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
chart:
|
|
||||||
spec:
|
|
||||||
chart: universal-chart
|
|
||||||
version: "0.1.7"
|
|
||||||
sourceRef:
|
|
||||||
kind: HelmRepository
|
|
||||||
name: yc-oci-charts
|
|
||||||
namespace: flux-system
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
install:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
upgrade:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
values:
|
|
||||||
global:
|
|
||||||
env: _default
|
|
||||||
|
|
||||||
services:
|
|
||||||
frontend:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/auth-flow-frontend:production_48bec2ff
|
|
||||||
pullPolicy:
|
|
||||||
_default: IfNotPresent
|
|
||||||
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: frontend
|
|
||||||
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
stage: 1
|
|
||||||
preprod: 3
|
|
||||||
production: 3
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 80
|
|
||||||
|
|
||||||
probes:
|
|
||||||
liveness:
|
|
||||||
enabled: false
|
|
||||||
readiness:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
service:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: frontend-service
|
|
||||||
|
|
||||||
|
|
||||||
type:
|
|
||||||
_default: ClusterIP
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 80
|
|
||||||
|
|
||||||
targetPort:
|
|
||||||
_default: 80
|
|
||||||
|
|
||||||
portName:
|
|
||||||
_default: http
|
|
||||||
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: regcred
|
|
||||||
|
|
||||||
|
|
||||||
commitSha: ""
|
|
||||||
gitlabUri: ""
|
|
||||||
gitlabJobUrl: ""
|
|
||||||
owner: ""
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
namespace: auth-flow
|
|
||||||
resources:
|
|
||||||
- helmrelease.yaml
|
|
||||||
@ -1,10 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
resources:
|
|
||||||
- ../base
|
|
||||||
patches:
|
|
||||||
- path: namespace.yaml
|
|
||||||
target:
|
|
||||||
kind: Namespace
|
|
||||||
name: auth-flow
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Namespace
|
|
||||||
metadata:
|
|
||||||
name: auth-flow
|
|
||||||
labels:
|
|
||||||
istio-injection: enabled
|
|
||||||
security.deckhouse.io/pod-policy: privileged
|
|
||||||
@ -1,10 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
resources:
|
|
||||||
- ../base
|
|
||||||
patches: []
|
|
||||||
# - path: replicas.yaml
|
|
||||||
# target:
|
|
||||||
# kind: HelmRelease
|
|
||||||
# name: frontend
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
|
||||||
kind: HelmRelease
|
|
||||||
metadata:
|
|
||||||
name: frontend
|
|
||||||
namespace: auth-flow
|
|
||||||
spec:
|
|
||||||
values:
|
|
||||||
services:
|
|
||||||
frontend:
|
|
||||||
deployment:
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
@ -1,64 +0,0 @@
|
|||||||
# App
|
|
||||||
# APP_NAME/APP_VERSION/LOG_LEVEL читаются кодом, но в деплой-envs их обычно не задают
|
|
||||||
APP_NAME='BIM Backend v2'
|
|
||||||
APP_VERSION=local
|
|
||||||
LOG_LEVEL=info
|
|
||||||
# Адрес прослушивания HTTP API (host:port)
|
|
||||||
API_ADDRESS=0.0.0.0:5555
|
|
||||||
|
|
||||||
# Master-кластер PostgreSQL (BIM id <= LAST_MASTER_BIM)
|
|
||||||
POSTGRES_ADDRESS=localhost
|
|
||||||
POSTGRES_PORT=5432
|
|
||||||
POSTGRES_USER=user
|
|
||||||
POSTGRES_PASSWORD=password
|
|
||||||
POSTGRES_DB=bimbackendv2
|
|
||||||
POSTGRES_POOL_SIZE=10
|
|
||||||
DB_CERT_PATH=./.docker/yandex_pg.pem
|
|
||||||
|
|
||||||
# Slave-1 кластер PostgreSQL (шардирование по BIM id)
|
|
||||||
POSTGRES_ADDRESS_2=localhost
|
|
||||||
POSTGRES_PORT_2=5433
|
|
||||||
POSTGRES_USER_2=user
|
|
||||||
POSTGRES_PASSWORD_2=password
|
|
||||||
POSTGRES_DB_2=bimbackendv2
|
|
||||||
POSTGRES_POOL_SIZE_2=10
|
|
||||||
DB_CERT_PATH_2=./.docker/yandex_pg.pem
|
|
||||||
|
|
||||||
# Slave-2 кластер PostgreSQL (шардирование по BIM id)
|
|
||||||
POSTGRES_ADDRESS_3=localhost
|
|
||||||
POSTGRES_PORT_3=5434
|
|
||||||
POSTGRES_USER_3=user
|
|
||||||
POSTGRES_PASSWORD_3=password
|
|
||||||
POSTGRES_DB_3=bimbackendv2
|
|
||||||
POSTGRES_POOL_SIZE_3=10
|
|
||||||
DB_CERT_PATH_3=./.docker/yandex_pg.pem
|
|
||||||
|
|
||||||
# Границы шардирования BIM id между кластерами
|
|
||||||
LAST_MASTER_BIM=10
|
|
||||||
LAST_MASTER_BIM_V3=0
|
|
||||||
LAST_SLAVE_1_BIM=0
|
|
||||||
LAST_SLAVE_1_BIM_V3=0
|
|
||||||
|
|
||||||
# TLS до PostgreSQL (0 — локально, 1 — в облаке)
|
|
||||||
ENABLE_SSL=0
|
|
||||||
# Логировать SQL-запросы (1 — включено)
|
|
||||||
ENABLE_SQL_QUERY=1
|
|
||||||
|
|
||||||
# Внешний Django-бэкенд (проверка прав администратора)
|
|
||||||
DJANGO_HOST=https://stage.sarex.io
|
|
||||||
|
|
||||||
# Режим интеграционных тестов (в этом режиме CheckUserIsAdmin всегда true)
|
|
||||||
INTEGRATION_TESTS=0
|
|
||||||
|
|
||||||
# --- Переменные окружения, не читаемые config.go (инфраструктура/тесты/сборка) ---
|
|
||||||
# Проброс портов и локальная БД в docker-compose
|
|
||||||
# API_PORT=5555
|
|
||||||
# POSTGRES_EXTERNAL_PORT=5432
|
|
||||||
# POSTGRES_EXTERNAL_PORT_2=5433
|
|
||||||
# Значения для контейнеров тестов
|
|
||||||
# TEST_ENV=1
|
|
||||||
# TEST_BIM=1
|
|
||||||
# JWT_TEST=<jwt>
|
|
||||||
# Объявлены в .env, но config.go их не использует
|
|
||||||
# GRPC_ADDRESS=0.0.0.0
|
|
||||||
# GRPC_PORT=50051
|
|
||||||
@ -1,189 +0,0 @@
|
|||||||
# Конфигурация проекта bim-backend-v2
|
|
||||||
|
|
||||||
Документ описывает все переменные окружения и способы конфигурирования сервиса.
|
|
||||||
|
|
||||||
## Способы конфигурирования
|
|
||||||
|
|
||||||
Сервис настраивается **только через переменные окружения**. Разбор выполняется в `config/config.go` (функция `NewConfig`) через библиотеку [`kelseyhightower/envconfig`](https://github.com/kelseyhightower/envconfig) (структура `Config`).
|
|
||||||
|
|
||||||
Особенности разбора:
|
|
||||||
|
|
||||||
- **Префикса нет** — `envconfig.Process("", &cfg)` вызывается с пустым префиксом, поэтому имена переменных задаются как есть (напр. `POSTGRES_ADDRESS`, `API_ADDRESS`). Имя переменной определяется тегом `envconfig:"..."` у каждого поля.
|
|
||||||
- Типы приводятся автоматически по типу поля Go (`string`, `int`, `bool`, `uint64`). Для `bool` подходят `1`/`0`/`true`/`false`.
|
|
||||||
- Ошибка разбора приводит к `panic` при старте (в `NewConfig` `envconfig.Process` завёрнут в `sync.Once`, ошибка не возвращается, а паникует).
|
|
||||||
- Отсутствующая переменная не является ошибкой — поле получает нулевое значение соответствующего типа (пустая строка, `0`, `false`). Обязательность полей не проверяется.
|
|
||||||
|
|
||||||
В отличие от python-сервисов, приложение **загружает `.env` автоматически**: в `cmd/httpserver/main.go` вызывается `godotenv.Load(".env")` (если файла нет — печатается предупреждение и используются переменные окружения процесса).
|
|
||||||
|
|
||||||
Отдельного конфиг-файла (yaml/toml) у приложения нет.
|
|
||||||
|
|
||||||
Источники переменных по способам запуска:
|
|
||||||
|
|
||||||
| Способ запуска | Откуда берутся переменные |
|
|
||||||
| --- | --- |
|
|
||||||
| Локально (бинарник) | Файл `.env` в рабочем каталоге (`godotenv.Load`) либо переменные окружения процесса |
|
|
||||||
| Локально (контейнеры) | `.docker/docker-compose.yml`: `env_file` → `.docker/.env` + `.docker/.docker.env` |
|
|
||||||
| Kubernetes (Helm, репозиторий приложения) | `.helm/values-<env>.yaml`: блоки `envs` (обычные значения) и `secrets` (из k8s-секретов); шаблон `.helm/templates/api.yaml` |
|
|
||||||
| Kubernetes (IaC, этот репозиторий) | `iac/apps/bim/base/backend-deployment.yaml`: блок `env` и секреты из Vault (аннотации `vault.hashicorp.com/*`, шаблон `bim-postgresql`) |
|
|
||||||
| CI/CD (GitLab) | `.gitlab-ci.yml`: подключение общих пайплайнов `generic/common-ci` и переменные `workflow.rules` по ветке/тегу |
|
|
||||||
|
|
||||||
Способы запуска процессов:
|
|
||||||
|
|
||||||
| Команда | Точка входа | Назначение |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| `httpserver` (`make api` → `go install ./cmd/httpserver`) | `cmd/httpserver/main.go` | HTTP API. При старте применяет миграции (`appmigrations.RunOnStartup`), поднимает `net/http/pprof` на `:8081`, затем запускает API на `API_ADDRESS` |
|
|
||||||
| `migrations` (`go install ./cmd/migrations`) | `cmd/migrations/main.go` | Отдельный запуск миграций БД |
|
|
||||||
|
|
||||||
Порядок запуска в контейнере (`.docker/entrypoint.sh`): запускается `/go/bin/httpserver` (строка запуска миграций закомментирована — миграции выполняются самим приложением на старте). Финальный образ (`.docker/api.dockerfile`) — `scratch` со статически слинкованным бинарником `httpserver` и вшитым CA-сертификатом Postgres (`/root/yandex_pg.pem`).
|
|
||||||
|
|
||||||
## Переменные приложения
|
|
||||||
|
|
||||||
Ниже перечислены все переменные, читаемые кодом (`config/config.go`). Префикса нет. Дефолт — это нулевое значение типа Go, если переменная не задана.
|
|
||||||
|
|
||||||
### App
|
|
||||||
|
|
||||||
| Переменная | Тип | Значение по умолчанию | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `APP_NAME` | string | `""` | Имя приложения (в коде помечено TODO — в deploy-envs не задаётся) |
|
|
||||||
| `APP_VERSION` | string | `""` | Версия приложения (TODO — в deploy-envs не задаётся) |
|
|
||||||
| `LOG_LEVEL` | string | `""` | Уровень логирования, передаётся в `logging.NewLogger` (TODO — в deploy-envs не задаётся) |
|
|
||||||
| `API_ADDRESS` | string | `""` | Адрес прослушивания HTTP API в формате `host:port` (напр. `0.0.0.0:8080`) |
|
|
||||||
| `TEST_ENV` | string | `""` | Служебное поле для тестов |
|
|
||||||
|
|
||||||
### PostgreSQL
|
|
||||||
|
|
||||||
Сервис работает с **тремя** кластерами PostgreSQL (master, slave-1, slave-2). Выбор кластера для конкретного BIM выполняется по его id в `internal/app/http/httpserver.go` (сравнение с `LAST_MASTER_BIM*`/`LAST_SLAVE_1_BIM*`). Строка подключения собирается в `Config.GetPostgresConnectionURL` (`postgres://user:password@addr:port/db`, при `ENABLE_SSL=false` добавляется `?sslmode=disable`).
|
|
||||||
|
|
||||||
Master-кластер:
|
|
||||||
|
|
||||||
| Переменная | Тип | Назначение |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| `POSTGRES_ADDRESS` | string | Хост PostgreSQL (master) |
|
|
||||||
| `POSTGRES_PORT` | string | Порт PostgreSQL (master) |
|
|
||||||
| `POSTGRES_USER` | string | Пользователь БД |
|
|
||||||
| `POSTGRES_PASSWORD` | string | Пароль пользователя БД |
|
|
||||||
| `POSTGRES_DB` | string | Имя базы данных |
|
|
||||||
| `POSTGRES_POOL_SIZE` | int | Размер пула соединений |
|
|
||||||
| `DB_CERT_PATH` | string | Путь к CA-сертификату PostgreSQL (используется при `ENABLE_SSL=1`) |
|
|
||||||
|
|
||||||
Slave-1 кластер — те же поля с суффиксом `_2`:
|
|
||||||
|
|
||||||
| Переменная | Тип | Назначение |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| `POSTGRES_ADDRESS_2` | string | Хост PostgreSQL (slave-1) |
|
|
||||||
| `POSTGRES_PORT_2` | string | Порт |
|
|
||||||
| `POSTGRES_USER_2` | string | Пользователь |
|
|
||||||
| `POSTGRES_PASSWORD_2` | string | Пароль |
|
|
||||||
| `POSTGRES_DB_2` | string | База данных |
|
|
||||||
| `POSTGRES_POOL_SIZE_2` | int | Размер пула |
|
|
||||||
| `DB_CERT_PATH_2` | string | Путь к CA-сертификату |
|
|
||||||
|
|
||||||
Slave-2 кластер — те же поля с суффиксом `_3`:
|
|
||||||
|
|
||||||
| Переменная | Тип | Назначение |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| `POSTGRES_ADDRESS_3` | string | Хост PostgreSQL (slave-2) |
|
|
||||||
| `POSTGRES_PORT_3` | string | Порт |
|
|
||||||
| `POSTGRES_USER_3` | string | Пользователь |
|
|
||||||
| `POSTGRES_PASSWORD_3` | string | Пароль |
|
|
||||||
| `POSTGRES_DB_3` | string | База данных |
|
|
||||||
| `POSTGRES_POOL_SIZE_3` | int | Размер пула |
|
|
||||||
| `DB_CERT_PATH_3` | string | Путь к CA-сертификату |
|
|
||||||
|
|
||||||
### Шардирование BIM по кластерам
|
|
||||||
|
|
||||||
| Переменная | Тип | Назначение |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| `LAST_MASTER_BIM` | uint64 | Верхняя граница id BIM для master-кластера (API v1) |
|
|
||||||
| `LAST_MASTER_BIM_V3` | uint64 | Верхняя граница id BIM для master-кластера (API v2 / BIM v3) |
|
|
||||||
| `LAST_SLAVE_1_BIM` | uint64 | Верхняя граница id BIM для slave-1 (API v1) |
|
|
||||||
| `LAST_SLAVE_1_BIM_V3` | uint64 | Верхняя граница id BIM для slave-1 (API v2 / BIM v3) |
|
|
||||||
|
|
||||||
### Прочее
|
|
||||||
|
|
||||||
| Переменная | Тип | Значение по умолчанию | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `ENABLE_SSL` | bool | `false` | Подключение к PostgreSQL по TLS. При `false` в DSN добавляется `sslmode=disable` |
|
|
||||||
| `ENABLE_SQL_QUERY` | bool | `false` | Логировать SQL-запросы |
|
|
||||||
| `DJANGO_HOST` | string | `""` | Базовый URL Django-бэкенда для проверки прав администратора (см. `ENDPOINTS.md`) |
|
|
||||||
| `INTEGRATION_TESTS` | bool | `false` | Режим интеграционных тестов. При `true` `CheckUserIsAdmin` всегда возвращает `true` |
|
|
||||||
|
|
||||||
## Переменные, не читаемые приложением (инфраструктура/сборка/тесты)
|
|
||||||
|
|
||||||
Присутствуют в `.docker/.env`, `.docker/.docker.env`, `docker-compose.yml` или Helm, но `config/config.go` их не разбирает.
|
|
||||||
|
|
||||||
| Переменная | Где используется | Назначение |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| `API_PORT` | `.docker/.env` | Порт API для локального compose |
|
|
||||||
| `POSTGRES_EXTERNAL_PORT`, `POSTGRES_EXTERNAL_PORT_2` | `docker-compose.yml` | Проброс портов контейнеров Postgres |
|
|
||||||
| `POSTGRES_ADDRESS2` | `.docker/.docker.env` | Опечатка/легаси (нет суффикса `_`), кодом не читается |
|
|
||||||
| `GRPC_ADDRESS`, `GRPC_PORT` | `.docker/.env` | Объявлены, но кодом не используются |
|
|
||||||
| `TEST_BIM`, `JWT_TEST` | `.docker/.env`, `.docker/.docker.env` | Данные для интеграционных тестов |
|
|
||||||
| `POSTGRES_*_4`, `DB_CERT_PATH_4` | `.helm/values-*.yaml`, IaC `backend-deployment.yaml` | Четвёртый кластер задаётся в деплое, но `config.go` доходит только до суффикса `_3` |
|
|
||||||
| `LAST_SLAVE_2_BIM(_V3)`, `LAST_SLAVE_3_BIM(_V3)`, `LAST_SLAVE_4_BIM(_V3)` | `.helm/values-*.yaml` | Заданы в values, но кодом не читаются (актуальны только `LAST_MASTER_*` и `LAST_SLAVE_1_*`) |
|
|
||||||
| `CI_COMMIT_SHORT_SHA` | `.gitlab-ci.yml` (build-arg) | Тег/версия сборки образа |
|
|
||||||
|
|
||||||
## Переменные из Helm-чарта приложения (`.helm/values-<env>.yaml`)
|
|
||||||
|
|
||||||
Обычные значения задаются в блоке `envs` для каждого окружения (`stage`/`preprod`/`production`) и содержат те же переменные `POSTGRES_*`, `API_ADDRESS`, `DJANGO_HOST`, `ENABLE_SSL`, `ENABLE_SQL_QUERY`, `LAST_*`, что описаны выше (различаются адресами БД, размерами пула, границами шардирования и доменом Django).
|
|
||||||
|
|
||||||
Значения из секретов (блок `secrets`, монтируются как env через `secretKeyRef`):
|
|
||||||
|
|
||||||
| Переменная | Секрет (`secret_name`) | Ключ (`secret_key`) |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| `POSTGRES_USER` | `bim-v2-database-secret` | `username` |
|
|
||||||
| `POSTGRES_PASSWORD` | `bim-v2-database-secret` | `password` |
|
|
||||||
| `POSTGRES_USER_2` | `bim-v2-database-secret-2` | `username` |
|
|
||||||
| `POSTGRES_PASSWORD_2` | `bim-v2-database-secret-2` | `password` |
|
|
||||||
| `POSTGRES_USER_3` | `bim-v2-database-secret-3` | `username` |
|
|
||||||
| `POSTGRES_PASSWORD_3` | `bim-v2-database-secret-3` | `password` |
|
|
||||||
| `POSTGRES_USER_4` | `bim-v2-database-secret-3` | `username` |
|
|
||||||
| `POSTGRES_PASSWORD_4` | `bim-v2-database-secret-3` | `password` |
|
|
||||||
|
|
||||||
Ключевые не-env значения чарта: `api.name`, `api.image`, `api.version`, `api.port` (`8080`), `api.replicas`, `api.service_name`/`api.service_port` (`80`), `api.service_account`, `api.requests.memory`/`cpu`, `api.api_host`, `api.api_host_prefix` (`/bimv2/api/`), `api.api_path` (`/api/`), `api.internal_path` (`/internal/`), `api.permitted_ns` (namespace'ы, которым разрешён доступ к `/internal/*`), `imagePullSecrets`.
|
|
||||||
|
|
||||||
Сетевой слой (`.helm/templates/mesh-config.yaml`, Istio):
|
|
||||||
|
|
||||||
- `VirtualService` (при `api.virtual_service.enabled`) маршрутизирует `api_host_prefix` → `api_path`, задаёт CORS (`allowOrigins` — `*.sarex.io` и `localhost`, `allowHeaders` включают `Authorization`, `Content-Type`, `Identity`).
|
|
||||||
- `AuthorizationPolicy` `routes-v2`: доступ к `/api/*` разрешён только от istio-ingressgateway при наличии claim `token_type=access`; доступ к `/internal/*` — только из namespace'ов `api.permitted_ns`.
|
|
||||||
|
|
||||||
## Переменные из IaC-репозитория (`iac/apps/bim/`)
|
|
||||||
|
|
||||||
Деплой в этом репозитории (kustomize) устроен иначе, чем чарт приложения:
|
|
||||||
|
|
||||||
- `base/backend-deployment.yaml` — Deployment `backend` в namespace `bim`, образ `bim-api`, `containerPort: 8000`, `API_ADDRESS=0.0.0.0:8000`, health-проба `GET /ping`.
|
|
||||||
- Секреты PostgreSQL инъектируются **из Vault** (аннотации `vault.hashicorp.com/*`, роль `bim`, путь `secrets/data/postgresql/apps/bim`) в файл `/vault/secrets/bim-postgresql`, который экспортируется в окружение перед запуском (`set -a; . /vault/secrets/bim-postgresql; set +a; exec ./httpserver`). Шаблон Vault задаёт `POSTGRES_ADDRESS[_2../_4]`, `POSTGRES_PORT*`, `POSTGRES_DB*` (все указывают на `postgresql.bim.svc.cluster.local:5432`, БД `bim_db`) и `POSTGRES_USER*`/`POSTGRES_PASSWORD*` из Vault.
|
|
||||||
- Прочие env заданы прямо в манифесте: `LAST_MASTER_BIM`, `LAST_MASTER_BIM_V3`, `LAST_SLAVE_1_BIM`, `POSTGRES_POOL_SIZE`, `DB_CERT_PATH_2/3/4`, `DJANGO_HOST` (`http://backend.django.svc.cluster.local:8000`), `ENABLE_SQL_QUERY=0`, `ENABLE_SSL=0`.
|
|
||||||
- Оверлеи `brusnika-prod`, `brusnika-stage`, `yc-k8s-test` патчат base (реплики, образ, postgresql).
|
|
||||||
|
|
||||||
## Переменные в CI (`.gitlab-ci.yml`)
|
|
||||||
|
|
||||||
Пайплайн подключает общие шаблоны `generic/common-ci` (`universal-pipeline-<env>.yaml`, `common-security-scan.yaml`, `common-build.yaml`) и переключает окружение по ветке/тегу через `workflow.rules`:
|
|
||||||
|
|
||||||
| Условие | STAND | Namespace |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| ветка `master` | `preprod` | `bim-api-preprod` |
|
|
||||||
| ветка `stage` | `stage` | `bim-api-stage` |
|
|
||||||
| тег (`CI_COMMIT_TAG`) | `prod` | `bim-api-prod` |
|
|
||||||
|
|
||||||
Общие переменные job'ов: `RELEASE_NAME=bim-backend-v2`, `CHART_NAME=bim-backend-v2`, `CHART_VERSION=0.0.1-<stand>`, `IMAGE_PATH=api.image`, `DOCKERFILE_PATH=.docker/api.dockerfile`, `HELM_SET_ARGS=--set api.image=${IMAGE_NAME}`, `BUILD_ARGS=--build-arg CI_COMMIT_SHORT_SHA=...`, флаги `ENABLE_BUILD_CHART`/`ENABLE_BUILD_IMAGE`/`ENABLE_STATE_UPDATE`/`ENABLE_DEPLOY=true`, `ENABLE_LINTER=false`. Стадии: `linter → test → unittest → prebuild-secscan → build → state-update → deploy`.
|
|
||||||
|
|
||||||
## Замечания и потенциальные проблемы
|
|
||||||
|
|
||||||
- Переменные разбираются **без префикса** (`envconfig.Process("", ...)`) — имена совпадают с тегами `envconfig` полей структуры `Config`.
|
|
||||||
- Обязательность полей не валидируется: отсутствующая переменная молча получает нулевое значение. Например пустой `API_ADDRESS` приведёт к попытке слушать на `":0"`.
|
|
||||||
- В коде объявлены только три кластера (`POSTGRES_*`, `_2`, `_3`), тогда как в деплое присутствует и четвёртый (`_4`). Переменные `_4` и дополнительные `LAST_SLAVE_2/3/4_*` в окружении задаются, но приложением не используются.
|
|
||||||
- Приложение загружает `.env` автоматически (`godotenv.Load(".env")`); при отсутствии файла ошибки нет — берутся переменные процесса.
|
|
||||||
- В `NewConfig` ошибка `envconfig.Process` не возвращается, а вызывает `panic` (обёрнута в `sync.Once`).
|
|
||||||
|
|
||||||
## Минимальный набор для локального запуска
|
|
||||||
|
|
||||||
Postgres поднимается через `docker-compose` (`.docker/docker-compose.yml`), приложение — через `make api` и запуск `httpserver`. Минимально необходимо задать (готовые примеры — в `.env.example`):
|
|
||||||
|
|
||||||
- `API_ADDRESS`
|
|
||||||
- Master-кластер: `POSTGRES_ADDRESS`, `POSTGRES_PORT`, `POSTGRES_USER`, `POSTGRES_PASSWORD`, `POSTGRES_DB`, `POSTGRES_POOL_SIZE`
|
|
||||||
- Slave-кластеры `_2` и `_3` (те же поля) — сервис создаёт соединения ко всем трём при старте
|
|
||||||
- `ENABLE_SSL=0`, `DB_CERT_PATH*` (при `ENABLE_SSL=1`)
|
|
||||||
- `DJANGO_HOST`
|
|
||||||
- `LAST_MASTER_BIM`, `LAST_MASTER_BIM_V3`, `LAST_SLAVE_1_BIM`, `LAST_SLAVE_1_BIM_V3`
|
|
||||||
- `INTEGRATION_TESTS=0`, `ENABLE_SQL_QUERY` по необходимости
|
|
||||||
@ -1,55 +0,0 @@
|
|||||||
# Эндпоинты, с которыми взаимодействует bim-backend-v2
|
|
||||||
|
|
||||||
Документ описывает все HTTP-эндпоинты внешних сервисов, к которым обращается сам сервис `bim-backend-v2` (исходящие вызовы). Эндпоинты, которые сервис **предоставляет**, описаны в `openapi.yaml`.
|
|
||||||
|
|
||||||
## Как устроено взаимодействие
|
|
||||||
|
|
||||||
Исходящие вызовы выполняются HTTP-клиентом на базе [`go-resty/resty`](https://github.com/go-resty/resty) в пакете `pkg/django_client` (`DjangoClient`). Клиент создаётся в `NewRestClient`:
|
|
||||||
|
|
||||||
- базовый хост — `SetHostURL(cfg.DjangoHost)` (переменная `DJANGO_HOST`);
|
|
||||||
- таймаут запроса — `SetTimeout(10 * time.Second)`;
|
|
||||||
- число повторов — `SetRetryCount(5)`.
|
|
||||||
|
|
||||||
Аутентификация проксируется: JWT пользователя извлекается из контекста запроса (`auth.JWTFromContext`), при необходимости отбрасывается схема `Bearer `, и токен передаётся во внешний сервис заголовком `Authorization: Bearer <jwt>` (`SetAuthToken` + `SetAuthScheme("Bearer")`). Заголовок `Content-Type: application/json`.
|
|
||||||
|
|
||||||
В режиме интеграционных тестов (`INTEGRATION_TESTS=1`) внешний вызов не выполняется — `CheckUserIsAdmin` возвращает `true`.
|
|
||||||
|
|
||||||
## Базовые хосты по сервисам и окружениям
|
|
||||||
|
|
||||||
Значение берётся из переменной `DJANGO_HOST` (см. `CONFIGURATION.md`). Итоговый URL = `<DJANGO_HOST>` + `path` эндпоинта.
|
|
||||||
|
|
||||||
| Сервис | Назначение | Значение `DJANGO_HOST` |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| `django` (Sarex backend) | Проверка прав пользователя (админ/не админ) | локально/`stage`: `https://stage.sarex.io`; `preprod`: `https://lk.preprod.sarex.io`; `prod`: `https://lk.sarex.io`; контур (IaC): `http://backend.django.svc.cluster.local:8000` |
|
|
||||||
|
|
||||||
## Эндпоинты по сервисам
|
|
||||||
|
|
||||||
### `django` — Sarex backend
|
|
||||||
|
|
||||||
| Метод | Путь | Назначение |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| GET | `api/client/settings/` | Получить настройки текущего пользователя. Используется поле `is_admin` (проверка прав администратора в `CheckUserIsAdmin`) |
|
|
||||||
|
|
||||||
Детали вызова `GET api/client/settings/`:
|
|
||||||
|
|
||||||
| Параметр | Значение |
|
|
||||||
| --- | --- |
|
|
||||||
| Заголовки | `Authorization: Bearer <jwt пользователя>`, `Content-Type: application/json` |
|
|
||||||
| Тело запроса | нет |
|
|
||||||
| Ожидаемый ответ | `{ "is_admin": bool }` (структура `userSettingsFromDjango`) |
|
|
||||||
| Успешные статусы | `200`, `201` |
|
|
||||||
| Поведение при ошибке | Любая ошибка транспорта, `resp == nil` или статус вне `200/201` логируется, метод трактует пользователя как **не администратора** (`false`) |
|
|
||||||
|
|
||||||
## Где используется
|
|
||||||
|
|
||||||
Проверка `CheckUserIsAdmin` вызывается в обработчиках, изменяющих модели статусов (требуют прав администратора). При отсутствии прав такие эндпоинты возвращают `403 No admin rights`:
|
|
||||||
|
|
||||||
- `POST /api/v1/bims/{bim_id}/status_model` — создание модели статусов BIM;
|
|
||||||
- `DELETE /api/v1/bims/{bim_id}/delete_status_model` — удаление модели статусов BIM;
|
|
||||||
- `POST /api/v1/companies/{company_id}/status_model` — создание модели статусов компании;
|
|
||||||
- `DELETE /api/v1/companies/{company_id}/status_model` — удаление модели статусов компании.
|
|
||||||
|
|
||||||
## Замечания
|
|
||||||
|
|
||||||
- Единственная внешняя HTTP-зависимость сервиса — Django-бэкенд (`DJANGO_HOST`). Прочие интеграции (PostgreSQL, pprof) не являются HTTP-вызовами к внешним REST-сервисам.
|
|
||||||
- Подпись JWT самим сервисом не проверяется — проброшенный токен просто пересылается в Django, который и выполняет авторизацию (см. также раздел «Аутентификация» в `openapi.yaml`).
|
|
||||||
108
apps/bim/base/backend-deployment.yaml
Normal file
108
apps/bim/base/backend-deployment.yaml
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: backend
|
||||||
|
namespace: bim
|
||||||
|
labels:
|
||||||
|
app: backend
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: backend
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: backend
|
||||||
|
annotations:
|
||||||
|
traffic.sidecar.istio.io/excludeOutboundPorts: "8200"
|
||||||
|
vault.hashicorp.com/agent-init-first: "true"
|
||||||
|
vault.hashicorp.com/agent-inject: "true"
|
||||||
|
vault.hashicorp.com/agent-pre-populate-only: "true"
|
||||||
|
vault.hashicorp.com/auth-path: auth/kubernetes
|
||||||
|
vault.hashicorp.com/role: bim
|
||||||
|
vault.hashicorp.com/agent-inject-secret-bim-postgresql: secrets/data/postgresql/apps/bim
|
||||||
|
vault.hashicorp.com/agent-inject-template-bim-postgresql: |-
|
||||||
|
{{- with secret "secrets/data/postgresql/apps/bim" -}}
|
||||||
|
POSTGRES_ADDRESS=postgresql.bim.svc.cluster.local
|
||||||
|
POSTGRES_ADDRESS_2=postgresql.bim.svc.cluster.local
|
||||||
|
POSTGRES_ADDRESS_3=postgresql.bim.svc.cluster.local
|
||||||
|
POSTGRES_ADDRESS_4=postgresql.bim.svc.cluster.local
|
||||||
|
POSTGRES_PORT=5432
|
||||||
|
POSTGRES_PORT_2=5432
|
||||||
|
POSTGRES_PORT_3=5432
|
||||||
|
POSTGRES_PORT_4=5432
|
||||||
|
POSTGRES_DB=bim_db
|
||||||
|
POSTGRES_DB_2=bim_db
|
||||||
|
POSTGRES_DB_3=bim_db
|
||||||
|
POSTGRES_DB_4=bim_db
|
||||||
|
POSTGRES_USER={{ index .Data.data "username" }}
|
||||||
|
POSTGRES_USER_2={{ index .Data.data "username" }}
|
||||||
|
POSTGRES_USER_3={{ index .Data.data "username" }}
|
||||||
|
POSTGRES_USER_4={{ index .Data.data "username" }}
|
||||||
|
POSTGRES_PASSWORD={{ index .Data.data "password" }}
|
||||||
|
POSTGRES_PASSWORD_2={{ index .Data.data "password" }}
|
||||||
|
POSTGRES_PASSWORD_3={{ index .Data.data "password" }}
|
||||||
|
POSTGRES_PASSWORD_4={{ index .Data.data "password" }}
|
||||||
|
{{- end -}}
|
||||||
|
spec:
|
||||||
|
serviceAccountName: bim-vault
|
||||||
|
containers:
|
||||||
|
- name: backend
|
||||||
|
image: cr.yandex/crp3ccidau046kdj8g9q/bim-backend-v2:donstroi1
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
command: ["/bin/sh", "-ec"]
|
||||||
|
args:
|
||||||
|
- |
|
||||||
|
set -a
|
||||||
|
[ -f /vault/secrets/bim-postgresql ] && . /vault/secrets/bim-postgresql
|
||||||
|
set +a
|
||||||
|
exec ./entrypoint.sh
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
containerPort: 8000
|
||||||
|
protocol: TCP
|
||||||
|
env:
|
||||||
|
- name: LAST_MASTER_BIM
|
||||||
|
value: "100000"
|
||||||
|
- name: LAST_MASTER_BIM_V3
|
||||||
|
value: "100000"
|
||||||
|
- name: DB_CERT_PATH_4
|
||||||
|
value: /root/yandex_pg.pem
|
||||||
|
- name: DB_CERT_PATH_3
|
||||||
|
value: /root/yandex_pg.pem
|
||||||
|
- name: DB_CERT_PATH_2
|
||||||
|
value: /root/yandex_pg.pem
|
||||||
|
- name: LAST_SLAVE_1_BIM
|
||||||
|
value: "1000000"
|
||||||
|
- name: POSTGRES_POOL_SIZE
|
||||||
|
value: "30"
|
||||||
|
- name: API_ADDRESS
|
||||||
|
value: 0.0.0.0:8000
|
||||||
|
- name: DJANGO_HOST
|
||||||
|
value: http://backend.django.svc.cluster.local:8000
|
||||||
|
- name: ENABLE_SQL_QUERY
|
||||||
|
value: "0"
|
||||||
|
- name: ENABLE_SSL
|
||||||
|
value: "0"
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 100Mi
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /ping
|
||||||
|
port: 8000
|
||||||
|
initialDelaySeconds: 10
|
||||||
|
periodSeconds: 60
|
||||||
|
failureThreshold: 10
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /ping
|
||||||
|
port: 8000
|
||||||
|
initialDelaySeconds: 5
|
||||||
|
periodSeconds: 5
|
||||||
|
failureThreshold: 20
|
||||||
|
imagePullSecrets:
|
||||||
|
- name: regcred
|
||||||
15
apps/bim/base/backend-service.yaml
Normal file
15
apps/bim/base/backend-service.yaml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: backend-service
|
||||||
|
namespace: bim
|
||||||
|
spec:
|
||||||
|
type: ClusterIP
|
||||||
|
selector:
|
||||||
|
app: backend
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
port: 8000
|
||||||
|
targetPort: 8000
|
||||||
|
protocol: TCP
|
||||||
@ -1,217 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
|
||||||
kind: HelmRelease
|
|
||||||
metadata:
|
|
||||||
name: backend
|
|
||||||
namespace: bim
|
|
||||||
|
|
||||||
spec:
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
chart:
|
|
||||||
spec:
|
|
||||||
chart: universal-chart
|
|
||||||
version: "0.1.9"
|
|
||||||
sourceRef:
|
|
||||||
kind: HelmRepository
|
|
||||||
name: yc-oci-charts
|
|
||||||
namespace: flux-system
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
install:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
upgrade:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
values:
|
|
||||||
global:
|
|
||||||
env: _default
|
|
||||||
|
|
||||||
services:
|
|
||||||
backend:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: bim-vault
|
|
||||||
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/bim-api:contour_3d704fef
|
|
||||||
pullPolicy:
|
|
||||||
_default: IfNotPresent
|
|
||||||
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: backend
|
|
||||||
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 8000
|
|
||||||
|
|
||||||
command:
|
|
||||||
_default: ["/bin/sh", "-ec"]
|
|
||||||
args:
|
|
||||||
_default:
|
|
||||||
- |
|
|
||||||
set -a
|
|
||||||
[ -f /vault/secrets/bim-postgresql ] && . /vault/secrets/bim-postgresql
|
|
||||||
set +a
|
|
||||||
exec ./httpserver
|
|
||||||
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
cpu:
|
|
||||||
_default: 25m
|
|
||||||
memory:
|
|
||||||
_default: 100Mi
|
|
||||||
|
|
||||||
probes:
|
|
||||||
liveness:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
type:
|
|
||||||
_default: httpGet
|
|
||||||
httpGet:
|
|
||||||
path:
|
|
||||||
_default: /ping
|
|
||||||
port:
|
|
||||||
_default: 8000
|
|
||||||
initialDelaySeconds:
|
|
||||||
_default: 10
|
|
||||||
periodSeconds:
|
|
||||||
_default: 60
|
|
||||||
failureThreshold:
|
|
||||||
_default: 10
|
|
||||||
readiness:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
type:
|
|
||||||
_default: httpGet
|
|
||||||
httpGet:
|
|
||||||
path:
|
|
||||||
_default: /ping
|
|
||||||
port:
|
|
||||||
_default: 8000
|
|
||||||
initialDelaySeconds:
|
|
||||||
_default: 5
|
|
||||||
periodSeconds:
|
|
||||||
_default: 5
|
|
||||||
failureThreshold:
|
|
||||||
_default: 20
|
|
||||||
|
|
||||||
service:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: backend-svc
|
|
||||||
|
|
||||||
type:
|
|
||||||
_default: ClusterIP
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 80
|
|
||||||
|
|
||||||
targetPort:
|
|
||||||
_default: 8000
|
|
||||||
|
|
||||||
portName:
|
|
||||||
_default: http
|
|
||||||
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: regcred
|
|
||||||
|
|
||||||
envs:
|
|
||||||
- name: LAST_MASTER_BIM
|
|
||||||
value:
|
|
||||||
_default: "100000"
|
|
||||||
|
|
||||||
- name: LAST_MASTER_BIM_V3
|
|
||||||
value:
|
|
||||||
_default: "100000"
|
|
||||||
|
|
||||||
- name: DB_CERT_PATH_4
|
|
||||||
value:
|
|
||||||
_default: "/root/yandex_pg.pem"
|
|
||||||
|
|
||||||
- name: DB_CERT_PATH_3
|
|
||||||
value:
|
|
||||||
_default: "/root/yandex_pg.pem"
|
|
||||||
|
|
||||||
- name: DB_CERT_PATH_2
|
|
||||||
value:
|
|
||||||
_default: "/root/yandex_pg.pem"
|
|
||||||
|
|
||||||
- name: LAST_SLAVE_1_BIM
|
|
||||||
value:
|
|
||||||
_default: "1000000"
|
|
||||||
|
|
||||||
- name: POSTGRES_POOL_SIZE
|
|
||||||
value:
|
|
||||||
_default: "30"
|
|
||||||
|
|
||||||
- name: API_ADDRESS
|
|
||||||
value:
|
|
||||||
_default: "0.0.0.0:8000"
|
|
||||||
|
|
||||||
- name: DJANGO_HOST
|
|
||||||
value:
|
|
||||||
_default: "http://backend-svc.django.svc.cluster.local:80"
|
|
||||||
|
|
||||||
- name: ENABLE_SQL_QUERY
|
|
||||||
value:
|
|
||||||
_default: "0"
|
|
||||||
|
|
||||||
- name: ENABLE_SSL
|
|
||||||
value:
|
|
||||||
_default: "0"
|
|
||||||
|
|
||||||
podAnnotations:
|
|
||||||
_default:
|
|
||||||
traffic.sidecar.istio.io/excludeOutboundPorts: "8200"
|
|
||||||
vault.hashicorp.com/agent-init-first: "true"
|
|
||||||
vault.hashicorp.com/agent-inject: "true"
|
|
||||||
vault.hashicorp.com/agent-pre-populate-only: "true"
|
|
||||||
vault.hashicorp.com/auth-path: auth/kubernetes
|
|
||||||
vault.hashicorp.com/role: bim
|
|
||||||
vault.hashicorp.com/agent-inject-secret-bim-postgresql: secrets/data/apps/bim/postgres
|
|
||||||
vault.hashicorp.com/agent-inject-template-bim-postgresql: |-
|
|
||||||
{{- with secret "secrets/data/apps/bim/postgres" -}}
|
|
||||||
POSTGRES_ADDRESS={{ index .Data.data "host" }}
|
|
||||||
POSTGRES_ADDRESS_2={{ index .Data.data "host" }}
|
|
||||||
POSTGRES_ADDRESS_3={{ index .Data.data "host" }}
|
|
||||||
POSTGRES_ADDRESS_4={{ index .Data.data "host" }}
|
|
||||||
POSTGRES_PORT={{ index .Data.data "port" }}
|
|
||||||
POSTGRES_PORT_2={{ index .Data.data "port" }}
|
|
||||||
POSTGRES_PORT_3={{ index .Data.data "port" }}
|
|
||||||
POSTGRES_PORT_4={{ index .Data.data "port" }}
|
|
||||||
POSTGRES_DB={{ index .Data.data "database" }}
|
|
||||||
POSTGRES_DB_2={{ index .Data.data "database" }}
|
|
||||||
POSTGRES_DB_3={{ index .Data.data "database" }}
|
|
||||||
POSTGRES_DB_4={{ index .Data.data "database" }}
|
|
||||||
POSTGRES_USER={{ index .Data.data "username" }}
|
|
||||||
POSTGRES_USER_2={{ index .Data.data "username" }}
|
|
||||||
POSTGRES_USER_3={{ index .Data.data "username" }}
|
|
||||||
POSTGRES_USER_4={{ index .Data.data "username" }}
|
|
||||||
POSTGRES_PASSWORD={{ index .Data.data "password" }}
|
|
||||||
POSTGRES_PASSWORD_2={{ index .Data.data "password" }}
|
|
||||||
POSTGRES_PASSWORD_3={{ index .Data.data "password" }}
|
|
||||||
POSTGRES_PASSWORD_4={{ index .Data.data "password" }}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
commitSha: ""
|
|
||||||
gitlabUri: ""
|
|
||||||
gitlabJobUrl: ""
|
|
||||||
owner: ""
|
|
||||||
@ -4,4 +4,6 @@ kind: Kustomization
|
|||||||
namespace: bim
|
namespace: bim
|
||||||
resources:
|
resources:
|
||||||
- namespace.yaml
|
- namespace.yaml
|
||||||
- backend.yaml
|
- serviceaccount.yaml
|
||||||
|
- backend-deployment.yaml
|
||||||
|
- backend-service.yaml
|
||||||
|
|||||||
5
apps/bim/base/serviceaccount.yaml
Normal file
5
apps/bim/base/serviceaccount.yaml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
name: bim-vault
|
||||||
|
namespace: bim
|
||||||
@ -1,229 +0,0 @@
|
|||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
|
||||||
kind: HelmRelease
|
|
||||||
metadata:
|
|
||||||
name: backend
|
|
||||||
namespace: bim
|
|
||||||
|
|
||||||
spec:
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
chart:
|
|
||||||
spec:
|
|
||||||
chart: universal-chart
|
|
||||||
version: "0.1.7"
|
|
||||||
sourceRef:
|
|
||||||
kind: HelmRepository
|
|
||||||
name: yc-oci-charts
|
|
||||||
namespace: flux-system
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
install:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
upgrade:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
values:
|
|
||||||
global:
|
|
||||||
env: _default
|
|
||||||
|
|
||||||
services:
|
|
||||||
backend:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/bim-backend-v2:prod_b0bd750b
|
|
||||||
pullPolicy:
|
|
||||||
_default: IfNotPresent
|
|
||||||
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: backend
|
|
||||||
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
stage: 1
|
|
||||||
preprod: 3
|
|
||||||
production: 3
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 8000
|
|
||||||
|
|
||||||
probes:
|
|
||||||
liveness:
|
|
||||||
enabled: false
|
|
||||||
readiness:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
service:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: backend-service
|
|
||||||
|
|
||||||
type:
|
|
||||||
_default: ClusterIP
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 8000
|
|
||||||
|
|
||||||
targetPort:
|
|
||||||
_default: 8000
|
|
||||||
|
|
||||||
portName:
|
|
||||||
_default: http
|
|
||||||
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: regcred
|
|
||||||
labels:
|
|
||||||
monitoring: prometheus
|
|
||||||
|
|
||||||
envs:
|
|
||||||
- name: LAST_MASTER_BIM
|
|
||||||
value:
|
|
||||||
_default: "100000"
|
|
||||||
|
|
||||||
- name: LAST_SLAVE_1_BIM
|
|
||||||
value:
|
|
||||||
_default: "100000"
|
|
||||||
|
|
||||||
- name: LAST_MASTER_BIM_V3
|
|
||||||
value:
|
|
||||||
_default: "100000"
|
|
||||||
|
|
||||||
- name: LAST_SLAVE_1_BIM_V3
|
|
||||||
value:
|
|
||||||
_default: "100000"
|
|
||||||
|
|
||||||
- name: DB_CERT_PATH_3
|
|
||||||
value:
|
|
||||||
_default: "/root/yandex_pg.pem"
|
|
||||||
|
|
||||||
- name: DB_CERT_PATH_4
|
|
||||||
value:
|
|
||||||
_default: "/root/yandex_pg.pem"
|
|
||||||
|
|
||||||
- name: POSTGRES_ADDRESS_3
|
|
||||||
value:
|
|
||||||
_default: "postgres-service"
|
|
||||||
|
|
||||||
- name: POSTGRES_ADDRESS_4
|
|
||||||
value:
|
|
||||||
_default: "postgres-service"
|
|
||||||
|
|
||||||
- name: POSTGRES_PORT_3
|
|
||||||
value:
|
|
||||||
_default: "5432"
|
|
||||||
|
|
||||||
- name: POSTGRES_PORT_4
|
|
||||||
value:
|
|
||||||
_default: "5432"
|
|
||||||
|
|
||||||
- name: POSTGRES_DB_3
|
|
||||||
value:
|
|
||||||
_default: "bimapidb"
|
|
||||||
|
|
||||||
- name: POSTGRES_DB_4
|
|
||||||
value:
|
|
||||||
_default: "bimapidb"
|
|
||||||
|
|
||||||
- name: DB_CERT_PATH_2
|
|
||||||
value:
|
|
||||||
_default: "/root/yandex_pg.pem"
|
|
||||||
|
|
||||||
- name: POSTGRES_ADDRESS_2
|
|
||||||
value:
|
|
||||||
_default: "postgres-service"
|
|
||||||
|
|
||||||
- name: POSTGRES_PORT_2
|
|
||||||
value:
|
|
||||||
_default: "5432"
|
|
||||||
|
|
||||||
- name: POSTGRES_DB_2
|
|
||||||
value:
|
|
||||||
_default: "bimapidb"
|
|
||||||
|
|
||||||
- name: POSTGRES_ADDRESS
|
|
||||||
value:
|
|
||||||
_default: "postgres-service"
|
|
||||||
|
|
||||||
- name: POSTGRES_PORT
|
|
||||||
value:
|
|
||||||
_default: "5432"
|
|
||||||
|
|
||||||
- name: POSTGRES_DB
|
|
||||||
value:
|
|
||||||
_default: "bimapidb"
|
|
||||||
|
|
||||||
- name: POSTGRES_POOL_SIZE
|
|
||||||
value:
|
|
||||||
_default: "30"
|
|
||||||
|
|
||||||
- name: API_ADDRESS
|
|
||||||
value:
|
|
||||||
_default: "0.0.0.0:8000"
|
|
||||||
|
|
||||||
- name: DJANGO_HOST
|
|
||||||
value:
|
|
||||||
_default: "http://backend.django.svc.cluster.local:8000"
|
|
||||||
|
|
||||||
- name: ENABLE_SQL_QUERY
|
|
||||||
value:
|
|
||||||
_default: "0"
|
|
||||||
|
|
||||||
- name: ENABLE_SSL
|
|
||||||
value:
|
|
||||||
_default: "0"
|
|
||||||
secretEnvs:
|
|
||||||
- name: POSTGRES_USER
|
|
||||||
secretName:
|
|
||||||
_default: "postgres-secret"
|
|
||||||
secretKey: "username"
|
|
||||||
|
|
||||||
- name: POSTGRES_PASSWORD
|
|
||||||
secretName:
|
|
||||||
_default: "postgres-secret"
|
|
||||||
secretKey: "password"
|
|
||||||
|
|
||||||
- name: POSTGRES_USER_4
|
|
||||||
secretName:
|
|
||||||
_default: "postgres-secret"
|
|
||||||
secretKey: "username"
|
|
||||||
|
|
||||||
- name: POSTGRES_PASSWORD_4
|
|
||||||
secretName:
|
|
||||||
_default: "postgres-secret"
|
|
||||||
secretKey: "password"
|
|
||||||
|
|
||||||
- name: POSTGRES_USER_2
|
|
||||||
secretName:
|
|
||||||
_default: "postgres-secret"
|
|
||||||
secretKey: "username"
|
|
||||||
|
|
||||||
- name: POSTGRES_PASSWORD_2
|
|
||||||
secretName:
|
|
||||||
_default: "postgres-secret"
|
|
||||||
secretKey: "password"
|
|
||||||
|
|
||||||
- name: POSTGRES_USER_3
|
|
||||||
secretName:
|
|
||||||
_default: "postgres-secret"
|
|
||||||
secretKey: "username"
|
|
||||||
|
|
||||||
- name: POSTGRES_PASSWORD_3
|
|
||||||
secretName:
|
|
||||||
_default: "postgres-secret"
|
|
||||||
secretKey: "password"
|
|
||||||
|
|
||||||
commitSha: ""
|
|
||||||
gitlabUri: ""
|
|
||||||
gitlabJobUrl: ""
|
|
||||||
owner: ""
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
namespace: bim
|
|
||||||
resources:
|
|
||||||
- backend.yaml
|
|
||||||
@ -1,229 +0,0 @@
|
|||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
|
||||||
kind: HelmRelease
|
|
||||||
metadata:
|
|
||||||
name: backend
|
|
||||||
namespace: bim
|
|
||||||
|
|
||||||
spec:
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
chart:
|
|
||||||
spec:
|
|
||||||
chart: universal-chart
|
|
||||||
version: "0.1.7"
|
|
||||||
sourceRef:
|
|
||||||
kind: HelmRepository
|
|
||||||
name: yc-oci-charts
|
|
||||||
namespace: flux-system
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
install:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
upgrade:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
values:
|
|
||||||
global:
|
|
||||||
env: _default
|
|
||||||
|
|
||||||
services:
|
|
||||||
backend:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/bim-backend-v2:prod_b0bd750b
|
|
||||||
pullPolicy:
|
|
||||||
_default: IfNotPresent
|
|
||||||
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: backend
|
|
||||||
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
stage: 1
|
|
||||||
preprod: 3
|
|
||||||
production: 3
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 8000
|
|
||||||
|
|
||||||
probes:
|
|
||||||
liveness:
|
|
||||||
enabled: false
|
|
||||||
readiness:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
service:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: backend-service
|
|
||||||
|
|
||||||
type:
|
|
||||||
_default: ClusterIP
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 8000
|
|
||||||
|
|
||||||
targetPort:
|
|
||||||
_default: 8000
|
|
||||||
|
|
||||||
portName:
|
|
||||||
_default: http
|
|
||||||
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: regcred
|
|
||||||
labels:
|
|
||||||
monitoring: prometheus
|
|
||||||
|
|
||||||
envs:
|
|
||||||
- name: LAST_MASTER_BIM
|
|
||||||
value:
|
|
||||||
_default: "100000"
|
|
||||||
|
|
||||||
- name: LAST_SLAVE_1_BIM
|
|
||||||
value:
|
|
||||||
_default: "100000"
|
|
||||||
|
|
||||||
- name: LAST_MASTER_BIM_V3
|
|
||||||
value:
|
|
||||||
_default: "100000"
|
|
||||||
|
|
||||||
- name: LAST_SLAVE_1_BIM_V3
|
|
||||||
value:
|
|
||||||
_default: "100000"
|
|
||||||
|
|
||||||
- name: DB_CERT_PATH_3
|
|
||||||
value:
|
|
||||||
_default: "/root/yandex_pg.pem"
|
|
||||||
|
|
||||||
- name: DB_CERT_PATH_4
|
|
||||||
value:
|
|
||||||
_default: "/root/yandex_pg.pem"
|
|
||||||
|
|
||||||
- name: POSTGRES_ADDRESS_3
|
|
||||||
value:
|
|
||||||
_default: "postgres-service"
|
|
||||||
|
|
||||||
- name: POSTGRES_ADDRESS_4
|
|
||||||
value:
|
|
||||||
_default: "postgres-service"
|
|
||||||
|
|
||||||
- name: POSTGRES_PORT_3
|
|
||||||
value:
|
|
||||||
_default: "5432"
|
|
||||||
|
|
||||||
- name: POSTGRES_PORT_4
|
|
||||||
value:
|
|
||||||
_default: "5432"
|
|
||||||
|
|
||||||
- name: POSTGRES_DB_3
|
|
||||||
value:
|
|
||||||
_default: "bimapidb"
|
|
||||||
|
|
||||||
- name: POSTGRES_DB_4
|
|
||||||
value:
|
|
||||||
_default: "bimapidb"
|
|
||||||
|
|
||||||
- name: DB_CERT_PATH_2
|
|
||||||
value:
|
|
||||||
_default: "/root/yandex_pg.pem"
|
|
||||||
|
|
||||||
- name: POSTGRES_ADDRESS_2
|
|
||||||
value:
|
|
||||||
_default: "postgres-service"
|
|
||||||
|
|
||||||
- name: POSTGRES_PORT_2
|
|
||||||
value:
|
|
||||||
_default: "5432"
|
|
||||||
|
|
||||||
- name: POSTGRES_DB_2
|
|
||||||
value:
|
|
||||||
_default: "bimapidb"
|
|
||||||
|
|
||||||
- name: POSTGRES_ADDRESS
|
|
||||||
value:
|
|
||||||
_default: "postgres-service"
|
|
||||||
|
|
||||||
- name: POSTGRES_PORT
|
|
||||||
value:
|
|
||||||
_default: "5432"
|
|
||||||
|
|
||||||
- name: POSTGRES_DB
|
|
||||||
value:
|
|
||||||
_default: "bimapidb"
|
|
||||||
|
|
||||||
- name: POSTGRES_POOL_SIZE
|
|
||||||
value:
|
|
||||||
_default: "30"
|
|
||||||
|
|
||||||
- name: API_ADDRESS
|
|
||||||
value:
|
|
||||||
_default: "0.0.0.0:8000"
|
|
||||||
|
|
||||||
- name: DJANGO_HOST
|
|
||||||
value:
|
|
||||||
_default: "http://backend.django.svc.cluster.local:8000"
|
|
||||||
|
|
||||||
- name: ENABLE_SQL_QUERY
|
|
||||||
value:
|
|
||||||
_default: "0"
|
|
||||||
|
|
||||||
- name: ENABLE_SSL
|
|
||||||
value:
|
|
||||||
_default: "0"
|
|
||||||
secretEnvs:
|
|
||||||
- name: POSTGRES_USER
|
|
||||||
secretName:
|
|
||||||
_default: "postgres-secret"
|
|
||||||
secretKey: "username"
|
|
||||||
|
|
||||||
- name: POSTGRES_PASSWORD
|
|
||||||
secretName:
|
|
||||||
_default: "postgres-secret"
|
|
||||||
secretKey: "password"
|
|
||||||
|
|
||||||
- name: POSTGRES_USER_4
|
|
||||||
secretName:
|
|
||||||
_default: "postgres-secret"
|
|
||||||
secretKey: "username"
|
|
||||||
|
|
||||||
- name: POSTGRES_PASSWORD_4
|
|
||||||
secretName:
|
|
||||||
_default: "postgres-secret"
|
|
||||||
secretKey: "password"
|
|
||||||
|
|
||||||
- name: POSTGRES_USER_2
|
|
||||||
secretName:
|
|
||||||
_default: "postgres-secret"
|
|
||||||
secretKey: "username"
|
|
||||||
|
|
||||||
- name: POSTGRES_PASSWORD_2
|
|
||||||
secretName:
|
|
||||||
_default: "postgres-secret"
|
|
||||||
secretKey: "password"
|
|
||||||
|
|
||||||
- name: POSTGRES_USER_3
|
|
||||||
secretName:
|
|
||||||
_default: "postgres-secret"
|
|
||||||
secretKey: "username"
|
|
||||||
|
|
||||||
- name: POSTGRES_PASSWORD_3
|
|
||||||
secretName:
|
|
||||||
_default: "postgres-secret"
|
|
||||||
secretKey: "password"
|
|
||||||
|
|
||||||
commitSha: ""
|
|
||||||
gitlabUri: ""
|
|
||||||
gitlabJobUrl: ""
|
|
||||||
owner: ""
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
namespace: bim
|
|
||||||
resources:
|
|
||||||
- backend.yaml
|
|
||||||
@ -1,10 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
resources:
|
|
||||||
- ../base
|
|
||||||
patches:
|
|
||||||
- path: namespace.yaml
|
|
||||||
target:
|
|
||||||
kind: Namespace
|
|
||||||
name: bim
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Namespace
|
|
||||||
metadata:
|
|
||||||
name: bim
|
|
||||||
labels:
|
|
||||||
istio-injection: enabled
|
|
||||||
security.deckhouse.io/pod-policy: privileged
|
|
||||||
@ -1,98 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
|
||||||
kind: HelmRelease
|
|
||||||
metadata:
|
|
||||||
name: backend
|
|
||||||
namespace: bim
|
|
||||||
spec:
|
|
||||||
values:
|
|
||||||
services:
|
|
||||||
backend:
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/bim-backend-v2:1d961a7b125ae0e69bd5717658d927091d8c05cc
|
|
||||||
|
|
||||||
envs:
|
|
||||||
- name: LAST_MASTER_BIM
|
|
||||||
value:
|
|
||||||
_default: "100000"
|
|
||||||
|
|
||||||
- name: LAST_SLAVE_1_BIM
|
|
||||||
value:
|
|
||||||
_default: "94015"
|
|
||||||
|
|
||||||
- name: LAST_MASTER_BIM_V3
|
|
||||||
value:
|
|
||||||
_default: "100000"
|
|
||||||
|
|
||||||
- name: LAST_SLAVE_1_BIM_V3
|
|
||||||
value:
|
|
||||||
_default: "0"
|
|
||||||
|
|
||||||
- name: DB_CERT_PATH_3
|
|
||||||
value:
|
|
||||||
_default: "/root/yandex_pg.pem"
|
|
||||||
|
|
||||||
- name: POSTGRES_ADDRESS_3
|
|
||||||
value:
|
|
||||||
_default: "postgres-service"
|
|
||||||
|
|
||||||
- name: POSTGRES_PORT_3
|
|
||||||
value:
|
|
||||||
_default: "5432"
|
|
||||||
|
|
||||||
- name: POSTGRES_DB_3
|
|
||||||
value:
|
|
||||||
_default: "bimapidb"
|
|
||||||
|
|
||||||
- name: DB_CERT_PATH_2
|
|
||||||
value:
|
|
||||||
_default: "/root/yandex_pg.pem"
|
|
||||||
|
|
||||||
- name: POSTGRES_ADDRESS_2
|
|
||||||
value:
|
|
||||||
_default: "postgres-service"
|
|
||||||
|
|
||||||
- name: POSTGRES_PORT_2
|
|
||||||
value:
|
|
||||||
_default: "5432"
|
|
||||||
|
|
||||||
- name: POSTGRES_DB_2
|
|
||||||
value:
|
|
||||||
_default: "bimapidb"
|
|
||||||
|
|
||||||
- name: POSTGRES_ADDRESS
|
|
||||||
value:
|
|
||||||
_default: "postgres-service"
|
|
||||||
|
|
||||||
- name: POSTGRES_PORT
|
|
||||||
value:
|
|
||||||
_default: "5432"
|
|
||||||
|
|
||||||
- name: POSTGRES_DB
|
|
||||||
value:
|
|
||||||
_default: "bimapidb"
|
|
||||||
|
|
||||||
- name: POSTGRES_POOL_SIZE
|
|
||||||
value:
|
|
||||||
_default: "30"
|
|
||||||
|
|
||||||
- name: API_ADDRESS
|
|
||||||
value:
|
|
||||||
_default: "0.0.0.0:8000"
|
|
||||||
|
|
||||||
- name: DJANGO_HOST
|
|
||||||
value:
|
|
||||||
_default: "http://backend.django.svc.cluster.local:8000"
|
|
||||||
|
|
||||||
- name: ENABLE_SQL_QUERY
|
|
||||||
value:
|
|
||||||
_default: "0"
|
|
||||||
|
|
||||||
- name: ENABLE_SSL
|
|
||||||
value:
|
|
||||||
_default: "0"
|
|
||||||
|
|
||||||
- name: DB_CERT_PATH_4
|
|
||||||
value:
|
|
||||||
_default: "/root/yandex_pg.pem"
|
|
||||||
@ -1,172 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: apps/v1
|
|
||||||
kind: Deployment
|
|
||||||
metadata:
|
|
||||||
name: bim-api
|
|
||||||
namespace: bim
|
|
||||||
labels:
|
|
||||||
app: bim-api
|
|
||||||
spec:
|
|
||||||
progressDeadlineSeconds: 600
|
|
||||||
replicas: 1
|
|
||||||
revisionHistoryLimit: 10
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
app: bim-api
|
|
||||||
strategy:
|
|
||||||
rollingUpdate:
|
|
||||||
maxSurge: 25%
|
|
||||||
maxUnavailable: 25%
|
|
||||||
type: RollingUpdate
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app: bim-api
|
|
||||||
spec:
|
|
||||||
containers:
|
|
||||||
- command:
|
|
||||||
- ./entrypoint_api.sh
|
|
||||||
env:
|
|
||||||
- name: JWT_PUBLIC_KEY_PATH
|
|
||||||
value: /etc/sarex/keys/prod.rsa.pub
|
|
||||||
- name: FEATURE_ENABLE_JWT_AUTH
|
|
||||||
value: 'false'
|
|
||||||
- name: FEATURE_ENABLE_SAREX_AUTH
|
|
||||||
value: 'false'
|
|
||||||
- name: FEATURE_ENABLE_WORKSPACES
|
|
||||||
value: 'true'
|
|
||||||
- name: FEATURE_ENABLE_GCLOUD
|
|
||||||
value: 'false'
|
|
||||||
- name: FEATURE_ENABLE_S3
|
|
||||||
value: 'true'
|
|
||||||
- name: S3_BUCKET
|
|
||||||
value: sarex-bim-storage
|
|
||||||
- name: BIM_CURRENT_STORAGE
|
|
||||||
value: s3
|
|
||||||
- name: AWS_DEFAULT_REGION
|
|
||||||
value: ru-central1
|
|
||||||
- name: FEATURE_ENABLE_PROCESSING
|
|
||||||
value: '1'
|
|
||||||
- name: PROCESSING_API_URL
|
|
||||||
value: http://workflows-service.processing.svc.cluster.local:8000/internal
|
|
||||||
- name: PROCESSING_C2M_VERSION
|
|
||||||
value: stable
|
|
||||||
- name: prometheus_multiproc_dir
|
|
||||||
value: /tmp
|
|
||||||
- name: GOOGLE_APPLICATION_CREDENTIALS
|
|
||||||
value: /etc/sarex/google-storage/service_account.json
|
|
||||||
- name: BUNDLE_VERSION
|
|
||||||
value: v1
|
|
||||||
- name: WORKSPACES_API_URL
|
|
||||||
value: http://workspaces-service.workspaces.svc.cluster.local:8000/internal
|
|
||||||
- name: BIM_API_EXTERNAL_HOST_SCHEMA
|
|
||||||
value: https
|
|
||||||
- name: BIM_API_EXTERNAL_HOST
|
|
||||||
value: sarex.uralchem.com
|
|
||||||
- name: BIM_API_INTERNAL_HOST_SCHEMA
|
|
||||||
value: http
|
|
||||||
- name: BIM_API_INTERNAL_HOST
|
|
||||||
value: bim-api-service.bim.svc.cluster.local:5555
|
|
||||||
- name: DB_HOST
|
|
||||||
value: postgres-service-bim-v1
|
|
||||||
- name: DB_PORT
|
|
||||||
value: '5432'
|
|
||||||
- name: MESH_OPTIMIZER_PATH
|
|
||||||
value: gltfpack
|
|
||||||
- name: DEBUG
|
|
||||||
value: '0'
|
|
||||||
- name: STORAGE_SEGMENT
|
|
||||||
value: sarex-production-storage
|
|
||||||
- name: STORAGE_PROJECT
|
|
||||||
value: sarex-production
|
|
||||||
- name: TMP_DIR
|
|
||||||
value: /tmp
|
|
||||||
- name: WEBHOOK_URL
|
|
||||||
value: http://bim-api-service.bim.svc.cluster.local:5555
|
|
||||||
- name: COMPARATOR_API_URL
|
|
||||||
value: http://comparator-api-service.comparator-prod/internal
|
|
||||||
- name: RABBIT_VHOST
|
|
||||||
value: api
|
|
||||||
- name: RABBIT_HOST
|
|
||||||
value: rabbitmq-service.rabbitmq:5672
|
|
||||||
- name: DISABLE_INSTANCING
|
|
||||||
value: '0'
|
|
||||||
- name: DB_USER
|
|
||||||
valueFrom:
|
|
||||||
secretKeyRef:
|
|
||||||
key: username
|
|
||||||
name: postgres-secret-bim-v1
|
|
||||||
- name: DB_PASSWORD
|
|
||||||
valueFrom:
|
|
||||||
secretKeyRef:
|
|
||||||
key: password
|
|
||||||
name: postgres-secret-bim-v1
|
|
||||||
- name: RABBIT_USER
|
|
||||||
valueFrom:
|
|
||||||
secretKeyRef:
|
|
||||||
key: username
|
|
||||||
name: rabbitmq-secret
|
|
||||||
- name: RABBIT_PASSWORD
|
|
||||||
valueFrom:
|
|
||||||
secretKeyRef:
|
|
||||||
key: password
|
|
||||||
name: rabbitmq-secret
|
|
||||||
- name: AWS_ACCESS_KEY_ID
|
|
||||||
valueFrom:
|
|
||||||
secretKeyRef:
|
|
||||||
key: key-id
|
|
||||||
name: s3-cred
|
|
||||||
- name: AWS_SECRET_ACCESS_KEY
|
|
||||||
valueFrom:
|
|
||||||
secretKeyRef:
|
|
||||||
key: access-key
|
|
||||||
name: s3-cred
|
|
||||||
image: cr.yandex/crp3ccidau046kdj8g9q/bim-api:870965d1967cd761965029b0480884ab7fa7c951
|
|
||||||
imagePullPolicy: IfNotPresent
|
|
||||||
name: bim-api
|
|
||||||
ports:
|
|
||||||
- containerPort: 5555
|
|
||||||
name: http
|
|
||||||
protocol: TCP
|
|
||||||
- containerPort: 9000
|
|
||||||
name: prom
|
|
||||||
protocol: TCP
|
|
||||||
resources: {}
|
|
||||||
terminationMessagePath: /dev/termination-log
|
|
||||||
terminationMessagePolicy: File
|
|
||||||
volumeMounts:
|
|
||||||
- mountPath: /tmp
|
|
||||||
name: tmp-volume
|
|
||||||
dnsPolicy: ClusterFirst
|
|
||||||
imagePullSecrets:
|
|
||||||
- name: dockerhub
|
|
||||||
nodeSelector:
|
|
||||||
name: generic
|
|
||||||
restartPolicy: Always
|
|
||||||
schedulerName: default-scheduler
|
|
||||||
securityContext: {}
|
|
||||||
serviceAccount: bim-api-sa
|
|
||||||
serviceAccountName: bim-api-sa
|
|
||||||
terminationGracePeriodSeconds: 30
|
|
||||||
volumes:
|
|
||||||
- emptyDir: {}
|
|
||||||
name: tmp-volume
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Service
|
|
||||||
metadata:
|
|
||||||
name: bim-api-service
|
|
||||||
namespace: bim
|
|
||||||
labels: {}
|
|
||||||
spec:
|
|
||||||
externalTrafficPolicy: Cluster
|
|
||||||
ports:
|
|
||||||
- name: http
|
|
||||||
nodePort: 31352
|
|
||||||
port: 5555
|
|
||||||
protocol: TCP
|
|
||||||
targetPort: 5555
|
|
||||||
selector:
|
|
||||||
app: bim-api
|
|
||||||
sessionAffinity: None
|
|
||||||
type: NodePort
|
|
||||||
@ -1,146 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: apps/v1
|
|
||||||
kind: Deployment
|
|
||||||
metadata:
|
|
||||||
name: bim-worker
|
|
||||||
namespace: bim
|
|
||||||
labels:
|
|
||||||
app: bim-worker
|
|
||||||
spec:
|
|
||||||
progressDeadlineSeconds: 600
|
|
||||||
replicas: 1
|
|
||||||
revisionHistoryLimit: 10
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
app: bim-worker
|
|
||||||
strategy:
|
|
||||||
rollingUpdate:
|
|
||||||
maxSurge: 25%
|
|
||||||
maxUnavailable: 25%
|
|
||||||
type: RollingUpdate
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app: bim-worker
|
|
||||||
spec:
|
|
||||||
containers:
|
|
||||||
- command:
|
|
||||||
- ./entrypoint_worker.sh
|
|
||||||
env:
|
|
||||||
- name: JWT_PUBLIC_KEY_PATH
|
|
||||||
value: /etc/sarex/keys/prod.rsa.pub
|
|
||||||
- name: FEATURE_ENABLE_JWT_AUTH
|
|
||||||
value: 'false'
|
|
||||||
- name: FEATURE_ENABLE_SAREX_AUTH
|
|
||||||
value: 'false'
|
|
||||||
- name: FEATURE_ENABLE_WORKSPACES
|
|
||||||
value: 'true'
|
|
||||||
- name: FEATURE_ENABLE_GCLOUD
|
|
||||||
value: 'false'
|
|
||||||
- name: FEATURE_ENABLE_S3
|
|
||||||
value: 'true'
|
|
||||||
- name: S3_BUCKET
|
|
||||||
value: sarex-bim-storage
|
|
||||||
- name: BIM_CURRENT_STORAGE
|
|
||||||
value: s3
|
|
||||||
- name: AWS_DEFAULT_REGION
|
|
||||||
value: ru-central1
|
|
||||||
- name: FEATURE_ENABLE_PROCESSING
|
|
||||||
value: '1'
|
|
||||||
- name: PROCESSING_API_URL
|
|
||||||
value: http://workflows-service.processing.svc.cluster.local:8000/internal
|
|
||||||
- name: PROCESSING_C2M_VERSION
|
|
||||||
value: stable
|
|
||||||
- name: prometheus_multiproc_dir
|
|
||||||
value: /tmp
|
|
||||||
- name: GOOGLE_APPLICATION_CREDENTIALS
|
|
||||||
value: /etc/sarex/google-storage/service_account.json
|
|
||||||
- name: BUNDLE_VERSION
|
|
||||||
value: v1
|
|
||||||
- name: WORKSPACES_API_URL
|
|
||||||
value: http://workspaces-service.workspaces.svc.cluster.local:8000/internal
|
|
||||||
- name: BIM_API_EXTERNAL_HOST_SCHEMA
|
|
||||||
value: https
|
|
||||||
- name: BIM_API_EXTERNAL_HOST
|
|
||||||
value: sarex.dsinv.ru
|
|
||||||
- name: BIM_API_INTERNAL_HOST_SCHEMA
|
|
||||||
value: http
|
|
||||||
- name: BIM_API_INTERNAL_HOST
|
|
||||||
value: bim-api-service.bim.svc.cluster.local:5555
|
|
||||||
- name: DB_HOST
|
|
||||||
value: postgres-service-bim-v1
|
|
||||||
- name: DB_PORT
|
|
||||||
value: '5432'
|
|
||||||
- name: MESH_OPTIMIZER_PATH
|
|
||||||
value: gltfpack
|
|
||||||
- name: DEBUG
|
|
||||||
value: '0'
|
|
||||||
- name: STORAGE_SEGMENT
|
|
||||||
value: sarex-production-storage
|
|
||||||
- name: STORAGE_PROJECT
|
|
||||||
value: sarex-production
|
|
||||||
- name: TMP_DIR
|
|
||||||
value: /tmp
|
|
||||||
- name: WEBHOOK_URL
|
|
||||||
value: http://bim-api-service.bim.svc.cluster.local:5555
|
|
||||||
- name: COMPARATOR_API_URL
|
|
||||||
value: http://comparator-api-service.comparator-prod/internal
|
|
||||||
- name: RABBIT_VHOST
|
|
||||||
value: api
|
|
||||||
- name: RABBIT_HOST
|
|
||||||
value: rabbitmq-service.bim:5672
|
|
||||||
- name: DISABLE_INSTANCING
|
|
||||||
value: '0'
|
|
||||||
- name: DB_USER
|
|
||||||
valueFrom:
|
|
||||||
secretKeyRef:
|
|
||||||
key: username
|
|
||||||
name: postgres-secret-bim-v1
|
|
||||||
- name: DB_PASSWORD
|
|
||||||
valueFrom:
|
|
||||||
secretKeyRef:
|
|
||||||
key: password
|
|
||||||
name: postgres-secret-bim-v1
|
|
||||||
- name: RABBIT_USER
|
|
||||||
valueFrom:
|
|
||||||
secretKeyRef:
|
|
||||||
key: username
|
|
||||||
name: rabbitmq-secret
|
|
||||||
- name: RABBIT_PASSWORD
|
|
||||||
valueFrom:
|
|
||||||
secretKeyRef:
|
|
||||||
key: password
|
|
||||||
name: rabbitmq-secret
|
|
||||||
- name: AWS_ACCESS_KEY_ID
|
|
||||||
valueFrom:
|
|
||||||
secretKeyRef:
|
|
||||||
key: key-id
|
|
||||||
name: s3-cred
|
|
||||||
- name: AWS_SECRET_ACCESS_KEY
|
|
||||||
valueFrom:
|
|
||||||
secretKeyRef:
|
|
||||||
key: access-key
|
|
||||||
name: s3-cred
|
|
||||||
image: cr.yandex/crp3ccidau046kdj8g9q/bim-api:870965d1967cd761965029b0480884ab7fa7c951
|
|
||||||
imagePullPolicy: IfNotPresent
|
|
||||||
name: bim-worker
|
|
||||||
resources: {}
|
|
||||||
terminationMessagePath: /dev/termination-log
|
|
||||||
terminationMessagePolicy: File
|
|
||||||
volumeMounts:
|
|
||||||
- mountPath: /tmp
|
|
||||||
name: tmp-volume
|
|
||||||
dnsPolicy: ClusterFirst
|
|
||||||
imagePullSecrets:
|
|
||||||
- name: dockerhub
|
|
||||||
nodeSelector:
|
|
||||||
name: generic
|
|
||||||
restartPolicy: Always
|
|
||||||
schedulerName: default-scheduler
|
|
||||||
securityContext: {}
|
|
||||||
serviceAccount: bim-worker-sa
|
|
||||||
serviceAccountName: bim-worker-sa
|
|
||||||
terminationGracePeriodSeconds: 30
|
|
||||||
volumes:
|
|
||||||
- emptyDir: {}
|
|
||||||
name: tmp-volume
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
namespace: bim
|
|
||||||
resources:
|
|
||||||
- ../base
|
|
||||||
- bim-api.yaml
|
|
||||||
- bim-worker.yaml
|
|
||||||
patches:
|
|
||||||
- path: backend.yaml
|
|
||||||
target:
|
|
||||||
kind: HelmRelease
|
|
||||||
name: backend
|
|
||||||
File diff suppressed because it is too large
Load Diff
@ -7,5 +7,5 @@ resources:
|
|||||||
patches:
|
patches:
|
||||||
- path: replicas.yaml
|
- path: replicas.yaml
|
||||||
target:
|
target:
|
||||||
kind: HelmRelease
|
kind: Deployment
|
||||||
name: backend
|
name: backend
|
||||||
|
|||||||
@ -9,7 +9,7 @@ spec:
|
|||||||
chart:
|
chart:
|
||||||
spec:
|
spec:
|
||||||
chart: postgresql-contour
|
chart: postgresql-contour
|
||||||
version: "13.0.15"
|
version: "13.0.8"
|
||||||
sourceRef:
|
sourceRef:
|
||||||
kind: HelmRepository
|
kind: HelmRepository
|
||||||
name: yc-oci-charts
|
name: yc-oci-charts
|
||||||
@ -45,7 +45,7 @@ spec:
|
|||||||
image:
|
image:
|
||||||
registry: cr.yandex/crp3ccidau046kdj8g9q
|
registry: cr.yandex/crp3ccidau046kdj8g9q
|
||||||
repository: contour/postgresql
|
repository: contour/postgresql
|
||||||
tag: 13.0.15
|
tag: 13.0.8
|
||||||
pullPolicy: Always
|
pullPolicy: Always
|
||||||
metrics:
|
metrics:
|
||||||
enabled: false
|
enabled: false
|
||||||
@ -92,8 +92,7 @@ spec:
|
|||||||
failureThreshold: 6
|
failureThreshold: 6
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
cpu: 50m
|
memory: 512Mi
|
||||||
memory: 128Mi
|
|
||||||
nodeSelector:
|
nodeSelector:
|
||||||
dedicated: db
|
dedicated: db
|
||||||
tolerations:
|
tolerations:
|
||||||
@ -104,7 +103,7 @@ spec:
|
|||||||
contour:
|
contour:
|
||||||
enabled: true
|
enabled: true
|
||||||
adminUser: "postgres"
|
adminUser: "postgres"
|
||||||
sharedPreloadLibraries: ""
|
sharedPreloadLibraries: "pg_stat_statements,uuid-ossp,ltree,timescaledb"
|
||||||
vault:
|
vault:
|
||||||
enabled: true
|
enabled: true
|
||||||
role: postgresql
|
role: postgresql
|
||||||
|
|||||||
@ -1,13 +1,8 @@
|
|||||||
---
|
---
|
||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
apiVersion: apps/v1
|
||||||
kind: HelmRelease
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
name: backend
|
name: backend
|
||||||
namespace: bim
|
namespace: bim
|
||||||
spec:
|
spec:
|
||||||
values:
|
replicas: 1
|
||||||
services:
|
|
||||||
backend:
|
|
||||||
deployment:
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
|
|||||||
@ -1,80 +0,0 @@
|
|||||||
# =============================================================================
|
|
||||||
# cde-orchestration-demo (Оркестратор) — пример переменных окружения
|
|
||||||
#
|
|
||||||
# Разбор переменных: github.com/sethvargo/go-envconfig.
|
|
||||||
# Файл .env подгружается через godotenv (флаг -env-file, по умолчанию `.env`).
|
|
||||||
# Глобального префикса у переменных НЕТ (в отличие от других сервисов Sarex).
|
|
||||||
# Вложенные секции задаются префиксом в env-тегах (напр. DATABASE_URL).
|
|
||||||
#
|
|
||||||
# Значения ниже — примеры и значения по умолчанию из кода. Секреты (ключи,
|
|
||||||
# пароли, токены) оставлены пустыми — заполните собственными.
|
|
||||||
# Один и тот же .env используется всеми бинарниками (см. docker-compose.yml),
|
|
||||||
# но каждый бинарник читает только нужное ему подмножество (см. CONFIGURATION.md).
|
|
||||||
# =============================================================================
|
|
||||||
|
|
||||||
# --- Общие ---
|
|
||||||
ENVIRONMENT=production
|
|
||||||
LOG_LEVEL=info # cmd/http: default=info; воркеры: default=debug
|
|
||||||
IS_CONTOUR=false
|
|
||||||
|
|
||||||
# --- HTTP-сервер (cmd/http) ---
|
|
||||||
ADDRESS=:8080
|
|
||||||
PROCESS_CACHE_TTL=60
|
|
||||||
PROCESS_CACHE_CLEAR_INTERVAL=60
|
|
||||||
PUBLIC_KEY= # PEM RSA public key для проверки JWT (обязателен для http)
|
|
||||||
OPERATE_URL= # Базовый URL Camunda Operate/REST
|
|
||||||
SAREX_BACKEND_BASE_URL=https://stage.sarex.io
|
|
||||||
|
|
||||||
# --- Camunda ---
|
|
||||||
CAMUNDA_KEYCLOAK_URL=
|
|
||||||
CAMUNDA_CLIENT_ID=operate # только cmd/http
|
|
||||||
CAMUNDA_CLIENT_SECRET=identity-secret-for-components # только cmd/http
|
|
||||||
CAMUNDA_PROCESS_DEFINITION_ID=actionsOnApproval # только cmd/http
|
|
||||||
|
|
||||||
# --- Zeebe ---
|
|
||||||
ZEEBE_GATEWAY=
|
|
||||||
ZEEBE_CLIENT_ID=zeebe
|
|
||||||
ZEEBE_CLIENT_SECRET=identity-secret-for-components
|
|
||||||
ZEEBE_WORKER_JOB_TYPE=markDocuments # у каждого воркера своё значение по умолчанию (см. CONFIGURATION.md)
|
|
||||||
|
|
||||||
# --- Database (PostgreSQL) ---
|
|
||||||
DATABASE_URL=
|
|
||||||
DATABASE_POOL_SIZE=10
|
|
||||||
|
|
||||||
# --- S3 ---
|
|
||||||
S3_ENDPOINT_URL=https://storage.yandexcloud.net
|
|
||||||
S3_ACCESS_KEY_ID=
|
|
||||||
S3_SECRET_ACCESS_KEY=
|
|
||||||
S3_PARTITION_ID=yc
|
|
||||||
S3_SIGNING_REGION=ru-central1
|
|
||||||
|
|
||||||
# --- Auth (без префикса) ---
|
|
||||||
AUTH_HOST=
|
|
||||||
USERNAME=
|
|
||||||
PASSWORD=
|
|
||||||
|
|
||||||
# --- Flows (сервис рабочих процессов) ---
|
|
||||||
FLOWS_URL=
|
|
||||||
FLOWS_INTERNAL_URL=
|
|
||||||
|
|
||||||
# --- Workspaces ---
|
|
||||||
WORKSPACES_URL=
|
|
||||||
|
|
||||||
# --- Workflows (используется воркером split_pdf) ---
|
|
||||||
WORKFLOWS_HOST=
|
|
||||||
WORKFLOWS_IMAGE_TAG=latest
|
|
||||||
|
|
||||||
# --- System log ---
|
|
||||||
SYSTEM_LOG_URL=
|
|
||||||
|
|
||||||
# --- Telegram (алертинг воркеров) ---
|
|
||||||
TELEGRAM_TOKEN=
|
|
||||||
TELEGRAM_ALERT_GROUP_ID=
|
|
||||||
TELEGRAM_DEBUG=false
|
|
||||||
|
|
||||||
# --- AMQP / RabbitMQ (markings v2, copy v2) ---
|
|
||||||
AMQP_HOST=
|
|
||||||
AMQP_PORT=
|
|
||||||
AMQP_USER=
|
|
||||||
AMQP_PASSWORD=
|
|
||||||
AMQP_PATH_API=
|
|
||||||
@ -1,215 +0,0 @@
|
|||||||
# Конфигурация проекта cde-orchestration-demo (Оркестратор)
|
|
||||||
|
|
||||||
Документ описывает все переменные окружения и способы конфигурирования сервиса.
|
|
||||||
|
|
||||||
## Способы конфигурирования
|
|
||||||
|
|
||||||
Сервис настраивается **только через переменные окружения**. Разбор выполняется библиотекой [`github.com/sethvargo/go-envconfig`](https://github.com/sethvargo/go-envconfig): в каждом бинарнике вызывается `envconfig.Process(ctx, config)` со своей структурой `Config` (см. `internal/app/http/config.go` и `internal/app/worker/*/config.go`).
|
|
||||||
|
|
||||||
Особенности разбора:
|
|
||||||
|
|
||||||
- **Глобального префикса нет** — в отличие от других сервисов Sarex, переменные не имеют общего префикса (напр. просто `LOG_LEVEL`, `DATABASE_URL`).
|
|
||||||
- Вложенные секции задаются тегом `env:", prefix=XXX_"` на поле-структуре. Например поле `Database DatabaseConfig` с `prefix=DATABASE_` и полем `Url` с тегом `env:"URL"` даёт переменную `DATABASE_URL`.
|
|
||||||
- Структура `Auth` **не имеет** тега `prefix`, поэтому её поля читаются без префикса: `AUTH_HOST`, `USERNAME`, `PASSWORD`.
|
|
||||||
- Значения по умолчанию задаются в теге через `default=...`. Отсутствие поля без дефолта не приводит к ошибке `envconfig` (пустое значение), но может привести к падению при инициализации зависимого клиента (напр. пустой `PUBLIC_KEY` вызовет панику при старте http).
|
|
||||||
|
|
||||||
Файл `.env` подгружается через [`github.com/lpernett/godotenv`](https://github.com/lpernett/godotenv): в `main` вызывается `godotenv.Load(*envFileFlag)`, путь задаётся флагом `-env-file` (по умолчанию `.env`). Если файла нет — загрузка пропускается, переменные берутся из окружения процесса.
|
|
||||||
|
|
||||||
Отдельного конфиг-файла (yaml/toml) у приложения нет.
|
|
||||||
|
|
||||||
Источники переменных по способам запуска:
|
|
||||||
|
|
||||||
| Способ запуска | Откуда берутся переменные |
|
|
||||||
| --- | --- |
|
|
||||||
| Локально (бинарник) | Флаг `-env-file` → `.env` (godotenv) и/или переменные окружения процесса |
|
|
||||||
| Локально (docker-compose) | `docker-compose.yml`: у каждого сервиса `env_file: .env` |
|
|
||||||
| Kubernetes (Helm) | `.helm/values.yaml`: блок `envs` (обычные значения) и `secretEnvs` (значения из k8s-секрета `cde-secret`) чарта `universal-chart` |
|
|
||||||
| Kubernetes (kustomize, этот репозиторий) | Vault Agent инжектит секрет `secrets/data/vault/apps/cde` в файл `/vault/secrets/cde-env`, который экспортируется в окружение перед запуском бинарника (`source /vault/secrets/cde-env`) |
|
|
||||||
|
|
||||||
## Бинарники (точки входа)
|
|
||||||
|
|
||||||
| Бинарник | Точка входа | Config | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `http` | `cmd/http/main.go` | `internal/app/http` | HTTP API оркестрации (процессы, подпись, загрузка BPMN) |
|
|
||||||
| `copy` | `cmd/worker/copy/main.go` | `.../worker/copy` | Воркер копирования документов (`copyDocuments`) |
|
|
||||||
| `copyv2` | `cmd/worker/copyv2/main.go` | `.../worker/copyv2` | Копирование документов v2 (`copyDocumentsv2`) |
|
|
||||||
| `create_versions` | `cmd/worker/create_versions/main.go` | `.../worker/create_versions` | Создание версий (`createVersions`) |
|
|
||||||
| `create_versionsv2` | `cmd/worker/create_versionsv2/main.go` | `.../worker/create_versionsv2` | Создание версий v2 (`createVersionsv2`) |
|
|
||||||
| `flows_callback` | `cmd/worker/flows_callback/main.go` | `.../worker/flows_callback` | Обратный вызов в сервис flows (`flowsCallback`) |
|
|
||||||
| `markings` | `cmd/worker/markings/main.go` | `.../worker/markings` | Маркировка документов (`markDocuments`) |
|
|
||||||
| `markingsv2` | `cmd/worker/markingsv2/main.go` | `.../worker/markingsv2` | Маркировка v2 (`markDocumentsv2`) |
|
|
||||||
| `sign` | `cmd/worker/sign/main.go` | `.../worker/sign` | Подпись документов (`signDocuments`) |
|
|
||||||
| `signv2` | `cmd/worker/signv2/main.go` | `.../worker/signv2` | Подпись v2 (`signDocumentsv2`) |
|
|
||||||
| `split_pdf` | `cmd/worker/split_pdf/main.go` | `.../worker/split_pdf` | Разбиение/обработка PDF (`splitPDF`) |
|
|
||||||
| `update_bundles` | `cmd/worker/update_bundles/main.go` | `.../worker/update_bundles` | Обновление бандлов (`updateBundles`) |
|
|
||||||
|
|
||||||
Воркеры — это Zeebe job-workers: они подключаются к Zeebe-gateway и обрабатывают Service Task соответствующего типа (`ZEEBE_WORKER_JOB_TYPE`). HTTP-сервер, помимо приёма запросов, обращается к Camunda Operate/Zeebe (см. `ENDPOINTS.md`).
|
|
||||||
|
|
||||||
## Переменные приложения
|
|
||||||
|
|
||||||
Дефолт `—` означает, что значения по умолчанию нет.
|
|
||||||
|
|
||||||
### Общие (для всех бинарников)
|
|
||||||
|
|
||||||
| Переменная | Тип | Значение по умолчанию | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `ENVIRONMENT` | string | `production` (у воркеров) | Окружение развёртывания. У `http` не читается |
|
|
||||||
| `LOG_LEVEL` | string | `info` (http) / `debug` (воркеры) | Уровень логирования |
|
|
||||||
| `IS_CONTOUR` | bool | `false` | Режим изолированного контура (влияет на инициализацию S3) |
|
|
||||||
|
|
||||||
### HTTP-сервер (`cmd/http`)
|
|
||||||
|
|
||||||
| Переменная | Тип | Значение по умолчанию | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `ADDRESS` | string | `:8080` | Адрес прослушивания Fiber |
|
|
||||||
| `PROCESS_CACHE_TTL` | int (сек) | `60` | TTL кеша процессов |
|
|
||||||
| `PROCESS_CACHE_CLEAR_INTERVAL` | int (сек) | `60` | Интервал очистки кеша процессов |
|
|
||||||
| `PUBLIC_KEY` | string (PEM) | — | RSA public key для проверки JWT. Обязателен: при пустом/некорректном значении сервис падает при старте |
|
|
||||||
| `OPERATE_URL` | string | — | Базовый URL Camunda Operate/REST |
|
|
||||||
| `SAREX_BACKEND_BASE_URL` | string | — | Базовый URL sarex-backend (проверка MRPA при подписи) |
|
|
||||||
|
|
||||||
### Camunda (`CAMUNDA_*`)
|
|
||||||
|
|
||||||
| Переменная | Тип | Значение по умолчанию | Назначение | Где используется |
|
|
||||||
| --- | --- | --- | --- | --- |
|
|
||||||
| `CAMUNDA_KEYCLOAK_URL` | string | — | URL Keycloak для OAuth (Zeebe/Operate) | http + воркеры |
|
|
||||||
| `CAMUNDA_CLIENT_ID` | string | `operate` | Client ID для Operate | только http |
|
|
||||||
| `CAMUNDA_CLIENT_SECRET` | string | `identity-secret-for-components` | Client secret для Operate | только http |
|
|
||||||
| `CAMUNDA_PROCESS_DEFINITION_ID` | string | `actionsOnApproval` | ID определения процесса | только http |
|
|
||||||
|
|
||||||
### Zeebe (`ZEEBE_*`)
|
|
||||||
|
|
||||||
| Переменная | Тип | Значение по умолчанию | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `ZEEBE_GATEWAY` | string | — | Адрес Zeebe gateway |
|
|
||||||
| `ZEEBE_CLIENT_ID` | string | `zeebe` | Client ID |
|
|
||||||
| `ZEEBE_CLIENT_SECRET` | string | `identity-secret-for-components` | Client secret |
|
|
||||||
| `ZEEBE_WORKER_JOB_TYPE` | string | зависит от воркера | Тип Service Task, который слушает воркер |
|
|
||||||
|
|
||||||
Значения `ZEEBE_WORKER_JOB_TYPE` по умолчанию: `markDocuments` (http/markings), `markDocumentsv2` (markingsv2), `copyDocuments` (copy), `copyDocumentsv2` (copyv2), `createVersions` (create_versions), `createVersionsv2` (create_versionsv2), `flowsCallback` (flows_callback), `signDocuments` (sign), `signDocumentsv2` (signv2), `splitPDF` (split_pdf), `updateBundles` (update_bundles).
|
|
||||||
|
|
||||||
### Database (`DATABASE_*`)
|
|
||||||
|
|
||||||
| Переменная | Тип | Значение по умолчанию | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `DATABASE_URL` | string | — | DSN подключения к PostgreSQL (pgx) |
|
|
||||||
| `DATABASE_POOL_SIZE` | int32 | `10` | Размер пула соединений |
|
|
||||||
|
|
||||||
### S3 (`S3_*`)
|
|
||||||
|
|
||||||
| Переменная | Тип | Значение по умолчанию | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `S3_ENDPOINT_URL` | string | `https://storage.yandexcloud.net` | Эндпоинт S3 |
|
|
||||||
| `S3_ACCESS_KEY_ID` | string | — | Access key |
|
|
||||||
| `S3_SECRET_ACCESS_KEY` | string | — | Secret key |
|
|
||||||
| `S3_PARTITION_ID` | string | `yc` | Partition ID (aws-sdk-go-v2) |
|
|
||||||
| `S3_SIGNING_REGION` | string | `ru-central1` | Регион для подписи запросов |
|
|
||||||
|
|
||||||
### Auth (без префикса)
|
|
||||||
|
|
||||||
Поле-структура `Auth` не имеет префикса, поэтому переменные читаются напрямую.
|
|
||||||
|
|
||||||
| Переменная | Тип | Значение по умолчанию | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `AUTH_HOST` | string | — | Хост сервиса аутентификации (получение токенов пользователя/админа) |
|
|
||||||
| `USERNAME` | string | — | Логин админ-учётки |
|
|
||||||
| `PASSWORD` | string | — | Пароль админ-учётки |
|
|
||||||
|
|
||||||
### Flows (`FLOWS_*`)
|
|
||||||
|
|
||||||
| Переменная | Тип | Значение по умолчанию | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `FLOWS_URL` | string | — | Базовый URL сервиса flows |
|
|
||||||
| `FLOWS_INTERNAL_URL` | string | — | Внутренний URL flows (обновление документов review). Есть только в конфигах `copy`/`copyv2` |
|
|
||||||
|
|
||||||
### Workspaces (`WORKSPACES_*`)
|
|
||||||
|
|
||||||
| Переменная | Тип | Значение по умолчанию | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `WORKSPACES_URL` | string | — | URL сервиса рабочих областей (используется воркерами copy/copyv2) |
|
|
||||||
|
|
||||||
### Workflows (`WORKFLOWS_*`)
|
|
||||||
|
|
||||||
Используется воркером `split_pdf`.
|
|
||||||
|
|
||||||
| Переменная | Тип | Значение по умолчанию | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `WORKFLOWS_HOST` | string | — | Хост сервиса workflows |
|
|
||||||
| `WORKFLOWS_IMAGE_TAG` | string | `latest` | Тег docker-образа задач обработки PDF |
|
|
||||||
|
|
||||||
> Container registry (`cr.yandex/crp3ccidau046kdj8g9q`) и флаг `UploadResultsToS3=true` заданы в коде воркера `split_pdf` (`worker.go`), а не через окружение.
|
|
||||||
|
|
||||||
### System log (`SYSTEM_LOG_*`)
|
|
||||||
|
|
||||||
| Переменная | Тип | Значение по умолчанию | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `SYSTEM_LOG_URL` | string | — | URL сервиса системных логов (copy, copyv2, create_versions, create_versionsv2) |
|
|
||||||
|
|
||||||
### Telegram (`TELEGRAM_*`)
|
|
||||||
|
|
||||||
Клиент алертинга для воркеров.
|
|
||||||
|
|
||||||
| Переменная | Тип | Значение по умолчанию | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `TELEGRAM_TOKEN` | string | — | Токен бота |
|
|
||||||
| `TELEGRAM_ALERT_GROUP_ID` | int64 | — | ID группы для алертов |
|
|
||||||
| `TELEGRAM_DEBUG` | bool | `false` | Debug-режим бота |
|
|
||||||
|
|
||||||
### AMQP / RabbitMQ (`AMQP_*`)
|
|
||||||
|
|
||||||
Используется воркерами `markingsv2` и `copyv2` (маркировка бандлов через RabbitMQ).
|
|
||||||
|
|
||||||
| Переменная | Тип | Значение по умолчанию | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `AMQP_HOST` | string | — | Хост RabbitMQ |
|
|
||||||
| `AMQP_PORT` | string | — | Порт RabbitMQ |
|
|
||||||
| `AMQP_USER` | string | — | Пользователь |
|
|
||||||
| `AMQP_PASSWORD` | string | — | Пароль |
|
|
||||||
| `AMQP_PATH_API` | string | — | Vhost / путь API в URL подключения |
|
|
||||||
|
|
||||||
## Матрица «переменная → бинарник»
|
|
||||||
|
|
||||||
| Секция | http | copy | copyv2 | create_versions | create_versionsv2 | flows_callback | markings | markingsv2 | sign | signv2 | split_pdf | update_bundles |
|
|
||||||
| --- | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: |
|
|
||||||
| Общие | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
||||||
| `ADDRESS`/`PROCESS_CACHE_*` | ✓ | | | | | | | | | | | |
|
|
||||||
| `PUBLIC_KEY`,`OPERATE_URL`,`SAREX_BACKEND_BASE_URL`,`CAMUNDA_CLIENT_*`,`CAMUNDA_PROCESS_DEFINITION_ID` | ✓ | | | | | | | | | | | |
|
|
||||||
| `CAMUNDA_KEYCLOAK_URL`,`ZEEBE_*` | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
||||||
| `DATABASE_*` | ✓ | ✓ | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
||||||
| `S3_*` | ✓ | ✓ | ✓ | ✓ | ✓ | | | ✓ | ✓ | ✓ | | |
|
|
||||||
| `AUTH_*`/`USERNAME`/`PASSWORD` | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
||||||
| `FLOWS_URL` | | ✓ | ✓ | | | ✓ | ✓ | ✓ | ✓ | ✓ | | ✓ |
|
|
||||||
| `FLOWS_INTERNAL_URL` | | ✓ | ✓ | | | | | | | | | |
|
|
||||||
| `WORKSPACES_URL` | | ✓ | ✓ | | | | | | | | | |
|
|
||||||
| `WORKFLOWS_*` | | | | | | | | | | | ✓ | |
|
|
||||||
| `SYSTEM_LOG_URL` | | ✓ | ✓ | ✓ | ✓ | | | | | | | |
|
|
||||||
| `AMQP_*` | | | ✓ | | | | | ✓ | | | | |
|
|
||||||
| `TELEGRAM_*` | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
||||||
|
|
||||||
> Матрица построена по структурам `Config` соответствующих бинарников. Наличие поля в структуре не всегда означает, что клиент инициализируется — см. замечания ниже.
|
|
||||||
|
|
||||||
## Переменные в Helm-чарте (`.helm/values.yaml`)
|
|
||||||
|
|
||||||
Обычные значения (блок `envs`):
|
|
||||||
|
|
||||||
| Переменная | Значения по окружениям |
|
|
||||||
| --- | --- |
|
|
||||||
| `SAREX_BACKEND_BASE_URL` | stage: `https://stage.sarex.io`, preprod: `https://preprod.sarex.io`, production: `https://lk.sarex.io` |
|
|
||||||
|
|
||||||
Значения из секрета (блок `secretEnvs`, общий для всех сервисов через якорь `*cde_secret_envs`), берутся из k8s-секрета `cde-secret` одноимёнными ключами: `ENVIRONMENT`, `LOG_LEVEL`, `ZEEBE_GATEWAY`, `DATABASE_URL`, `S3_ENDPOINT_URL`, `S3_ACCESS_KEY_ID`, `S3_SECRET_ACCESS_KEY`, `PUBLIC_KEY`, `PDM_URL`, `FLOWS_URL`, `FLOWS_INTERNAL_URL`, `USERNAME`, `PASSWORD`, `CAMUNDA_PROCESS_DEFINITION_ID`, `OPERATE_URL`, `CAMUNDA_KEYCLOAK_URL`, `CAMUNDA_CLIENT_ID`, `CAMUNDA_CLIENT_SECRET`, `WORKFLOWS_HOST`, `WORKSPACES_URL`, `AUTH_HOST`, `TELEGRAM_ALERT_GROUP_ID`, `TELEGRAM_TOKEN`, `IS_CONTOUR`, `AMQP_HOST`, `AMQP_PORT`, `AMQP_USER`, `AMQP_PASSWORD`, `AMQP_PATH_API`, `SYSTEM_LOG_URL`.
|
|
||||||
|
|
||||||
## Развёртывание через kustomize (этот репозиторий)
|
|
||||||
|
|
||||||
В `iac/apps/cde` секреты доставляются не через `secretEnvs` чарта, а через **Vault Agent Injector**: аннотации подов монтируют секрет `secrets/data/vault/apps/cde` в файл `/vault/secrets/cde-env`, который экспортируется перед запуском (`source /vault/secrets/cde-env`, затем `exec /http` или `/worker`). Дополнительно контейнерам задаётся `S3_IS_CONTOUR=true` (примечание: в коде используется переменная `IS_CONTOUR`).
|
|
||||||
|
|
||||||
Оверлеи: `base` (общие манифесты), `brusnika-stage`, `brusnika-prod`, `yc-k8s-test`.
|
|
||||||
|
|
||||||
## Замечания и потенциальные проблемы
|
|
||||||
|
|
||||||
- **Нет глобального префикса.** Имена переменных короткие (`USERNAME`, `PASSWORD`, `AUTH_HOST`) — легко пересечься с системными; следите за окружением процесса.
|
|
||||||
- **`PUBLIC_KEY` обязателен для `http`** — при пустом/некорректном PEM сервис паникует на старте (`server.go`).
|
|
||||||
- **`PDM_URL`** присутствует в `secretEnvs` Helm, но соответствующий клиент (`internal/adapters/http/pdm`) в текущей сборке нигде не инициализируется — переменная фактически не используется кодом.
|
|
||||||
- **`S3_IS_CONTOUR`** задаётся в kustomize-манифестах, тогда как код читает `IS_CONTOUR` (без префикса `S3_`). Проверьте, что для влияния на поведение выставлен именно `IS_CONTOUR`.
|
|
||||||
- **`FLOWS_INTERNAL_URL`** объявлен только в конфигах `copy`/`copyv2`; в остальных воркерах поля нет, хотя ключ есть в общем секрете.
|
|
||||||
- **Значения по умолчанию для секретов Camunda/Zeebe** (`identity-secret-for-components`) подходят для локального стенда, но должны переопределяться в prod.
|
|
||||||
- Приложение читает `.env` только если файл существует; иначе используются переменные окружения. `make`-целей для генерации `.env` в репозитории нет — используйте этот `.env.example` как шаблон.
|
|
||||||
@ -1,130 +0,0 @@
|
|||||||
# Эндпоинты внешних сервисов, с которыми взаимодействует cde-orchestration-demo
|
|
||||||
|
|
||||||
Документ описывает все HTTP/AMQP/gRPC-эндпоинты внешних сервисов, к которым обращается оркестратор (сервер `cmd/http` и воркеры). Это исходящие вызовы; описание API, который оркестратор **предоставляет**, — в `openapi.yaml`.
|
|
||||||
|
|
||||||
## Как устроено взаимодействие
|
|
||||||
|
|
||||||
Клиенты внешних сервисов лежат в `internal/adapters/http/*` и `internal/adapters/*`. Базовые URL берутся из переменных окружения (см. `CONFIGURATION.md`). Для HTTP используются два клиента: Fiber `client` (camunda, flows, pdm, workspaces, system_log) и `go-resty` (workflows, sarexbackend). Аутентификация — по-разному в зависимости от сервиса (OAuth client_credentials, Bearer-токен пользователя/админа, Basic).
|
|
||||||
|
|
||||||
## Базовые адреса по сервисам
|
|
||||||
|
|
||||||
| Сервис | Переменная базового адреса | Клиент | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| Camunda Operate / REST | `OPERATE_URL` | Fiber | Управление инстансами процессов, переменными, сообщениями |
|
|
||||||
| Camunda Keycloak | `CAMUNDA_KEYCLOAK_URL` | Fiber | OAuth-токен для Operate |
|
|
||||||
| Zeebe Gateway | `ZEEBE_GATEWAY` | gRPC (SDK) | Деплой BPMN, обработка job'ов воркерами |
|
|
||||||
| Auth (токены) | `AUTH_HOST` | Fiber/resty | Токены пользователя/админа для flows и pdm |
|
|
||||||
| Flows | `FLOWS_URL`, `FLOWS_INTERNAL_URL` | Fiber | Ревью, действия пользователя, обновление бандлов/документов |
|
|
||||||
| PDM | `PDM_URL` | Fiber | Маркировка бандлов *(клиент не подключён — см. примечание)* |
|
|
||||||
| Workflows | `WORKFLOWS_HOST` | resty | Создание workflow обработки PDF |
|
|
||||||
| Workspaces | `WORKSPACES_URL` | Fiber | Создание рабочих областей |
|
|
||||||
| System log | `SYSTEM_LOG_URL` | Fiber | Отправка системных логов |
|
|
||||||
| Sarex backend | `SAREX_BACKEND_BASE_URL` | resty | Получение MRPA по id |
|
|
||||||
| Telegram Bot API | `TELEGRAM_TOKEN` | tgbotapi | Алертинг воркеров |
|
|
||||||
| RabbitMQ (AMQP) | `AMQP_*` | amqp091 | Маркировка бандлов (RPC), вычисление хеш-сумм |
|
|
||||||
|
|
||||||
## Эндпоинты по сервисам
|
|
||||||
|
|
||||||
### Camunda Operate / REST (`OPERATE_URL`, `CAMUNDA_KEYCLOAK_URL`)
|
|
||||||
|
|
||||||
`internal/adapters/http/camunda/client.go`. Все запросы (кроме получения токена) идут с заголовком `Authorization: Bearer <access_token>`.
|
|
||||||
|
|
||||||
| Метод | Путь | Назначение |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| POST | `{CAMUNDA_KEYCLOAK_URL}/auth/realms/camunda-platform/protocol/openid-connect/token` | OAuth-токен (`grant_type=client_credentials`) |
|
|
||||||
| POST | `{OPERATE_URL}/v2/process-instances` | Создать инстанс процесса |
|
|
||||||
| GET | `{OPERATE_URL}/api/process-instances/{key}` | Получить инстанс процесса |
|
|
||||||
| POST | `{OPERATE_URL}/v1/variables/search` | Поиск переменных процесса по имени/значению |
|
|
||||||
| GET | `{OPERATE_URL}/api/process-instances/{key}/variables/{varId}` | Значение конкретной переменной |
|
|
||||||
| POST | `{OPERATE_URL}/api/process-instances/{key}/variables` | Список переменных инстанса (`scopeId`) |
|
|
||||||
| POST | `{OPERATE_URL}/v2/messages/publication` | Публикация сообщения процессу (напр. `signRequest`) |
|
|
||||||
|
|
||||||
### Zeebe Gateway (`ZEEBE_GATEWAY`)
|
|
||||||
|
|
||||||
`internal/adapters/zeebe`. gRPC через официальный SDK `camunda/zeebe/clients/go/v8`. Используется для деплоя определений процессов (`NewProcessDefinition`) и для job-воркеров, которые слушают Service Task типа `ZEEBE_WORKER_JOB_TYPE` и по завершении/ошибке возвращают результат в инстанс процесса.
|
|
||||||
|
|
||||||
### Auth — токены (`AUTH_HOST`)
|
|
||||||
|
|
||||||
Используется адаптерами flows и pdm для получения Bearer-токенов.
|
|
||||||
|
|
||||||
| Метод | Путь | Назначение |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| GET | `{AUTH_HOST}/token/user/{userID}/` | Токен от имени пользователя |
|
|
||||||
| POST | `{AUTH_HOST}/token/` | Токен админа (`username`/`password`) |
|
|
||||||
|
|
||||||
### Flows (`FLOWS_URL`, `FLOWS_INTERNAL_URL`)
|
|
||||||
|
|
||||||
`internal/adapters/http/flows/adapter.go`. Запросы (кроме `update-documents`) идут с `Authorization: Bearer <token>`; часть операций — с ретраями (экспоненциальный backoff).
|
|
||||||
|
|
||||||
| Метод | Путь | Назначение |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| POST | `{FLOWS_URL}/user-actions/` | Добавить действие в историю |
|
|
||||||
| PATCH | `{FLOWS_URL}/reviews/{reviewID}/approve/` | Утвердить review (со статусом/комментарием) |
|
|
||||||
| PATCH | `{FLOWS_URL}/reviews/{reviewID}/update-bundles/` | Обновить бандлы review |
|
|
||||||
| PATCH | `{FLOWS_INTERNAL_URL}/reviews/{reviewID}/update-documents/` | Обновить документы review (внутренний URL, без авторизации) |
|
|
||||||
| GET | `{FLOWS_URL}/reviews/{reviewID}/documents/` | История бандлов документов review |
|
|
||||||
|
|
||||||
### PDM (`PDM_URL`, `AUTH_HOST`) — не подключён
|
|
||||||
|
|
||||||
`internal/adapters/http/pdm/client.go`. Клиент реализован, но в текущей сборке нигде не инициализируется (см. примечание в конце). Для полноты — какие вызовы он делает:
|
|
||||||
|
|
||||||
| Метод | Путь | Назначение |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| GET | `{AUTH_HOST}/token/user/{userID}/` | Токен пользователя (Basic auth логин/пароль) |
|
|
||||||
| PUT | `{PDM_URL}/bundles/{bundleID}/marks` | Проставить маркировки бандлу |
|
|
||||||
|
|
||||||
### Workflows (`WORKFLOWS_HOST`, `AUTH_HOST`)
|
|
||||||
|
|
||||||
`internal/adapters/http/workflows/adapter.go` (resty). Используется воркером `split_pdf`.
|
|
||||||
|
|
||||||
| Метод | Путь | Назначение |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| POST | `{WORKFLOWS_HOST}/internal/v1/companies/{companyID}/workflows` | Создать workflow обработки/оптимизации PDF |
|
|
||||||
|
|
||||||
> Базовый URL resty-клиента установлен в `AUTH_HOST`, а адрес workflows подставляется полным (`WORKFLOWS_HOST`). В параметрах задач передаётся `django_host = AUTH_HOST`.
|
|
||||||
|
|
||||||
### Workspaces (`WORKSPACES_URL`)
|
|
||||||
|
|
||||||
`internal/adapters/http/workspaces/client.go`. Используется воркерами `copy`/`copyv2`.
|
|
||||||
|
|
||||||
| Метод | Путь | Назначение |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| POST | `{WORKSPACES_URL}/internal/v2/workspaces` | Создать рабочую область |
|
|
||||||
|
|
||||||
### System log (`SYSTEM_LOG_URL`)
|
|
||||||
|
|
||||||
`internal/adapters/http/system_log/client.go`. Используется воркерами `copy`, `copyv2`, `create_versions`, `create_versionsv2`.
|
|
||||||
|
|
||||||
| Метод | Путь | Назначение |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| POST | `{SYSTEM_LOG_URL}/api/v0/system_log` | Отправить пакет системных логов |
|
|
||||||
|
|
||||||
### Sarex backend (`SAREX_BACKEND_BASE_URL`)
|
|
||||||
|
|
||||||
`internal/adapters/sarexbackend/client.go` (resty). Используется HTTP-сервером при подписи (проверка MRPA). Токены проксируются из входящего запроса (`Authorization`, опц. `Identity`).
|
|
||||||
|
|
||||||
| Метод | Путь | Назначение |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| GET | `{SAREX_BACKEND_BASE_URL}/api/core/mrpa/{id}/` | Получить MRPA по id |
|
|
||||||
|
|
||||||
### Telegram Bot API (`TELEGRAM_TOKEN`, `TELEGRAM_ALERT_GROUP_ID`)
|
|
||||||
|
|
||||||
`internal/adapters/http/telegram/client.go` через `go-telegram-bot-api`. Отправка алертов в заданную группу при ошибках/паниках в задачах воркеров.
|
|
||||||
|
|
||||||
### RabbitMQ / AMQP (`AMQP_*`)
|
|
||||||
|
|
||||||
Подключение вида `amqp://{USER}:{PASSWORD}@{HOST}:{PORT}/{PATH_API}`.
|
|
||||||
|
|
||||||
| Адаптер | Назначение |
|
|
||||||
| --- | --- |
|
|
||||||
| `internal/adapters/amqp/markings` | Маркировка бандла и получение его хеш-суммы (RPC поверх временной очереди, `correlation_id`). Используется воркерами `markingsv2`/`copyv2` |
|
|
||||||
| `internal/adapters/amqp/rpc` | Общий RPC-клиент RabbitMQ (переподключение, вычисление хеш-сумм объектов) |
|
|
||||||
|
|
||||||
## Обработка ошибок
|
|
||||||
|
|
||||||
Каждый адаптер проверяет `StatusCode()` ответа и оборачивает не-`200 OK` в ошибку с телом ответа (`internal/errors`). Отдельно у sarexbackend маппинг: `404 → ErrNotFound`, `403 → ErrForbidden`, прочие → generic. Адаптеры flows и pdm выполняют ретраи с экспоненциальным backoff (до 5 попыток).
|
|
||||||
|
|
||||||
## Примечания
|
|
||||||
|
|
||||||
- **PDM-клиент не подключён.** `internal/adapters/http/pdm` реализован, а переменная `PDM_URL` присутствует в Helm-секрете, но `pdm.New(...)` не вызывается ни в одном бинарнике. Раздел оставлен для полноты; при фактическом использовании актуализируйте документ.
|
|
||||||
- Пути даны относительно базовых URL из окружения; итоговый URL = `<базовый адрес>` + `путь`.
|
|
||||||
15
apps/cde/base/backend-service.yaml
Normal file
15
apps/cde/base/backend-service.yaml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: cde-svc
|
||||||
|
namespace: faas
|
||||||
|
spec:
|
||||||
|
type: ClusterIP
|
||||||
|
selector:
|
||||||
|
app: cde
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
port: 80
|
||||||
|
targetPort: 8000
|
||||||
|
protocol: TCP
|
||||||
@ -1,120 +1,40 @@
|
|||||||
---
|
---
|
||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
apiVersion: apps/v1
|
||||||
kind: HelmRelease
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
name: cde-flowscallback
|
name: cde-flowscallback
|
||||||
namespace: cde
|
namespace: cde
|
||||||
|
labels:
|
||||||
|
app: cde-flowscallback
|
||||||
|
service: cde-flowscallback
|
||||||
spec:
|
spec:
|
||||||
interval: 10m
|
replicas: 1
|
||||||
|
selector:
|
||||||
chart:
|
matchLabels:
|
||||||
|
app: cde-flowscallback
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: cde-flowscallback
|
||||||
|
service: cde-flowscallback
|
||||||
spec:
|
spec:
|
||||||
chart: universal-chart
|
containers:
|
||||||
version: "0.1.9"
|
- name: cde-flowscallback
|
||||||
sourceRef:
|
image: cr.yandex/crp3ccidau046kdj8g9q/flowscallback-worker:prod_3.1.2
|
||||||
kind: HelmRepository
|
imagePullPolicy: IfNotPresent
|
||||||
name: yc-oci-charts
|
ports:
|
||||||
namespace: flux-system
|
- name: http
|
||||||
interval: 10m
|
containerPort: 8000
|
||||||
|
protocol: TCP
|
||||||
install:
|
env:
|
||||||
remediation:
|
- name: S3_IS_CONTOUR
|
||||||
retries: 3
|
value: "true"
|
||||||
|
envFrom:
|
||||||
upgrade:
|
- secretRef:
|
||||||
remediation:
|
name: cde-secret
|
||||||
retries: 3
|
|
||||||
|
|
||||||
values:
|
|
||||||
global:
|
|
||||||
env: _default
|
|
||||||
|
|
||||||
services:
|
|
||||||
cde-flowscallback:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: cde-vault
|
|
||||||
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/flowscallback-worker:preprod_4302d8f3
|
|
||||||
pullPolicy:
|
|
||||||
_default: IfNotPresent
|
|
||||||
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: cde-flowscallback
|
|
||||||
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
|
|
||||||
command:
|
|
||||||
_default: ["/bin/bash", "-lc"]
|
|
||||||
args:
|
|
||||||
_default:
|
|
||||||
- |
|
|
||||||
set -e
|
|
||||||
source /vault/secrets/cde-env
|
|
||||||
exec /worker
|
|
||||||
|
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
cpu:
|
cpu: "1"
|
||||||
_default: 500m
|
memory: 1Gi
|
||||||
memory:
|
imagePullSecrets:
|
||||||
_default: 1Gi
|
- name: regcred
|
||||||
|
|
||||||
probes:
|
|
||||||
liveness:
|
|
||||||
enabled: false
|
|
||||||
readiness:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: regcred
|
|
||||||
|
|
||||||
envs:
|
|
||||||
- name: S3_IS_CONTOUR
|
|
||||||
value:
|
|
||||||
_default: "true"
|
|
||||||
|
|
||||||
- name: IS_CONTOUR
|
|
||||||
value:
|
|
||||||
_default: "true"
|
|
||||||
|
|
||||||
podAnnotations:
|
|
||||||
_default:
|
|
||||||
traffic.sidecar.istio.io/excludeOutboundPorts: "8200"
|
|
||||||
vault.hashicorp.com/agent-init-first: "true"
|
|
||||||
vault.hashicorp.com/agent-inject: "true"
|
|
||||||
vault.hashicorp.com/agent-pre-populate-only: "true"
|
|
||||||
vault.hashicorp.com/auth-path: auth/kubernetes
|
|
||||||
vault.hashicorp.com/role: cde
|
|
||||||
vault.hashicorp.com/agent-inject-secret-cde-env: secrets/data/vault/apps/cde
|
|
||||||
vault.hashicorp.com/agent-inject-template-cde-env: |-
|
|
||||||
{{- with secret "secrets/data/vault/apps/cde" -}}
|
|
||||||
{{- range $k, $v := .Data.data }}
|
|
||||||
export {{ $k }}=$(printf '%b' {{ printf "%q" (printf "%v" $v) }})
|
|
||||||
{{- end }}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
commitSha: ""
|
|
||||||
gitlabUri: ""
|
|
||||||
gitlabJobUrl: ""
|
|
||||||
owner: ""
|
|
||||||
|
|||||||
@ -1,120 +1,40 @@
|
|||||||
---
|
---
|
||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
apiVersion: apps/v1
|
||||||
kind: HelmRelease
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
name: cde-splitpdf
|
name: cde-splitpdf
|
||||||
namespace: cde
|
namespace: cde
|
||||||
|
labels:
|
||||||
|
app: cde-splitpdf
|
||||||
|
service: cde-splitpdf
|
||||||
spec:
|
spec:
|
||||||
interval: 10m
|
replicas: 1
|
||||||
|
selector:
|
||||||
chart:
|
matchLabels:
|
||||||
|
app: cde-splitpdf
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: cde-splitpdf
|
||||||
|
service: cde-splitpdf
|
||||||
spec:
|
spec:
|
||||||
chart: universal-chart
|
containers:
|
||||||
version: "0.1.9"
|
- name: cde-splitpdf
|
||||||
sourceRef:
|
image: cr.yandex/crp3ccidau046kdj8g9q/splitpdf-worker:prod_3.1.2
|
||||||
kind: HelmRepository
|
imagePullPolicy: IfNotPresent
|
||||||
name: yc-oci-charts
|
ports:
|
||||||
namespace: flux-system
|
- name: http
|
||||||
interval: 10m
|
containerPort: 8000
|
||||||
|
protocol: TCP
|
||||||
install:
|
env:
|
||||||
remediation:
|
- name: S3_IS_CONTOUR
|
||||||
retries: 3
|
value: "true"
|
||||||
|
envFrom:
|
||||||
upgrade:
|
- secretRef:
|
||||||
remediation:
|
name: cde-secret
|
||||||
retries: 3
|
|
||||||
|
|
||||||
values:
|
|
||||||
global:
|
|
||||||
env: _default
|
|
||||||
|
|
||||||
services:
|
|
||||||
cde-splitpdf:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: cde-vault
|
|
||||||
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/splitpdf-worker:preprod_4302d8f3
|
|
||||||
pullPolicy:
|
|
||||||
_default: IfNotPresent
|
|
||||||
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: cde-splitpdf
|
|
||||||
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
|
|
||||||
command:
|
|
||||||
_default: ["/bin/bash", "-lc"]
|
|
||||||
args:
|
|
||||||
_default:
|
|
||||||
- |
|
|
||||||
set -e
|
|
||||||
source /vault/secrets/cde-env
|
|
||||||
exec /worker
|
|
||||||
|
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
cpu:
|
cpu: "1"
|
||||||
_default: 500m
|
memory: 1Gi
|
||||||
memory:
|
imagePullSecrets:
|
||||||
_default: 1Gi
|
- name: regcred
|
||||||
|
|
||||||
probes:
|
|
||||||
liveness:
|
|
||||||
enabled: false
|
|
||||||
readiness:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: regcred
|
|
||||||
|
|
||||||
envs:
|
|
||||||
- name: S3_IS_CONTOUR
|
|
||||||
value:
|
|
||||||
_default: "true"
|
|
||||||
|
|
||||||
- name: IS_CONTOUR
|
|
||||||
value:
|
|
||||||
_default: "true"
|
|
||||||
|
|
||||||
podAnnotations:
|
|
||||||
_default:
|
|
||||||
traffic.sidecar.istio.io/excludeOutboundPorts: "8200"
|
|
||||||
vault.hashicorp.com/agent-init-first: "true"
|
|
||||||
vault.hashicorp.com/agent-inject: "true"
|
|
||||||
vault.hashicorp.com/agent-pre-populate-only: "true"
|
|
||||||
vault.hashicorp.com/auth-path: auth/kubernetes
|
|
||||||
vault.hashicorp.com/role: cde
|
|
||||||
vault.hashicorp.com/agent-inject-secret-cde-env: secrets/data/vault/apps/cde
|
|
||||||
vault.hashicorp.com/agent-inject-template-cde-env: |-
|
|
||||||
{{- with secret "secrets/data/vault/apps/cde" -}}
|
|
||||||
{{- range $k, $v := .Data.data }}
|
|
||||||
export {{ $k }}=$(printf '%b' {{ printf "%q" (printf "%v" $v) }})
|
|
||||||
{{- end }}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
commitSha: ""
|
|
||||||
gitlabUri: ""
|
|
||||||
gitlabJobUrl: ""
|
|
||||||
owner: ""
|
|
||||||
|
|||||||
@ -1,120 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
|
||||||
kind: HelmRelease
|
|
||||||
metadata:
|
|
||||||
name: cde-worker-alert
|
|
||||||
namespace: cde
|
|
||||||
|
|
||||||
spec:
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
chart:
|
|
||||||
spec:
|
|
||||||
chart: universal-chart
|
|
||||||
version: "0.1.9"
|
|
||||||
sourceRef:
|
|
||||||
kind: HelmRepository
|
|
||||||
name: yc-oci-charts
|
|
||||||
namespace: flux-system
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
install:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
upgrade:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
values:
|
|
||||||
global:
|
|
||||||
env: _default
|
|
||||||
|
|
||||||
services:
|
|
||||||
cde-worker-alert:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: cde-vault
|
|
||||||
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/orchestrator:preprod_4302d8f3
|
|
||||||
pullPolicy:
|
|
||||||
_default: IfNotPresent
|
|
||||||
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: cde-worker-alert
|
|
||||||
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
|
|
||||||
command:
|
|
||||||
_default: ["/bin/bash", "-lc"]
|
|
||||||
args:
|
|
||||||
_default:
|
|
||||||
- |
|
|
||||||
set -e
|
|
||||||
source /vault/secrets/cde-env
|
|
||||||
exec /worker
|
|
||||||
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
cpu:
|
|
||||||
_default: 500m
|
|
||||||
memory:
|
|
||||||
_default: 1Gi
|
|
||||||
|
|
||||||
probes:
|
|
||||||
liveness:
|
|
||||||
enabled: false
|
|
||||||
readiness:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: regcred
|
|
||||||
|
|
||||||
envs:
|
|
||||||
- name: S3_IS_CONTOUR
|
|
||||||
value:
|
|
||||||
_default: "true"
|
|
||||||
|
|
||||||
- name: IS_CONTOUR
|
|
||||||
value:
|
|
||||||
_default: "true"
|
|
||||||
|
|
||||||
podAnnotations:
|
|
||||||
_default:
|
|
||||||
traffic.sidecar.istio.io/excludeOutboundPorts: "8200"
|
|
||||||
vault.hashicorp.com/agent-init-first: "true"
|
|
||||||
vault.hashicorp.com/agent-inject: "true"
|
|
||||||
vault.hashicorp.com/agent-pre-populate-only: "true"
|
|
||||||
vault.hashicorp.com/auth-path: auth/kubernetes
|
|
||||||
vault.hashicorp.com/role: cde
|
|
||||||
vault.hashicorp.com/agent-inject-secret-cde-env: secrets/data/vault/apps/cde
|
|
||||||
vault.hashicorp.com/agent-inject-template-cde-env: |-
|
|
||||||
{{- with secret "secrets/data/vault/apps/cde" -}}
|
|
||||||
{{- range $k, $v := .Data.data }}
|
|
||||||
export {{ $k }}=$(printf '%b' {{ printf "%q" (printf "%v" $v) }})
|
|
||||||
{{- end }}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
commitSha: ""
|
|
||||||
gitlabUri: ""
|
|
||||||
gitlabJobUrl: ""
|
|
||||||
owner: ""
|
|
||||||
@ -1,120 +1,40 @@
|
|||||||
---
|
---
|
||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
apiVersion: apps/v1
|
||||||
kind: HelmRelease
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
name: cde-worker-copy
|
name: cde-worker-copy
|
||||||
namespace: cde
|
namespace: cde
|
||||||
|
labels:
|
||||||
|
app: cde-worker-copy
|
||||||
|
service: cde-worker-copy
|
||||||
spec:
|
spec:
|
||||||
interval: 10m
|
replicas: 1
|
||||||
|
selector:
|
||||||
chart:
|
matchLabels:
|
||||||
|
app: cde-worker-copy
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: cde-worker-copy
|
||||||
|
service: cde-worker-copy
|
||||||
spec:
|
spec:
|
||||||
chart: universal-chart
|
containers:
|
||||||
version: "0.1.9"
|
- name: cde-worker-copy
|
||||||
sourceRef:
|
image: cr.yandex/crp3ccidau046kdj8g9q/copy-worker:preprod_fd483601
|
||||||
kind: HelmRepository
|
imagePullPolicy: IfNotPresent
|
||||||
name: yc-oci-charts
|
ports:
|
||||||
namespace: flux-system
|
- name: http
|
||||||
interval: 10m
|
containerPort: 8000
|
||||||
|
protocol: TCP
|
||||||
install:
|
env:
|
||||||
remediation:
|
- name: S3_IS_CONTOUR
|
||||||
retries: 3
|
value: "true"
|
||||||
|
envFrom:
|
||||||
upgrade:
|
- secretRef:
|
||||||
remediation:
|
name: cde-secret
|
||||||
retries: 3
|
|
||||||
|
|
||||||
values:
|
|
||||||
global:
|
|
||||||
env: _default
|
|
||||||
|
|
||||||
services:
|
|
||||||
cde-worker-copy:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: cde-vault
|
|
||||||
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/copy-worker:preprod_4302d8f3
|
|
||||||
pullPolicy:
|
|
||||||
_default: IfNotPresent
|
|
||||||
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: cde-worker-copy
|
|
||||||
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
|
|
||||||
command:
|
|
||||||
_default: ["/bin/bash", "-lc"]
|
|
||||||
args:
|
|
||||||
_default:
|
|
||||||
- |
|
|
||||||
set -e
|
|
||||||
source /vault/secrets/cde-env
|
|
||||||
exec /worker
|
|
||||||
|
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
cpu:
|
cpu: "1"
|
||||||
_default: "1"
|
memory: 1Gi
|
||||||
memory:
|
imagePullSecrets:
|
||||||
_default: 1Gi
|
- name: regcred
|
||||||
|
|
||||||
probes:
|
|
||||||
liveness:
|
|
||||||
enabled: false
|
|
||||||
readiness:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: regcred
|
|
||||||
|
|
||||||
envs:
|
|
||||||
- name: S3_IS_CONTOUR
|
|
||||||
value:
|
|
||||||
_default: "true"
|
|
||||||
|
|
||||||
- name: IS_CONTOUR
|
|
||||||
value:
|
|
||||||
_default: "true"
|
|
||||||
|
|
||||||
podAnnotations:
|
|
||||||
_default:
|
|
||||||
traffic.sidecar.istio.io/excludeOutboundPorts: "8200"
|
|
||||||
vault.hashicorp.com/agent-init-first: "true"
|
|
||||||
vault.hashicorp.com/agent-inject: "true"
|
|
||||||
vault.hashicorp.com/agent-pre-populate-only: "true"
|
|
||||||
vault.hashicorp.com/auth-path: auth/kubernetes
|
|
||||||
vault.hashicorp.com/role: cde
|
|
||||||
vault.hashicorp.com/agent-inject-secret-cde-env: secrets/data/vault/apps/cde
|
|
||||||
vault.hashicorp.com/agent-inject-template-cde-env: |-
|
|
||||||
{{- with secret "secrets/data/vault/apps/cde" -}}
|
|
||||||
{{- range $k, $v := .Data.data }}
|
|
||||||
export {{ $k }}=$(printf '%b' {{ printf "%q" (printf "%v" $v) }})
|
|
||||||
{{- end }}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
commitSha: ""
|
|
||||||
gitlabUri: ""
|
|
||||||
gitlabJobUrl: ""
|
|
||||||
owner: ""
|
|
||||||
|
|||||||
@ -1,120 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
|
||||||
kind: HelmRelease
|
|
||||||
metadata:
|
|
||||||
name: cde-worker-copyv2
|
|
||||||
namespace: cde
|
|
||||||
|
|
||||||
spec:
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
chart:
|
|
||||||
spec:
|
|
||||||
chart: universal-chart
|
|
||||||
version: "0.1.9"
|
|
||||||
sourceRef:
|
|
||||||
kind: HelmRepository
|
|
||||||
name: yc-oci-charts
|
|
||||||
namespace: flux-system
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
install:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
upgrade:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
values:
|
|
||||||
global:
|
|
||||||
env: _default
|
|
||||||
|
|
||||||
services:
|
|
||||||
cde-worker-copyv2:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: cde-vault
|
|
||||||
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/copyv2-worker:preprod_4302d8f3
|
|
||||||
pullPolicy:
|
|
||||||
_default: IfNotPresent
|
|
||||||
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: cde-worker-copyv2
|
|
||||||
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
|
|
||||||
command:
|
|
||||||
_default: ["/bin/bash", "-lc"]
|
|
||||||
args:
|
|
||||||
_default:
|
|
||||||
- |
|
|
||||||
set -e
|
|
||||||
source /vault/secrets/cde-env
|
|
||||||
exec /worker
|
|
||||||
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
cpu:
|
|
||||||
_default: "1"
|
|
||||||
memory:
|
|
||||||
_default: 1Gi
|
|
||||||
|
|
||||||
probes:
|
|
||||||
liveness:
|
|
||||||
enabled: false
|
|
||||||
readiness:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: regcred
|
|
||||||
|
|
||||||
envs:
|
|
||||||
- name: S3_IS_CONTOUR
|
|
||||||
value:
|
|
||||||
_default: "true"
|
|
||||||
|
|
||||||
- name: IS_CONTOUR
|
|
||||||
value:
|
|
||||||
_default: "true"
|
|
||||||
|
|
||||||
podAnnotations:
|
|
||||||
_default:
|
|
||||||
traffic.sidecar.istio.io/excludeOutboundPorts: "8200"
|
|
||||||
vault.hashicorp.com/agent-init-first: "true"
|
|
||||||
vault.hashicorp.com/agent-inject: "true"
|
|
||||||
vault.hashicorp.com/agent-pre-populate-only: "true"
|
|
||||||
vault.hashicorp.com/auth-path: auth/kubernetes
|
|
||||||
vault.hashicorp.com/role: cde
|
|
||||||
vault.hashicorp.com/agent-inject-secret-cde-env: secrets/data/vault/apps/cde
|
|
||||||
vault.hashicorp.com/agent-inject-template-cde-env: |-
|
|
||||||
{{- with secret "secrets/data/vault/apps/cde" -}}
|
|
||||||
{{- range $k, $v := .Data.data }}
|
|
||||||
export {{ $k }}=$(printf '%b' {{ printf "%q" (printf "%v" $v) }})
|
|
||||||
{{- end }}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
commitSha: ""
|
|
||||||
gitlabUri: ""
|
|
||||||
gitlabJobUrl: ""
|
|
||||||
owner: ""
|
|
||||||
@ -1,120 +1,40 @@
|
|||||||
---
|
---
|
||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
apiVersion: apps/v1
|
||||||
kind: HelmRelease
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
name: cde-worker-create-versions
|
name: cde-worker-create-versions
|
||||||
namespace: cde
|
namespace: cde
|
||||||
|
labels:
|
||||||
|
app: cde-worker-create-versions
|
||||||
|
service: cde-worker-create-versions
|
||||||
spec:
|
spec:
|
||||||
interval: 10m
|
replicas: 1
|
||||||
|
selector:
|
||||||
chart:
|
matchLabels:
|
||||||
|
app: cde-worker-create-versions
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: cde-worker-create-versions
|
||||||
|
service: cde-worker-create-versions
|
||||||
spec:
|
spec:
|
||||||
chart: universal-chart
|
containers:
|
||||||
version: "0.1.9"
|
- name: cde-worker-create-versions
|
||||||
sourceRef:
|
image: cr.yandex/crp3ccidau046kdj8g9q/createversions-worker:preprod_ec474ae7
|
||||||
kind: HelmRepository
|
imagePullPolicy: IfNotPresent
|
||||||
name: yc-oci-charts
|
ports:
|
||||||
namespace: flux-system
|
- name: http
|
||||||
interval: 10m
|
containerPort: 8000
|
||||||
|
protocol: TCP
|
||||||
install:
|
env:
|
||||||
remediation:
|
- name: S3_IS_CONTOUR
|
||||||
retries: 3
|
value: "true"
|
||||||
|
envFrom:
|
||||||
upgrade:
|
- secretRef:
|
||||||
remediation:
|
name: cde-secret
|
||||||
retries: 3
|
|
||||||
|
|
||||||
values:
|
|
||||||
global:
|
|
||||||
env: _default
|
|
||||||
|
|
||||||
services:
|
|
||||||
cde-worker-create-versions:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: cde-vault
|
|
||||||
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/createversions-worker:preprod_4302d8f3
|
|
||||||
pullPolicy:
|
|
||||||
_default: IfNotPresent
|
|
||||||
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: cde-worker-create-versions
|
|
||||||
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
|
|
||||||
command:
|
|
||||||
_default: ["/bin/bash", "-lc"]
|
|
||||||
args:
|
|
||||||
_default:
|
|
||||||
- |
|
|
||||||
set -e
|
|
||||||
source /vault/secrets/cde-env
|
|
||||||
exec /worker
|
|
||||||
|
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
cpu:
|
cpu: "1"
|
||||||
_default: 500m
|
memory: 1Gi
|
||||||
memory:
|
imagePullSecrets:
|
||||||
_default: 512Mi
|
- name: regcred
|
||||||
|
|
||||||
probes:
|
|
||||||
liveness:
|
|
||||||
enabled: false
|
|
||||||
readiness:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: regcred
|
|
||||||
|
|
||||||
envs:
|
|
||||||
- name: S3_IS_CONTOUR
|
|
||||||
value:
|
|
||||||
_default: "true"
|
|
||||||
|
|
||||||
- name: IS_CONTOUR
|
|
||||||
value:
|
|
||||||
_default: "true"
|
|
||||||
|
|
||||||
podAnnotations:
|
|
||||||
_default:
|
|
||||||
traffic.sidecar.istio.io/excludeOutboundPorts: "8200"
|
|
||||||
vault.hashicorp.com/agent-init-first: "true"
|
|
||||||
vault.hashicorp.com/agent-inject: "true"
|
|
||||||
vault.hashicorp.com/agent-pre-populate-only: "true"
|
|
||||||
vault.hashicorp.com/auth-path: auth/kubernetes
|
|
||||||
vault.hashicorp.com/role: cde
|
|
||||||
vault.hashicorp.com/agent-inject-secret-cde-env: secrets/data/vault/apps/cde
|
|
||||||
vault.hashicorp.com/agent-inject-template-cde-env: |-
|
|
||||||
{{- with secret "secrets/data/vault/apps/cde" -}}
|
|
||||||
{{- range $k, $v := .Data.data }}
|
|
||||||
export {{ $k }}=$(printf '%b' {{ printf "%q" (printf "%v" $v) }})
|
|
||||||
{{- end }}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
commitSha: ""
|
|
||||||
gitlabUri: ""
|
|
||||||
gitlabJobUrl: ""
|
|
||||||
owner: ""
|
|
||||||
|
|||||||
@ -1,120 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
|
||||||
kind: HelmRelease
|
|
||||||
metadata:
|
|
||||||
name: cde-worker-create-versionsv2
|
|
||||||
namespace: cde
|
|
||||||
|
|
||||||
spec:
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
chart:
|
|
||||||
spec:
|
|
||||||
chart: universal-chart
|
|
||||||
version: "0.1.9"
|
|
||||||
sourceRef:
|
|
||||||
kind: HelmRepository
|
|
||||||
name: yc-oci-charts
|
|
||||||
namespace: flux-system
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
install:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
upgrade:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
values:
|
|
||||||
global:
|
|
||||||
env: _default
|
|
||||||
|
|
||||||
services:
|
|
||||||
cde-worker-create-versionsv2:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: cde-vault
|
|
||||||
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/createversionsv2-worker:preprod_4302d8f3
|
|
||||||
pullPolicy:
|
|
||||||
_default: IfNotPresent
|
|
||||||
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: cde-worker-create-versionsv2
|
|
||||||
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
|
|
||||||
command:
|
|
||||||
_default: ["/bin/bash", "-lc"]
|
|
||||||
args:
|
|
||||||
_default:
|
|
||||||
- |
|
|
||||||
set -e
|
|
||||||
source /vault/secrets/cde-env
|
|
||||||
exec /worker
|
|
||||||
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
cpu:
|
|
||||||
_default: 500m
|
|
||||||
memory:
|
|
||||||
_default: 512Mi
|
|
||||||
|
|
||||||
probes:
|
|
||||||
liveness:
|
|
||||||
enabled: false
|
|
||||||
readiness:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: regcred
|
|
||||||
|
|
||||||
envs:
|
|
||||||
- name: S3_IS_CONTOUR
|
|
||||||
value:
|
|
||||||
_default: "true"
|
|
||||||
|
|
||||||
- name: IS_CONTOUR
|
|
||||||
value:
|
|
||||||
_default: "true"
|
|
||||||
|
|
||||||
podAnnotations:
|
|
||||||
_default:
|
|
||||||
traffic.sidecar.istio.io/excludeOutboundPorts: "8200"
|
|
||||||
vault.hashicorp.com/agent-init-first: "true"
|
|
||||||
vault.hashicorp.com/agent-inject: "true"
|
|
||||||
vault.hashicorp.com/agent-pre-populate-only: "true"
|
|
||||||
vault.hashicorp.com/auth-path: auth/kubernetes
|
|
||||||
vault.hashicorp.com/role: cde
|
|
||||||
vault.hashicorp.com/agent-inject-secret-cde-env: secrets/data/vault/apps/cde
|
|
||||||
vault.hashicorp.com/agent-inject-template-cde-env: |-
|
|
||||||
{{- with secret "secrets/data/vault/apps/cde" -}}
|
|
||||||
{{- range $k, $v := .Data.data }}
|
|
||||||
export {{ $k }}=$(printf '%b' {{ printf "%q" (printf "%v" $v) }})
|
|
||||||
{{- end }}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
commitSha: ""
|
|
||||||
gitlabUri: ""
|
|
||||||
gitlabJobUrl: ""
|
|
||||||
owner: ""
|
|
||||||
@ -1,120 +1,40 @@
|
|||||||
---
|
---
|
||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
apiVersion: apps/v1
|
||||||
kind: HelmRelease
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
name: cde-worker-markings
|
name: cde-worker-markings
|
||||||
namespace: cde
|
namespace: cde
|
||||||
|
labels:
|
||||||
|
app: cde-worker-markings
|
||||||
|
service: cde-worker-markings
|
||||||
spec:
|
spec:
|
||||||
interval: 10m
|
replicas: 1
|
||||||
|
selector:
|
||||||
chart:
|
matchLabels:
|
||||||
|
app: cde-worker-markings
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: cde-worker-markings
|
||||||
|
service: cde-worker-markings
|
||||||
spec:
|
spec:
|
||||||
chart: universal-chart
|
containers:
|
||||||
version: "0.1.9"
|
- name: cde-worker-markings
|
||||||
sourceRef:
|
image: cr.yandex/crp3ccidau046kdj8g9q/markings-worker:preprod_eb50f30e
|
||||||
kind: HelmRepository
|
imagePullPolicy: IfNotPresent
|
||||||
name: yc-oci-charts
|
ports:
|
||||||
namespace: flux-system
|
- name: http
|
||||||
interval: 10m
|
containerPort: 8000
|
||||||
|
protocol: TCP
|
||||||
install:
|
env:
|
||||||
remediation:
|
- name: S3_IS_CONTOUR
|
||||||
retries: 3
|
value: "true"
|
||||||
|
envFrom:
|
||||||
upgrade:
|
- secretRef:
|
||||||
remediation:
|
name: cde-secret
|
||||||
retries: 3
|
|
||||||
|
|
||||||
values:
|
|
||||||
global:
|
|
||||||
env: _default
|
|
||||||
|
|
||||||
services:
|
|
||||||
cde-worker-markings:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: cde-vault
|
|
||||||
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/markings-worker:preprod_4302d8f3
|
|
||||||
pullPolicy:
|
|
||||||
_default: IfNotPresent
|
|
||||||
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: cde-worker-markings
|
|
||||||
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
|
|
||||||
command:
|
|
||||||
_default: ["/bin/bash", "-lc"]
|
|
||||||
args:
|
|
||||||
_default:
|
|
||||||
- |
|
|
||||||
set -e
|
|
||||||
source /vault/secrets/cde-env
|
|
||||||
exec /worker
|
|
||||||
|
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
cpu:
|
cpu: "1"
|
||||||
_default: 500m
|
memory: 1Gi
|
||||||
memory:
|
imagePullSecrets:
|
||||||
_default: 512Mi
|
- name: regcred
|
||||||
|
|
||||||
probes:
|
|
||||||
liveness:
|
|
||||||
enabled: false
|
|
||||||
readiness:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: regcred
|
|
||||||
|
|
||||||
envs:
|
|
||||||
- name: S3_IS_CONTOUR
|
|
||||||
value:
|
|
||||||
_default: "true"
|
|
||||||
|
|
||||||
- name: IS_CONTOUR
|
|
||||||
value:
|
|
||||||
_default: "true"
|
|
||||||
|
|
||||||
podAnnotations:
|
|
||||||
_default:
|
|
||||||
traffic.sidecar.istio.io/excludeOutboundPorts: "8200"
|
|
||||||
vault.hashicorp.com/agent-init-first: "true"
|
|
||||||
vault.hashicorp.com/agent-inject: "true"
|
|
||||||
vault.hashicorp.com/agent-pre-populate-only: "true"
|
|
||||||
vault.hashicorp.com/auth-path: auth/kubernetes
|
|
||||||
vault.hashicorp.com/role: cde
|
|
||||||
vault.hashicorp.com/agent-inject-secret-cde-env: secrets/data/vault/apps/cde
|
|
||||||
vault.hashicorp.com/agent-inject-template-cde-env: |-
|
|
||||||
{{- with secret "secrets/data/vault/apps/cde" -}}
|
|
||||||
{{- range $k, $v := .Data.data }}
|
|
||||||
export {{ $k }}=$(printf '%b' {{ printf "%q" (printf "%v" $v) }})
|
|
||||||
{{- end }}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
commitSha: ""
|
|
||||||
gitlabUri: ""
|
|
||||||
gitlabJobUrl: ""
|
|
||||||
owner: ""
|
|
||||||
|
|||||||
@ -1,120 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
|
||||||
kind: HelmRelease
|
|
||||||
metadata:
|
|
||||||
name: cde-worker-markingsv2
|
|
||||||
namespace: cde
|
|
||||||
|
|
||||||
spec:
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
chart:
|
|
||||||
spec:
|
|
||||||
chart: universal-chart
|
|
||||||
version: "0.1.9"
|
|
||||||
sourceRef:
|
|
||||||
kind: HelmRepository
|
|
||||||
name: yc-oci-charts
|
|
||||||
namespace: flux-system
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
install:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
upgrade:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
values:
|
|
||||||
global:
|
|
||||||
env: _default
|
|
||||||
|
|
||||||
services:
|
|
||||||
cde-worker-markingsv2:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: cde-vault
|
|
||||||
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/markingsv2-worker:preprod_4302d8f3
|
|
||||||
pullPolicy:
|
|
||||||
_default: IfNotPresent
|
|
||||||
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: cde-worker-markingsv2
|
|
||||||
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
|
|
||||||
command:
|
|
||||||
_default: ["/bin/bash", "-lc"]
|
|
||||||
args:
|
|
||||||
_default:
|
|
||||||
- |
|
|
||||||
set -e
|
|
||||||
source /vault/secrets/cde-env
|
|
||||||
exec /worker
|
|
||||||
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
cpu:
|
|
||||||
_default: 500m
|
|
||||||
memory:
|
|
||||||
_default: 512Mi
|
|
||||||
|
|
||||||
probes:
|
|
||||||
liveness:
|
|
||||||
enabled: false
|
|
||||||
readiness:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: regcred
|
|
||||||
|
|
||||||
envs:
|
|
||||||
- name: S3_IS_CONTOUR
|
|
||||||
value:
|
|
||||||
_default: "true"
|
|
||||||
|
|
||||||
- name: IS_CONTOUR
|
|
||||||
value:
|
|
||||||
_default: "true"
|
|
||||||
|
|
||||||
podAnnotations:
|
|
||||||
_default:
|
|
||||||
traffic.sidecar.istio.io/excludeOutboundPorts: "8200"
|
|
||||||
vault.hashicorp.com/agent-init-first: "true"
|
|
||||||
vault.hashicorp.com/agent-inject: "true"
|
|
||||||
vault.hashicorp.com/agent-pre-populate-only: "true"
|
|
||||||
vault.hashicorp.com/auth-path: auth/kubernetes
|
|
||||||
vault.hashicorp.com/role: cde
|
|
||||||
vault.hashicorp.com/agent-inject-secret-cde-env: secrets/data/vault/apps/cde
|
|
||||||
vault.hashicorp.com/agent-inject-template-cde-env: |-
|
|
||||||
{{- with secret "secrets/data/vault/apps/cde" -}}
|
|
||||||
{{- range $k, $v := .Data.data }}
|
|
||||||
export {{ $k }}=$(printf '%b' {{ printf "%q" (printf "%v" $v) }})
|
|
||||||
{{- end }}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
commitSha: ""
|
|
||||||
gitlabUri: ""
|
|
||||||
gitlabJobUrl: ""
|
|
||||||
owner: ""
|
|
||||||
@ -1,120 +1,40 @@
|
|||||||
---
|
---
|
||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
apiVersion: apps/v1
|
||||||
kind: HelmRelease
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
name: cde-worker-sign
|
name: cde-worker-sign
|
||||||
namespace: cde
|
namespace: cde
|
||||||
|
labels:
|
||||||
|
app: cde-worker-sign
|
||||||
|
service: cde-worker-sign
|
||||||
spec:
|
spec:
|
||||||
interval: 10m
|
replicas: 1
|
||||||
|
selector:
|
||||||
chart:
|
matchLabels:
|
||||||
|
app: cde-worker-sign
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: cde-worker-sign
|
||||||
|
service: cde-worker-sign
|
||||||
spec:
|
spec:
|
||||||
chart: universal-chart
|
containers:
|
||||||
version: "0.1.9"
|
- name: cde-worker-sign
|
||||||
sourceRef:
|
image: cr.yandex/crp3ccidau046kdj8g9q/sign-worker:preprod_fd483601
|
||||||
kind: HelmRepository
|
imagePullPolicy: IfNotPresent
|
||||||
name: yc-oci-charts
|
ports:
|
||||||
namespace: flux-system
|
- name: http
|
||||||
interval: 10m
|
containerPort: 8000
|
||||||
|
protocol: TCP
|
||||||
install:
|
env:
|
||||||
remediation:
|
- name: S3_IS_CONTOUR
|
||||||
retries: 3
|
value: "true"
|
||||||
|
envFrom:
|
||||||
upgrade:
|
- secretRef:
|
||||||
remediation:
|
name: cde-secret
|
||||||
retries: 3
|
|
||||||
|
|
||||||
values:
|
|
||||||
global:
|
|
||||||
env: _default
|
|
||||||
|
|
||||||
services:
|
|
||||||
cde-worker-sign:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: cde-vault
|
|
||||||
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/sign-worker:preprod_4302d8f3
|
|
||||||
pullPolicy:
|
|
||||||
_default: IfNotPresent
|
|
||||||
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: cde-worker-sign
|
|
||||||
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
|
|
||||||
command:
|
|
||||||
_default: ["/bin/bash", "-lc"]
|
|
||||||
args:
|
|
||||||
_default:
|
|
||||||
- |
|
|
||||||
set -e
|
|
||||||
source /vault/secrets/cde-env
|
|
||||||
exec /worker
|
|
||||||
|
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
cpu:
|
cpu: "1"
|
||||||
_default: 500m
|
memory: 1Gi
|
||||||
memory:
|
imagePullSecrets:
|
||||||
_default: 512Mi
|
- name: regcred
|
||||||
|
|
||||||
probes:
|
|
||||||
liveness:
|
|
||||||
enabled: false
|
|
||||||
readiness:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: regcred
|
|
||||||
|
|
||||||
envs:
|
|
||||||
- name: S3_IS_CONTOUR
|
|
||||||
value:
|
|
||||||
_default: "true"
|
|
||||||
|
|
||||||
- name: IS_CONTOUR
|
|
||||||
value:
|
|
||||||
_default: "true"
|
|
||||||
|
|
||||||
podAnnotations:
|
|
||||||
_default:
|
|
||||||
traffic.sidecar.istio.io/excludeOutboundPorts: "8200"
|
|
||||||
vault.hashicorp.com/agent-init-first: "true"
|
|
||||||
vault.hashicorp.com/agent-inject: "true"
|
|
||||||
vault.hashicorp.com/agent-pre-populate-only: "true"
|
|
||||||
vault.hashicorp.com/auth-path: auth/kubernetes
|
|
||||||
vault.hashicorp.com/role: cde
|
|
||||||
vault.hashicorp.com/agent-inject-secret-cde-env: secrets/data/vault/apps/cde
|
|
||||||
vault.hashicorp.com/agent-inject-template-cde-env: |-
|
|
||||||
{{- with secret "secrets/data/vault/apps/cde" -}}
|
|
||||||
{{- range $k, $v := .Data.data }}
|
|
||||||
export {{ $k }}=$(printf '%b' {{ printf "%q" (printf "%v" $v) }})
|
|
||||||
{{- end }}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
commitSha: ""
|
|
||||||
gitlabUri: ""
|
|
||||||
gitlabJobUrl: ""
|
|
||||||
owner: ""
|
|
||||||
|
|||||||
@ -1,120 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
|
||||||
kind: HelmRelease
|
|
||||||
metadata:
|
|
||||||
name: cde-worker-signv2
|
|
||||||
namespace: cde
|
|
||||||
|
|
||||||
spec:
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
chart:
|
|
||||||
spec:
|
|
||||||
chart: universal-chart
|
|
||||||
version: "0.1.9"
|
|
||||||
sourceRef:
|
|
||||||
kind: HelmRepository
|
|
||||||
name: yc-oci-charts
|
|
||||||
namespace: flux-system
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
install:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
upgrade:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
values:
|
|
||||||
global:
|
|
||||||
env: _default
|
|
||||||
|
|
||||||
services:
|
|
||||||
cde-worker-signv2:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: cde-vault
|
|
||||||
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/signv2-worker:preprod_4302d8f3
|
|
||||||
pullPolicy:
|
|
||||||
_default: IfNotPresent
|
|
||||||
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: cde-worker-signv2
|
|
||||||
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
|
|
||||||
command:
|
|
||||||
_default: ["/bin/bash", "-lc"]
|
|
||||||
args:
|
|
||||||
_default:
|
|
||||||
- |
|
|
||||||
set -e
|
|
||||||
source /vault/secrets/cde-env
|
|
||||||
exec /worker
|
|
||||||
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
cpu:
|
|
||||||
_default: 500m
|
|
||||||
memory:
|
|
||||||
_default: 512Mi
|
|
||||||
|
|
||||||
probes:
|
|
||||||
liveness:
|
|
||||||
enabled: false
|
|
||||||
readiness:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: regcred
|
|
||||||
|
|
||||||
envs:
|
|
||||||
- name: S3_IS_CONTOUR
|
|
||||||
value:
|
|
||||||
_default: "true"
|
|
||||||
|
|
||||||
- name: IS_CONTOUR
|
|
||||||
value:
|
|
||||||
_default: "true"
|
|
||||||
|
|
||||||
podAnnotations:
|
|
||||||
_default:
|
|
||||||
traffic.sidecar.istio.io/excludeOutboundPorts: "8200"
|
|
||||||
vault.hashicorp.com/agent-init-first: "true"
|
|
||||||
vault.hashicorp.com/agent-inject: "true"
|
|
||||||
vault.hashicorp.com/agent-pre-populate-only: "true"
|
|
||||||
vault.hashicorp.com/auth-path: auth/kubernetes
|
|
||||||
vault.hashicorp.com/role: cde
|
|
||||||
vault.hashicorp.com/agent-inject-secret-cde-env: secrets/data/vault/apps/cde
|
|
||||||
vault.hashicorp.com/agent-inject-template-cde-env: |-
|
|
||||||
{{- with secret "secrets/data/vault/apps/cde" -}}
|
|
||||||
{{- range $k, $v := .Data.data }}
|
|
||||||
export {{ $k }}=$(printf '%b' {{ printf "%q" (printf "%v" $v) }})
|
|
||||||
{{- end }}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
commitSha: ""
|
|
||||||
gitlabUri: ""
|
|
||||||
gitlabJobUrl: ""
|
|
||||||
owner: ""
|
|
||||||
@ -1,120 +1,40 @@
|
|||||||
---
|
---
|
||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
apiVersion: apps/v1
|
||||||
kind: HelmRelease
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
name: cde-worker-update-bundles
|
name: cde-worker-update-bundles
|
||||||
namespace: cde
|
namespace: cde
|
||||||
|
labels:
|
||||||
|
app: cde-worker-update-bundles
|
||||||
|
service: cde-worker-update-bundles
|
||||||
spec:
|
spec:
|
||||||
interval: 10m
|
replicas: 1
|
||||||
|
selector:
|
||||||
chart:
|
matchLabels:
|
||||||
|
app: cde-worker-update-bundles
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: cde-worker-update-bundles
|
||||||
|
service: cde-worker-update-bundles
|
||||||
spec:
|
spec:
|
||||||
chart: universal-chart
|
containers:
|
||||||
version: "0.1.9"
|
- name: cde-worker-update-bundles
|
||||||
sourceRef:
|
image: cr.yandex/crp3ccidau046kdj8g9q/updatebundles-worker:prod_3.1.2
|
||||||
kind: HelmRepository
|
imagePullPolicy: IfNotPresent
|
||||||
name: yc-oci-charts
|
ports:
|
||||||
namespace: flux-system
|
- name: http
|
||||||
interval: 10m
|
containerPort: 8000
|
||||||
|
protocol: TCP
|
||||||
install:
|
env:
|
||||||
remediation:
|
- name: S3_IS_CONTOUR
|
||||||
retries: 3
|
value: "true"
|
||||||
|
envFrom:
|
||||||
upgrade:
|
- secretRef:
|
||||||
remediation:
|
name: cde-secret
|
||||||
retries: 3
|
|
||||||
|
|
||||||
values:
|
|
||||||
global:
|
|
||||||
env: _default
|
|
||||||
|
|
||||||
services:
|
|
||||||
cde-worker-update-bundles:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: cde-vault
|
|
||||||
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/updatebundles-worker:preprod_4302d8f3
|
|
||||||
pullPolicy:
|
|
||||||
_default: IfNotPresent
|
|
||||||
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: cde-worker-update-bundles
|
|
||||||
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
|
|
||||||
command:
|
|
||||||
_default: ["/bin/bash", "-lc"]
|
|
||||||
args:
|
|
||||||
_default:
|
|
||||||
- |
|
|
||||||
set -e
|
|
||||||
source /vault/secrets/cde-env
|
|
||||||
exec /worker
|
|
||||||
|
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
cpu:
|
cpu: "1"
|
||||||
_default: 500m
|
memory: 1Gi
|
||||||
memory:
|
imagePullSecrets:
|
||||||
_default: 512Mi
|
- name: regcred
|
||||||
|
|
||||||
probes:
|
|
||||||
liveness:
|
|
||||||
enabled: false
|
|
||||||
readiness:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: regcred
|
|
||||||
|
|
||||||
envs:
|
|
||||||
- name: S3_IS_CONTOUR
|
|
||||||
value:
|
|
||||||
_default: "true"
|
|
||||||
|
|
||||||
- name: IS_CONTOUR
|
|
||||||
value:
|
|
||||||
_default: "true"
|
|
||||||
|
|
||||||
podAnnotations:
|
|
||||||
_default:
|
|
||||||
traffic.sidecar.istio.io/excludeOutboundPorts: "8200"
|
|
||||||
vault.hashicorp.com/agent-init-first: "true"
|
|
||||||
vault.hashicorp.com/agent-inject: "true"
|
|
||||||
vault.hashicorp.com/agent-pre-populate-only: "true"
|
|
||||||
vault.hashicorp.com/auth-path: auth/kubernetes
|
|
||||||
vault.hashicorp.com/role: cde
|
|
||||||
vault.hashicorp.com/agent-inject-secret-cde-env: secrets/data/vault/apps/cde
|
|
||||||
vault.hashicorp.com/agent-inject-template-cde-env: |-
|
|
||||||
{{- with secret "secrets/data/vault/apps/cde" -}}
|
|
||||||
{{- range $k, $v := .Data.data }}
|
|
||||||
export {{ $k }}=$(printf '%b' {{ printf "%q" (printf "%v" $v) }})
|
|
||||||
{{- end }}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
commitSha: ""
|
|
||||||
gitlabUri: ""
|
|
||||||
gitlabJobUrl: ""
|
|
||||||
owner: ""
|
|
||||||
|
|||||||
@ -1,139 +1,40 @@
|
|||||||
---
|
---
|
||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
apiVersion: apps/v1
|
||||||
kind: HelmRelease
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
name: cde
|
name: cde
|
||||||
namespace: cde
|
namespace: cde
|
||||||
|
labels:
|
||||||
|
app: cde
|
||||||
|
service: cde
|
||||||
spec:
|
spec:
|
||||||
interval: 10m
|
replicas: 1
|
||||||
|
selector:
|
||||||
chart:
|
matchLabels:
|
||||||
|
app: cde
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: cde
|
||||||
|
service: cde
|
||||||
spec:
|
spec:
|
||||||
chart: universal-chart
|
containers:
|
||||||
version: "0.1.9"
|
- name: api
|
||||||
sourceRef:
|
image: cr.yandex/crp3ccidau046kdj8g9q/cde:preprod_ec474ae7
|
||||||
kind: HelmRepository
|
imagePullPolicy: IfNotPresent
|
||||||
name: yc-oci-charts
|
ports:
|
||||||
namespace: flux-system
|
- name: http
|
||||||
interval: 10m
|
containerPort: 8000
|
||||||
|
protocol: TCP
|
||||||
install:
|
env:
|
||||||
remediation:
|
- name: S3_IS_CONTOUR
|
||||||
retries: 3
|
value: "true"
|
||||||
|
envFrom:
|
||||||
upgrade:
|
- secretRef:
|
||||||
remediation:
|
name: cde-secret
|
||||||
retries: 3
|
|
||||||
|
|
||||||
values:
|
|
||||||
global:
|
|
||||||
env: _default
|
|
||||||
|
|
||||||
services:
|
|
||||||
cde:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: cde-vault
|
|
||||||
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/cde:preprod_4302d8f3
|
|
||||||
pullPolicy:
|
|
||||||
_default: IfNotPresent
|
|
||||||
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: cde
|
|
||||||
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
|
|
||||||
command:
|
|
||||||
_default: ["/bin/bash", "-lc"]
|
|
||||||
args:
|
|
||||||
_default:
|
|
||||||
- |
|
|
||||||
set -e
|
|
||||||
source /vault/secrets/cde-env
|
|
||||||
exec /http
|
|
||||||
|
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
cpu:
|
cpu: "1"
|
||||||
_default: 500m
|
memory: 1Gi
|
||||||
memory:
|
imagePullSecrets:
|
||||||
_default: 512Mi
|
- name: regcred
|
||||||
|
|
||||||
probes:
|
|
||||||
liveness:
|
|
||||||
enabled: false
|
|
||||||
readiness:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
service:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: cde-svc
|
|
||||||
|
|
||||||
type:
|
|
||||||
_default: ClusterIP
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 80
|
|
||||||
|
|
||||||
targetPort:
|
|
||||||
_default: 8080
|
|
||||||
|
|
||||||
portName:
|
|
||||||
_default: http
|
|
||||||
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: regcred
|
|
||||||
|
|
||||||
envs:
|
|
||||||
- name: SAREX_BACKEND_BASE_URL
|
|
||||||
value:
|
|
||||||
_default: "https://lk.sarex.io"
|
|
||||||
|
|
||||||
- name: S3_IS_CONTOUR
|
|
||||||
value:
|
|
||||||
_default: "true"
|
|
||||||
|
|
||||||
- name: IS_CONTOUR
|
|
||||||
value:
|
|
||||||
_default: "true"
|
|
||||||
|
|
||||||
podAnnotations:
|
|
||||||
_default:
|
|
||||||
traffic.sidecar.istio.io/excludeOutboundPorts: "8200"
|
|
||||||
vault.hashicorp.com/agent-init-first: "true"
|
|
||||||
vault.hashicorp.com/agent-inject: "true"
|
|
||||||
vault.hashicorp.com/agent-pre-populate-only: "true"
|
|
||||||
vault.hashicorp.com/auth-path: auth/kubernetes
|
|
||||||
vault.hashicorp.com/role: cde
|
|
||||||
vault.hashicorp.com/agent-inject-secret-cde-env: secrets/data/vault/apps/cde
|
|
||||||
vault.hashicorp.com/agent-inject-template-cde-env: |-
|
|
||||||
{{- with secret "secrets/data/vault/apps/cde" -}}
|
|
||||||
{{- range $k, $v := .Data.data }}
|
|
||||||
export {{ $k }}=$(printf '%b' {{ printf "%q" (printf "%v" $v) }})
|
|
||||||
{{- end }}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
commitSha: ""
|
|
||||||
gitlabUri: ""
|
|
||||||
gitlabJobUrl: ""
|
|
||||||
owner: ""
|
|
||||||
|
|||||||
@ -6,14 +6,10 @@ resources:
|
|||||||
- namespace.yaml
|
- namespace.yaml
|
||||||
- cde.yaml
|
- cde.yaml
|
||||||
- cde-splitpdf.yaml
|
- cde-splitpdf.yaml
|
||||||
|
- backend-service.yaml
|
||||||
- cde-flowscallback.yaml
|
- cde-flowscallback.yaml
|
||||||
- cde-worker-alert.yaml
|
|
||||||
- cde-worker-copy.yaml
|
- cde-worker-copy.yaml
|
||||||
- cde-worker-copyv2.yaml
|
|
||||||
- cde-worker-create-versions.yaml
|
- cde-worker-create-versions.yaml
|
||||||
- cde-worker-create-versionsv2.yaml
|
|
||||||
- cde-worker-markings.yaml
|
- cde-worker-markings.yaml
|
||||||
- cde-worker-markingsv2.yaml
|
|
||||||
- cde-worker-sign.yaml
|
- cde-worker-sign.yaml
|
||||||
- cde-worker-signv2.yaml
|
- cde-worker-update-bundles.yaml
|
||||||
- cde-worker-update-bundles.yaml
|
|
||||||
@ -5,4 +5,3 @@ metadata:
|
|||||||
name: cde
|
name: cde
|
||||||
labels:
|
labels:
|
||||||
istio-injection: enabled
|
istio-injection: enabled
|
||||||
security.deckhouse.io/pod-policy: privileged
|
|
||||||
@ -1,612 +0,0 @@
|
|||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
|
||||||
kind: HelmRelease
|
|
||||||
metadata:
|
|
||||||
name: cde
|
|
||||||
namespace: orchestrator
|
|
||||||
|
|
||||||
spec:
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
chart:
|
|
||||||
spec:
|
|
||||||
chart: universal-chart
|
|
||||||
version: "0.1.7"
|
|
||||||
sourceRef:
|
|
||||||
kind: HelmRepository
|
|
||||||
name: yc-oci-charts
|
|
||||||
namespace: flux-system
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
install:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
upgrade:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
values:
|
|
||||||
global:
|
|
||||||
env: _default
|
|
||||||
|
|
||||||
services:
|
|
||||||
cde:
|
|
||||||
enabled: true
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
name:
|
|
||||||
_default: cde
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
probes:
|
|
||||||
liveness:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
type:
|
|
||||||
_default: tcpSocket
|
|
||||||
tcpSocket:
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
initialDelaySeconds:
|
|
||||||
_default: 15
|
|
||||||
periodSeconds:
|
|
||||||
_default: 10
|
|
||||||
readiness:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
type:
|
|
||||||
_default: tcpSocket
|
|
||||||
tcpSocket:
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
initialDelaySeconds:
|
|
||||||
_default: 15
|
|
||||||
periodSeconds:
|
|
||||||
_default: 10
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/orchestrator:latest
|
|
||||||
pullPolicy:
|
|
||||||
_default: Always
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
stage: true
|
|
||||||
preprod: true
|
|
||||||
production: false
|
|
||||||
name:
|
|
||||||
_default: dockerhub
|
|
||||||
service:
|
|
||||||
enabled: true
|
|
||||||
name:
|
|
||||||
_default: cde
|
|
||||||
type:
|
|
||||||
_default: ClusterIP
|
|
||||||
portName:
|
|
||||||
_default: http
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
targetPort:
|
|
||||||
_default: http
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: cde
|
|
||||||
automountServiceAccountToken:
|
|
||||||
_default: true
|
|
||||||
secretEnvs: &cde_secret_envs
|
|
||||||
- name: ENVIRONMENT
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: ENVIRONMENT
|
|
||||||
- name: LOG_LEVEL
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: LOG_LEVEL
|
|
||||||
- name: ZEEBE_GATEWAY
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: ZEEBE_GATEWAY
|
|
||||||
- name: DATABASE_URL
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: DATABASE_URL
|
|
||||||
- name: S3_ENDPOINT_URL
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: S3_ENDPOINT_URL
|
|
||||||
- name: S3_ACCESS_KEY_ID
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: S3_ACCESS_KEY_ID
|
|
||||||
- name: S3_SECRET_ACCESS_KEY
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: S3_SECRET_ACCESS_KEY
|
|
||||||
- name: PUBLIC_KEY
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: PUBLIC_KEY
|
|
||||||
- name: PDM_URL
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: PDM_URL
|
|
||||||
- name: FLOWS_URL
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: FLOWS_URL
|
|
||||||
- name: USERNAME
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: USERNAME
|
|
||||||
- name: PASSWORD
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: PASSWORD
|
|
||||||
- name: CAMUNDA_PROCESS_DEFINITION_ID
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: CAMUNDA_PROCESS_DEFINITION_ID
|
|
||||||
- name: OPERATE_URL
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: OPERATE_URL
|
|
||||||
- name: CAMUNDA_KEYCLOAK_URL
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: CAMUNDA_KEYCLOAK_URL
|
|
||||||
- name: CAMUNDA_CLIENT_ID
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: CAMUNDA_CLIENT_ID
|
|
||||||
- name: CAMUNDA_CLIENT_SECRET
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: CAMUNDA_CLIENT_SECRET
|
|
||||||
- name: WORKFLOWS_HOST
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: WORKFLOWS_HOST
|
|
||||||
- name: WORKSPACES_URL
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: WORKSPACES_URL
|
|
||||||
- name: AUTH_HOST
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: AUTH_HOST
|
|
||||||
- name: TELEGRAM_ALERT_GROUP_ID
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: TELEGRAM_ALERT_GROUP_ID
|
|
||||||
- name: TELEGRAM_TOKEN
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: TELEGRAM_TOKEN
|
|
||||||
- name: IS_CONTOUR
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: IS_CONTOUR
|
|
||||||
- name: AMQP_HOST
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: AMQP_HOST
|
|
||||||
- name: AMQP_PORT
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: AMQP_PORT
|
|
||||||
- name: AMQP_USER
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: AMQP_USER
|
|
||||||
- name: AMQP_PASSWORD
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: AMQP_PASSWORD
|
|
||||||
- name: AMQP_PATH_API
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: AMQP_PATH_API
|
|
||||||
cde-worker-copy:
|
|
||||||
enabled: true
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
name:
|
|
||||||
_default: cde-worker-copy
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
preprod: 2
|
|
||||||
production: 2
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/copy-worker:latest
|
|
||||||
pullPolicy:
|
|
||||||
_default: Always
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
stage: true
|
|
||||||
preprod: true
|
|
||||||
production: false
|
|
||||||
name:
|
|
||||||
_default: dockerhub
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
name:
|
|
||||||
_default: cde
|
|
||||||
secretEnvs: *cde_secret_envs
|
|
||||||
cde-worker-copyv2:
|
|
||||||
enabled: true
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
name:
|
|
||||||
_default: cde-worker-copyv2
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
preprod: 2
|
|
||||||
production: 2
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/copyv2-worker:latest
|
|
||||||
pullPolicy:
|
|
||||||
_default: Always
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
stage: true
|
|
||||||
preprod: true
|
|
||||||
production: false
|
|
||||||
name:
|
|
||||||
_default: dockerhub
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
name:
|
|
||||||
_default: cde
|
|
||||||
secretEnvs: *cde_secret_envs
|
|
||||||
cde-worker-markings:
|
|
||||||
enabled: true
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
name:
|
|
||||||
_default: cde-worker-markings
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
preprod: 2
|
|
||||||
production: 2
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/markings-worker:latest
|
|
||||||
pullPolicy:
|
|
||||||
_default: Always
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
stage: true
|
|
||||||
preprod: true
|
|
||||||
production: false
|
|
||||||
name:
|
|
||||||
_default: dockerhub
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
name:
|
|
||||||
_default: cde
|
|
||||||
secretEnvs: *cde_secret_envs
|
|
||||||
cde-worker-markingsv2:
|
|
||||||
enabled: true
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
name:
|
|
||||||
_default: cde-worker-markingsv2
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
preprod: 2
|
|
||||||
production: 2
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/markingsv2-worker:latest
|
|
||||||
pullPolicy:
|
|
||||||
_default: Always
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
stage: true
|
|
||||||
preprod: true
|
|
||||||
production: false
|
|
||||||
name:
|
|
||||||
_default: dockerhub
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
name:
|
|
||||||
_default: cde
|
|
||||||
secretEnvs: *cde_secret_envs
|
|
||||||
cde-worker-sign:
|
|
||||||
enabled: true
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
name:
|
|
||||||
_default: cde-worker-sign
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/sign-worker:latest
|
|
||||||
pullPolicy:
|
|
||||||
_default: Always
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
stage: true
|
|
||||||
preprod: true
|
|
||||||
production: false
|
|
||||||
name:
|
|
||||||
_default: dockerhub
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
name:
|
|
||||||
_default: cde
|
|
||||||
cde-worker-signv2:
|
|
||||||
enabled: true
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
name:
|
|
||||||
_default: cde-worker-signv2
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/signv2-worker:latest
|
|
||||||
pullPolicy:
|
|
||||||
_default: Always
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
stage: true
|
|
||||||
preprod: true
|
|
||||||
production: false
|
|
||||||
name:
|
|
||||||
_default: dockerhub
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
name:
|
|
||||||
_default: cde
|
|
||||||
secretEnvs: *cde_secret_envs
|
|
||||||
cde-flowscallback:
|
|
||||||
enabled: true
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
name:
|
|
||||||
_default: cde-flowscallback
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/flowscallback-worker:latest
|
|
||||||
pullPolicy:
|
|
||||||
_default: Always
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
stage: true
|
|
||||||
preprod: true
|
|
||||||
production: false
|
|
||||||
name:
|
|
||||||
_default: dockerhub
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
name:
|
|
||||||
_default: cde
|
|
||||||
secretEnvs: *cde_secret_envs
|
|
||||||
cde-splitpdf:
|
|
||||||
enabled: true
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
name:
|
|
||||||
_default: cde-splitpdf
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/splitpdf-worker:latest
|
|
||||||
pullPolicy:
|
|
||||||
_default: Always
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
stage: true
|
|
||||||
preprod: true
|
|
||||||
production: false
|
|
||||||
name:
|
|
||||||
_default: dockerhub
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
name:
|
|
||||||
_default: cde
|
|
||||||
cde-worker-update-bundles:
|
|
||||||
enabled: true
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
name:
|
|
||||||
_default: cde-worker-update-bundles
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/updatebundles-worker:latest
|
|
||||||
pullPolicy:
|
|
||||||
_default: Always
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
production: true
|
|
||||||
name:
|
|
||||||
_default: dockerhub
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
name:
|
|
||||||
_default: cde
|
|
||||||
cde-worker-create-versions:
|
|
||||||
enabled: true
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
name:
|
|
||||||
_default: cde-worker-create-versions
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/createversions-worker:latest
|
|
||||||
pullPolicy:
|
|
||||||
_default: Always
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
production: true
|
|
||||||
name:
|
|
||||||
_default: dockerhub
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
name:
|
|
||||||
_default: cde
|
|
||||||
secretEnvs: *cde_secret_envs
|
|
||||||
cde-worker-create-versionsv2:
|
|
||||||
enabled: true
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
name:
|
|
||||||
_default: cde-worker-create-versionsv2
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/createversionsv2-worker:latest
|
|
||||||
pullPolicy:
|
|
||||||
_default: Always
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
production: true
|
|
||||||
name:
|
|
||||||
_default: dockerhub
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
name:
|
|
||||||
_default: cde
|
|
||||||
secretEnvs: *cde_secret_envs
|
|
||||||
cde-worker-alert:
|
|
||||||
enabled: true
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
name:
|
|
||||||
_default: cde-worker-alert
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/orchestrator:latest
|
|
||||||
pullPolicy:
|
|
||||||
_default: Always
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
stage: true
|
|
||||||
preprod: true
|
|
||||||
production: false
|
|
||||||
name:
|
|
||||||
_default: dockerhub
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
name:
|
|
||||||
_default: cde
|
|
||||||
secretEnvs: *cde_secret_envs
|
|
||||||
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
namespace: contracts
|
|
||||||
resources:
|
|
||||||
- helmrelease.yaml
|
|
||||||
@ -1,612 +0,0 @@
|
|||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
|
||||||
kind: HelmRelease
|
|
||||||
metadata:
|
|
||||||
name: cde
|
|
||||||
namespace: orchestrator
|
|
||||||
|
|
||||||
spec:
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
chart:
|
|
||||||
spec:
|
|
||||||
chart: universal-chart
|
|
||||||
version: "0.1.7"
|
|
||||||
sourceRef:
|
|
||||||
kind: HelmRepository
|
|
||||||
name: yc-oci-charts
|
|
||||||
namespace: flux-system
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
install:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
upgrade:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
values:
|
|
||||||
global:
|
|
||||||
env: _default
|
|
||||||
|
|
||||||
services:
|
|
||||||
cde:
|
|
||||||
enabled: true
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
name:
|
|
||||||
_default: cde
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
probes:
|
|
||||||
liveness:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
type:
|
|
||||||
_default: tcpSocket
|
|
||||||
tcpSocket:
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
initialDelaySeconds:
|
|
||||||
_default: 15
|
|
||||||
periodSeconds:
|
|
||||||
_default: 10
|
|
||||||
readiness:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
type:
|
|
||||||
_default: tcpSocket
|
|
||||||
tcpSocket:
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
initialDelaySeconds:
|
|
||||||
_default: 15
|
|
||||||
periodSeconds:
|
|
||||||
_default: 10
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/orchestrator:latest
|
|
||||||
pullPolicy:
|
|
||||||
_default: Always
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
stage: true
|
|
||||||
preprod: true
|
|
||||||
production: false
|
|
||||||
name:
|
|
||||||
_default: dockerhub
|
|
||||||
service:
|
|
||||||
enabled: true
|
|
||||||
name:
|
|
||||||
_default: cde
|
|
||||||
type:
|
|
||||||
_default: ClusterIP
|
|
||||||
portName:
|
|
||||||
_default: http
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
targetPort:
|
|
||||||
_default: http
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: cde
|
|
||||||
automountServiceAccountToken:
|
|
||||||
_default: true
|
|
||||||
secretEnvs: &cde_secret_envs
|
|
||||||
- name: ENVIRONMENT
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: ENVIRONMENT
|
|
||||||
- name: LOG_LEVEL
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: LOG_LEVEL
|
|
||||||
- name: ZEEBE_GATEWAY
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: ZEEBE_GATEWAY
|
|
||||||
- name: DATABASE_URL
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: DATABASE_URL
|
|
||||||
- name: S3_ENDPOINT_URL
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: S3_ENDPOINT_URL
|
|
||||||
- name: S3_ACCESS_KEY_ID
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: S3_ACCESS_KEY_ID
|
|
||||||
- name: S3_SECRET_ACCESS_KEY
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: S3_SECRET_ACCESS_KEY
|
|
||||||
- name: PUBLIC_KEY
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: PUBLIC_KEY
|
|
||||||
- name: PDM_URL
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: PDM_URL
|
|
||||||
- name: FLOWS_URL
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: FLOWS_URL
|
|
||||||
- name: USERNAME
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: USERNAME
|
|
||||||
- name: PASSWORD
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: PASSWORD
|
|
||||||
- name: CAMUNDA_PROCESS_DEFINITION_ID
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: CAMUNDA_PROCESS_DEFINITION_ID
|
|
||||||
- name: OPERATE_URL
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: OPERATE_URL
|
|
||||||
- name: CAMUNDA_KEYCLOAK_URL
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: CAMUNDA_KEYCLOAK_URL
|
|
||||||
- name: CAMUNDA_CLIENT_ID
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: CAMUNDA_CLIENT_ID
|
|
||||||
- name: CAMUNDA_CLIENT_SECRET
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: CAMUNDA_CLIENT_SECRET
|
|
||||||
- name: WORKFLOWS_HOST
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: WORKFLOWS_HOST
|
|
||||||
- name: WORKSPACES_URL
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: WORKSPACES_URL
|
|
||||||
- name: AUTH_HOST
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: AUTH_HOST
|
|
||||||
- name: TELEGRAM_ALERT_GROUP_ID
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: TELEGRAM_ALERT_GROUP_ID
|
|
||||||
- name: TELEGRAM_TOKEN
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: TELEGRAM_TOKEN
|
|
||||||
- name: IS_CONTOUR
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: IS_CONTOUR
|
|
||||||
- name: AMQP_HOST
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: AMQP_HOST
|
|
||||||
- name: AMQP_PORT
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: AMQP_PORT
|
|
||||||
- name: AMQP_USER
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: AMQP_USER
|
|
||||||
- name: AMQP_PASSWORD
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: AMQP_PASSWORD
|
|
||||||
- name: AMQP_PATH_API
|
|
||||||
secretName:
|
|
||||||
_default: cde-secret
|
|
||||||
secretKey:
|
|
||||||
_default: AMQP_PATH_API
|
|
||||||
cde-worker-copy:
|
|
||||||
enabled: true
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
name:
|
|
||||||
_default: cde-worker-copy
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
preprod: 2
|
|
||||||
production: 2
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/copy-worker:latest
|
|
||||||
pullPolicy:
|
|
||||||
_default: Always
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
stage: true
|
|
||||||
preprod: true
|
|
||||||
production: false
|
|
||||||
name:
|
|
||||||
_default: dockerhub
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
name:
|
|
||||||
_default: cde
|
|
||||||
secretEnvs: *cde_secret_envs
|
|
||||||
cde-worker-copyv2:
|
|
||||||
enabled: true
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
name:
|
|
||||||
_default: cde-worker-copyv2
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
preprod: 2
|
|
||||||
production: 2
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/copyv2-worker:latest
|
|
||||||
pullPolicy:
|
|
||||||
_default: Always
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
stage: true
|
|
||||||
preprod: true
|
|
||||||
production: false
|
|
||||||
name:
|
|
||||||
_default: dockerhub
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
name:
|
|
||||||
_default: cde
|
|
||||||
secretEnvs: *cde_secret_envs
|
|
||||||
cde-worker-markings:
|
|
||||||
enabled: true
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
name:
|
|
||||||
_default: cde-worker-markings
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
preprod: 2
|
|
||||||
production: 2
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/markings-worker:latest
|
|
||||||
pullPolicy:
|
|
||||||
_default: Always
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
stage: true
|
|
||||||
preprod: true
|
|
||||||
production: false
|
|
||||||
name:
|
|
||||||
_default: dockerhub
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
name:
|
|
||||||
_default: cde
|
|
||||||
secretEnvs: *cde_secret_envs
|
|
||||||
cde-worker-markingsv2:
|
|
||||||
enabled: true
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
name:
|
|
||||||
_default: cde-worker-markingsv2
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
preprod: 2
|
|
||||||
production: 2
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/markingsv2-worker:latest
|
|
||||||
pullPolicy:
|
|
||||||
_default: Always
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
stage: true
|
|
||||||
preprod: true
|
|
||||||
production: false
|
|
||||||
name:
|
|
||||||
_default: dockerhub
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
name:
|
|
||||||
_default: cde
|
|
||||||
secretEnvs: *cde_secret_envs
|
|
||||||
cde-worker-sign:
|
|
||||||
enabled: true
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
name:
|
|
||||||
_default: cde-worker-sign
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/sign-worker:latest
|
|
||||||
pullPolicy:
|
|
||||||
_default: Always
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
stage: true
|
|
||||||
preprod: true
|
|
||||||
production: false
|
|
||||||
name:
|
|
||||||
_default: dockerhub
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
name:
|
|
||||||
_default: cde
|
|
||||||
cde-worker-signv2:
|
|
||||||
enabled: true
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
name:
|
|
||||||
_default: cde-worker-signv2
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/signv2-worker:latest
|
|
||||||
pullPolicy:
|
|
||||||
_default: Always
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
stage: true
|
|
||||||
preprod: true
|
|
||||||
production: false
|
|
||||||
name:
|
|
||||||
_default: dockerhub
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
name:
|
|
||||||
_default: cde
|
|
||||||
secretEnvs: *cde_secret_envs
|
|
||||||
cde-flowscallback:
|
|
||||||
enabled: true
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
name:
|
|
||||||
_default: cde-flowscallback
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/flowscallback-worker:latest
|
|
||||||
pullPolicy:
|
|
||||||
_default: Always
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
stage: true
|
|
||||||
preprod: true
|
|
||||||
production: false
|
|
||||||
name:
|
|
||||||
_default: dockerhub
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
name:
|
|
||||||
_default: cde
|
|
||||||
secretEnvs: *cde_secret_envs
|
|
||||||
cde-splitpdf:
|
|
||||||
enabled: true
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
name:
|
|
||||||
_default: cde-splitpdf
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/splitpdf-worker:latest
|
|
||||||
pullPolicy:
|
|
||||||
_default: Always
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
stage: true
|
|
||||||
preprod: true
|
|
||||||
production: false
|
|
||||||
name:
|
|
||||||
_default: dockerhub
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
name:
|
|
||||||
_default: cde
|
|
||||||
cde-worker-update-bundles:
|
|
||||||
enabled: true
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
name:
|
|
||||||
_default: cde-worker-update-bundles
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/updatebundles-worker:latest
|
|
||||||
pullPolicy:
|
|
||||||
_default: Always
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
production: true
|
|
||||||
name:
|
|
||||||
_default: dockerhub
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
name:
|
|
||||||
_default: cde
|
|
||||||
cde-worker-create-versions:
|
|
||||||
enabled: true
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
name:
|
|
||||||
_default: cde-worker-create-versions
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/createversions-worker:latest
|
|
||||||
pullPolicy:
|
|
||||||
_default: Always
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
production: true
|
|
||||||
name:
|
|
||||||
_default: dockerhub
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
name:
|
|
||||||
_default: cde
|
|
||||||
secretEnvs: *cde_secret_envs
|
|
||||||
cde-worker-create-versionsv2:
|
|
||||||
enabled: true
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
name:
|
|
||||||
_default: cde-worker-create-versionsv2
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/createversionsv2-worker:latest
|
|
||||||
pullPolicy:
|
|
||||||
_default: Always
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
production: true
|
|
||||||
name:
|
|
||||||
_default: dockerhub
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
name:
|
|
||||||
_default: cde
|
|
||||||
secretEnvs: *cde_secret_envs
|
|
||||||
cde-worker-alert:
|
|
||||||
enabled: true
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
name:
|
|
||||||
_default: cde-worker-alert
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
port:
|
|
||||||
_default: 8080
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/orchestrator:latest
|
|
||||||
pullPolicy:
|
|
||||||
_default: Always
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
stage: true
|
|
||||||
preprod: true
|
|
||||||
production: false
|
|
||||||
name:
|
|
||||||
_default: dockerhub
|
|
||||||
service:
|
|
||||||
enabled: false
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: false
|
|
||||||
name:
|
|
||||||
_default: cde
|
|
||||||
secretEnvs: *cde_secret_envs
|
|
||||||
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
namespace: contracts
|
|
||||||
resources:
|
|
||||||
- helmrelease.yaml
|
|
||||||
@ -1,10 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
resources:
|
|
||||||
- ../base
|
|
||||||
patches:
|
|
||||||
- path: namespace.yaml
|
|
||||||
target:
|
|
||||||
kind: Namespace
|
|
||||||
name: cde
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Namespace
|
|
||||||
metadata:
|
|
||||||
name: cde
|
|
||||||
labels:
|
|
||||||
istio-injection: enabled
|
|
||||||
security.deckhouse.io/pod-policy: privileged
|
|
||||||
@ -1,298 +0,0 @@
|
|||||||
openapi: 3.0.3
|
|
||||||
|
|
||||||
info:
|
|
||||||
title: CDE Orchestration API
|
|
||||||
version: "0.0.0"
|
|
||||||
description: |
|
|
||||||
HTTP API оркестратора **cde-orchestration-demo**
|
|
||||||
(`gitlab.com/sarex-team/cde-orchestration-demo`) — управление процессами
|
|
||||||
согласования/подписи документов в Camunda (Zeebe/Operate).
|
|
||||||
|
|
||||||
Сервис написан на Go (**Fiber v3**), точка входа — `cmd/http/main.go`,
|
|
||||||
сборка приложения — `internal/app/http/server.go`. Все ручки объявлены в
|
|
||||||
`internal/controller/http/v0` и смонтированы под префиксом `/api`.
|
|
||||||
|
|
||||||
### Аутентификация
|
|
||||||
Все эндпоинты проходят через middleware `pkg/http/middleware/auth.go`.
|
|
||||||
Токен передаётся заголовком `Authorization: Bearer <jwt>`. Поддерживаются
|
|
||||||
два режима:
|
|
||||||
|
|
||||||
1. **Sarex** (по умолчанию) — подпись JWT проверяется RSA public key из
|
|
||||||
переменной `PUBLIC_KEY`.
|
|
||||||
2. **Zitadel** — если передан дополнительный заголовок
|
|
||||||
`Identity: Bearer <jwt>`, полезная нагрузка берётся из метаданных
|
|
||||||
этого токена (`urn:zitadel:iam:user:metadata`); подпись основным
|
|
||||||
сервисом не проверяется.
|
|
||||||
|
|
||||||
При отсутствии/некорректности заголовков middleware возвращает `401`.
|
|
||||||
|
|
||||||
### Замечания
|
|
||||||
- Ручка `GET /api/process/{instance_key}` может вернуть `425 Too Early`,
|
|
||||||
если процесс есть в кеше, но ещё не создан в Camunda (идёт обработка).
|
|
||||||
- Тело ответов на запись (`process`, `sign`, `operate`) обычно пустое —
|
|
||||||
значим только HTTP-статус.
|
|
||||||
|
|
||||||
contact:
|
|
||||||
name: cde-orchestration-demo
|
|
||||||
url: https://gitlab.com/sarex-team/cde-orchestration-demo
|
|
||||||
|
|
||||||
servers:
|
|
||||||
- url: http://localhost:8080/api
|
|
||||||
description: Локальный запуск (Fiber, ADDRESS по умолчанию :8080)
|
|
||||||
- url: http://cde-svc.cde.svc.cluster.local/api
|
|
||||||
description: Внутрикластерный адрес (ClusterIP)
|
|
||||||
|
|
||||||
tags:
|
|
||||||
- name: infra
|
|
||||||
description: Служебные эндпоинты
|
|
||||||
- name: process
|
|
||||||
description: Процессы согласования/подписи
|
|
||||||
- name: sign
|
|
||||||
description: Отправка подписей в процесс
|
|
||||||
- name: operate
|
|
||||||
description: Управление определениями процессов (BPMN)
|
|
||||||
|
|
||||||
security:
|
|
||||||
- bearerAuth: []
|
|
||||||
|
|
||||||
paths:
|
|
||||||
/:
|
|
||||||
get:
|
|
||||||
tags: [infra]
|
|
||||||
summary: Проверка доступности
|
|
||||||
description: Возвращает 200 OK. Требует валидной авторизации (middleware).
|
|
||||||
operationId: root
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: OK
|
|
||||||
"401":
|
|
||||||
description: Не авторизован
|
|
||||||
|
|
||||||
/process/:
|
|
||||||
post:
|
|
||||||
tags: [process]
|
|
||||||
summary: Запустить процесс
|
|
||||||
description: |
|
|
||||||
Создаёт инстанс процесса согласования/подписи в Camunda по документам
|
|
||||||
из `payload`. Если для `flow_id` уже есть активный инстанс — вернётся
|
|
||||||
`400`.
|
|
||||||
operationId: createProcess
|
|
||||||
requestBody:
|
|
||||||
required: true
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
$ref: "#/components/schemas/ProcessCreateRequest"
|
|
||||||
responses:
|
|
||||||
"202":
|
|
||||||
description: Процесс принят к обработке
|
|
||||||
"400":
|
|
||||||
description: Ошибка валидации или активный инстанс уже существует
|
|
||||||
"401":
|
|
||||||
description: Не авторизован
|
|
||||||
"500":
|
|
||||||
description: Внутренняя ошибка (ошибка создания инстанса в Camunda)
|
|
||||||
|
|
||||||
/process/{instance_key}:
|
|
||||||
get:
|
|
||||||
tags: [process]
|
|
||||||
summary: Получить состояние процесса
|
|
||||||
description: |
|
|
||||||
Возвращает текущее состояние процесса по `flow_id` (в пути — числовой
|
|
||||||
ключ). Логика: если запись есть в кеше, но нет активного инстанса в
|
|
||||||
Camunda — процесс ещё обрабатывается (`425`).
|
|
||||||
operationId: getProcess
|
|
||||||
parameters:
|
|
||||||
- name: instance_key
|
|
||||||
in: path
|
|
||||||
required: true
|
|
||||||
description: Числовой идентификатор (`flow_id`)
|
|
||||||
schema:
|
|
||||||
type: integer
|
|
||||||
format: uint64
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: Состояние процесса
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
$ref: "#/components/schemas/GetProcessInstanceResponse"
|
|
||||||
"401":
|
|
||||||
description: Не авторизован
|
|
||||||
"404":
|
|
||||||
description: Процесс не найден
|
|
||||||
"425":
|
|
||||||
description: Too Early — процесс ещё обрабатывается
|
|
||||||
"500":
|
|
||||||
description: Внутренняя ошибка
|
|
||||||
|
|
||||||
/sign/:
|
|
||||||
post:
|
|
||||||
tags: [sign]
|
|
||||||
summary: Отправить подписи в процесс
|
|
||||||
description: |
|
|
||||||
Публикует сообщение `signRequest` в процесс Camunda с подписями из
|
|
||||||
`payload`. Для элементов с `mrpa_id` предварительно проверяется доступ
|
|
||||||
через sarex-backend.
|
|
||||||
operationId: sign
|
|
||||||
requestBody:
|
|
||||||
required: true
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
$ref: "#/components/schemas/SignRequest"
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: Подписи приняты, сообщение отправлено в процесс
|
|
||||||
"401":
|
|
||||||
description: Отсутствует токен авторизации
|
|
||||||
"403":
|
|
||||||
description: Нет прав на MRPA
|
|
||||||
"422":
|
|
||||||
description: MRPA не найдена
|
|
||||||
"500":
|
|
||||||
description: Внутренняя ошибка
|
|
||||||
|
|
||||||
/operate/processes:
|
|
||||||
post:
|
|
||||||
tags: [operate]
|
|
||||||
summary: Загрузить определение процесса (BPMN)
|
|
||||||
description: |
|
|
||||||
Принимает BPMN-файл (multipart, поле `definition`) и деплоит его в
|
|
||||||
Zeebe.
|
|
||||||
operationId: deployProcessDefinition
|
|
||||||
requestBody:
|
|
||||||
required: true
|
|
||||||
content:
|
|
||||||
multipart/form-data:
|
|
||||||
schema:
|
|
||||||
type: object
|
|
||||||
required: [definition]
|
|
||||||
properties:
|
|
||||||
definition:
|
|
||||||
type: string
|
|
||||||
format: binary
|
|
||||||
description: BPMN-файл определения процесса
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: Определение загружено
|
|
||||||
"400":
|
|
||||||
description: Файл не передан/некорректен
|
|
||||||
"401":
|
|
||||||
description: Не авторизован
|
|
||||||
"500":
|
|
||||||
description: Внутренняя ошибка деплоя
|
|
||||||
|
|
||||||
components:
|
|
||||||
securitySchemes:
|
|
||||||
bearerAuth:
|
|
||||||
type: http
|
|
||||||
scheme: bearer
|
|
||||||
bearerFormat: JWT
|
|
||||||
description: |
|
|
||||||
JWT Sarex (проверяется по `PUBLIC_KEY`). Для режима Zitadel
|
|
||||||
дополнительно передаётся заголовок `Identity: Bearer <jwt>`.
|
|
||||||
|
|
||||||
schemas:
|
|
||||||
ProcessCreateRequest:
|
|
||||||
type: object
|
|
||||||
required: [flow_id, author_id]
|
|
||||||
description: Запрос на старт процесса (`internal/dto/http.go`).
|
|
||||||
properties:
|
|
||||||
flow_id:
|
|
||||||
type: integer
|
|
||||||
format: uint64
|
|
||||||
description: Внешний ID процесса (обязателен, != 0)
|
|
||||||
author_id:
|
|
||||||
type: integer
|
|
||||||
format: uint64
|
|
||||||
description: ID автора запроса (обязателен, != 0)
|
|
||||||
company_id:
|
|
||||||
type: integer
|
|
||||||
format: uint64
|
|
||||||
step_id:
|
|
||||||
type: integer
|
|
||||||
format: uint64
|
|
||||||
metadata:
|
|
||||||
type: object
|
|
||||||
additionalProperties: true
|
|
||||||
payload:
|
|
||||||
type: array
|
|
||||||
description: Документы для обработки (произвольные объекты)
|
|
||||||
items:
|
|
||||||
type: object
|
|
||||||
additionalProperties: true
|
|
||||||
overwrite_marks:
|
|
||||||
type: boolean
|
|
||||||
mode:
|
|
||||||
type: string
|
|
||||||
description: Режим работы ("original", "copy", "both")
|
|
||||||
use_signature:
|
|
||||||
type: boolean
|
|
||||||
create_copy_on_finish:
|
|
||||||
type: boolean
|
|
||||||
comment:
|
|
||||||
type: string
|
|
||||||
is_last_signer:
|
|
||||||
type: boolean
|
|
||||||
|
|
||||||
GetProcessInstanceResponse:
|
|
||||||
type: object
|
|
||||||
description: Состояние инстанса процесса (`internal/dto/http.go`).
|
|
||||||
properties:
|
|
||||||
status:
|
|
||||||
type: string
|
|
||||||
use_signature:
|
|
||||||
type: boolean
|
|
||||||
is_finished:
|
|
||||||
type: boolean
|
|
||||||
is_ready_for_sign:
|
|
||||||
type: boolean
|
|
||||||
is_last_signer:
|
|
||||||
type: boolean
|
|
||||||
create_copy_on_finish:
|
|
||||||
type: boolean
|
|
||||||
comment:
|
|
||||||
type: string
|
|
||||||
payload:
|
|
||||||
description: Полезная нагрузка процесса (структура зависит от процесса)
|
|
||||||
nullable: true
|
|
||||||
instance_key:
|
|
||||||
type: integer
|
|
||||||
format: uint64
|
|
||||||
|
|
||||||
SignRequest:
|
|
||||||
type: object
|
|
||||||
required: [flow_id, payload]
|
|
||||||
description: Запрос на подпись документов в процессе (`internal/dto/http.go`).
|
|
||||||
properties:
|
|
||||||
flow_id:
|
|
||||||
type: integer
|
|
||||||
format: uint64
|
|
||||||
metadata:
|
|
||||||
type: object
|
|
||||||
additionalProperties: true
|
|
||||||
payload:
|
|
||||||
type: array
|
|
||||||
items:
|
|
||||||
$ref: "#/components/schemas/SignRequestPayloadElem"
|
|
||||||
|
|
||||||
SignRequestPayloadElem:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
bundle_id:
|
|
||||||
type: string
|
|
||||||
format: uuid
|
|
||||||
author_id:
|
|
||||||
type: integer
|
|
||||||
format: uint64
|
|
||||||
signature:
|
|
||||||
type: string
|
|
||||||
description: Сгенерированная подпись (помещается в p7s)
|
|
||||||
algorithm:
|
|
||||||
type: string
|
|
||||||
mrpa_id:
|
|
||||||
type: string
|
|
||||||
format: uuid
|
|
||||||
nullable: true
|
|
||||||
description: Если задан — проверяется доступ через sarex-backend
|
|
||||||
@ -1,31 +0,0 @@
|
|||||||
# Piccolo (обязательно для запуска)
|
|
||||||
PYTHONPATH=src
|
|
||||||
PICCOLO_CONF=db.config
|
|
||||||
|
|
||||||
# App
|
|
||||||
DEBUG=true
|
|
||||||
|
|
||||||
# HTTP app
|
|
||||||
HTTP_APP_HOST=0.0.0.0
|
|
||||||
HTTP_APP_PORT=8000
|
|
||||||
HTTP_APP_ROOT_PATH=""
|
|
||||||
HTTP_APP_WORKERS=1
|
|
||||||
HTTP_APP_ADMIN_ENABLE=true
|
|
||||||
|
|
||||||
# Database
|
|
||||||
DATABASE_HOST=postgres
|
|
||||||
DATABASE_PORT=5432
|
|
||||||
DATABASE_NAME=postgres
|
|
||||||
DATABASE_USER=postgres
|
|
||||||
DATABASE_PASSWORD=postgres
|
|
||||||
|
|
||||||
# OpenTelemetry
|
|
||||||
OTEL_ENABLE=false
|
|
||||||
OTEL_URL=http://signoz-otel-collector-external.signoz.svc.cluster.local:4317
|
|
||||||
OTEL_SERVICE_NAME=checklists-backend.checklists-stage
|
|
||||||
OTEL_INSECURE=true
|
|
||||||
|
|
||||||
# Auth (JWT)
|
|
||||||
# При JWT_AUTH_ENABLE=false middleware отключён и используется дефолтный пользователь
|
|
||||||
JWT_AUTH_ENABLE=false
|
|
||||||
JWT_AUTH_PUBLIC_KEY=key
|
|
||||||
@ -1,171 +0,0 @@
|
|||||||
# Конфигурация проекта checklists-backend
|
|
||||||
|
|
||||||
Документ описывает все переменные окружения и способы конфигурирования сервиса.
|
|
||||||
|
|
||||||
## Способы конфигурирования
|
|
||||||
|
|
||||||
Сервис настраивается **только через переменные окружения**. Разбор выполняется в `src/config.py` через библиотеку [`pydantic-settings`](https://docs.pydantic.dev/latest/concepts/pydantic_settings/).
|
|
||||||
|
|
||||||
В отличие от единого класса настроек, конфигурация разбита на несколько независимых классов `BaseSettings`, у каждого — **свой** `env_prefix` (плоские имена, без вложенного разделителя):
|
|
||||||
|
|
||||||
| Класс | `env_prefix` | Раздел |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| `Config` | *(нет префикса)* | `debug` |
|
|
||||||
| `HTTPAppConfig` | `HTTP_APP_` | Параметры HTTP-приложения/uvicorn |
|
|
||||||
| `DatabaseConfig` | `DATABASE_` | Подключение к PostgreSQL |
|
|
||||||
| `OTELConfig` | `OTEL_` | Трейсинг/логи OpenTelemetry |
|
|
||||||
| `JWTAuthConfig` | `JWT_AUTH_` | Аутентификация по JWT |
|
|
||||||
|
|
||||||
Подклассы подключаются к корневому `Config` как поля со значениями по умолчанию (`http_app`, `database`, `otel`, `jwt_auth`) и читают окружение в момент импорта. Отдельного конфиг-файла (yaml/toml) у приложения нет.
|
|
||||||
|
|
||||||
Особенности:
|
|
||||||
|
|
||||||
- **`.env` не загружается автоматически** — в `config.py` не задан `env_file`, зависимости `python-dotenv` нет. Файл `.env.template` — это шаблон; переменные нужно экспортировать в окружение самому (напр. `set -a && . ./.env && set +a`) либо задавать через `--env`/манифесты k8s.
|
|
||||||
- Помимо переменных приложения, для запуска нужны две инфраструктурные переменные Piccolo: `PYTHONPATH=src` и `PICCOLO_CONF=db.config` (заданы в `.env.template` и в `Dockerfile`).
|
|
||||||
|
|
||||||
Источники переменных по способам запуска:
|
|
||||||
|
|
||||||
| Способ запуска | Откуда берутся переменные |
|
|
||||||
| --- | --- |
|
|
||||||
| Локально (`make run`) | Переменные окружения процесса. `.env.template` — шаблон, приложение его **не подхватывает** автоматически |
|
|
||||||
| Контейнер | `docker/http/Dockerfile` задаёт `PYTHONPATH`/`PICCOLO_CONF`; прочие переменные пробрасываются при запуске |
|
|
||||||
| Kubernetes (Helm) | `.helm/values.yaml`: блоки `envs` (обычные значения) и `secretEnvs` (значения из k8s-секретов) чарта `universal-chart` |
|
|
||||||
| CI/CD (GitLab) | `.gitlab-ci.yml`: переменные пайплайна (`workflow.rules`) и `HELM_SET_ARGS` |
|
|
||||||
|
|
||||||
Способы запуска (`Makefile`):
|
|
||||||
|
|
||||||
| Команда | Точка входа | Назначение |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| `make run` | `src/cmd/http/main.py` → `uvicorn` (factory `app.http:create_app`) | HTTP API |
|
|
||||||
| `make migrate` | `piccolo migrations forwards all` | Применение миграций БД |
|
|
||||||
| `make migrations` | `piccolo migrations new checklists --auto` | Генерация новой миграции |
|
|
||||||
| `make format` / `make format-check` | `ruff` | Форматирование/линт |
|
|
||||||
|
|
||||||
Порядок запуска в контейнере (`docker/http/entrypoint.sh`): сначала выполняются миграции (`piccolo migrations forwards all`), затем стартует приложение (`src/cmd/http/main.py`). Uvicorn запускается в режиме фабрики; `reload` включается при `DEBUG=true`, число воркеров — из `HTTP_APP_WORKERS`.
|
|
||||||
|
|
||||||
## Переменные приложения
|
|
||||||
|
|
||||||
В столбце «Переменная» указано полное имя (префикс + поле). Дефолт `—` означает, что значение обязательно.
|
|
||||||
|
|
||||||
### App (`Config`)
|
|
||||||
|
|
||||||
| Переменная | Тип | Значение по умолчанию | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `DEBUG` | bool | `True` | Режим отладки. Влияет на `reload` uvicorn, логирование SQL-запросов Piccolo (`log_queries`/`log_responses`), а также на `production`-флаг и `debug` piccolo-admin |
|
|
||||||
|
|
||||||
### HTTP-приложение (`HTTP_APP_*`)
|
|
||||||
|
|
||||||
| Переменная | Тип | Значение по умолчанию | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `HTTP_APP_HOST` | string | `0.0.0.0` | Адрес прослушивания |
|
|
||||||
| `HTTP_APP_PORT` | int | `8000` | Порт |
|
|
||||||
| `HTTP_APP_ROOT_PATH` | string | `""` | Root path (префикс за реверс-прокси; в k8s — `/checklists`) |
|
|
||||||
| `HTTP_APP_WORKERS` | int | `1` | Число воркеров uvicorn |
|
|
||||||
| `HTTP_APP_ADMIN_ENABLE` | bool | `True` | Монтировать ли piccolo-admin по пути `/admin/` |
|
|
||||||
|
|
||||||
### Database (`DATABASE_*`)
|
|
||||||
|
|
||||||
| Переменная | Тип | Значение по умолчанию | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `DATABASE_HOST` | string | `postgres` | Хост PostgreSQL |
|
|
||||||
| `DATABASE_PORT` | int | `5432` | Порт PostgreSQL |
|
|
||||||
| `DATABASE_NAME` | string | `postgres` | Имя базы данных |
|
|
||||||
| `DATABASE_USER` | string | `postgres` | Пользователь БД |
|
|
||||||
| `DATABASE_PASSWORD` | string | `postgres` | Пароль пользователя БД |
|
|
||||||
|
|
||||||
Подключение собирается в `src/db/config.py` (`PostgresEngine`). SSL-параметров в настройках нет; в prod TLS обеспечивается на уровне подключения/CA-сертификата (см. `docker/http/ca.crt`).
|
|
||||||
|
|
||||||
### OpenTelemetry (`OTEL_*`)
|
|
||||||
|
|
||||||
| Переменная | Тип | Значение по умолчанию | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `OTEL_ENABLE` | bool | `False` | Включить трейсинг/логи OTEL. При `True` подключаются `fastapi-otel-tools` и инструментирование FastAPI |
|
|
||||||
| `OTEL_URL` | string | `http://signoz-otel-collector-external.signoz.svc.cluster.local:4317` | Адрес OTLP-коллектора |
|
|
||||||
| `OTEL_SERVICE_NAME` | string | `checklists-backend.checklists-stage` | Имя сервиса в трейсах |
|
|
||||||
| `OTEL_INSECURE` | bool | `True` | Небезопасное (без TLS) подключение к коллектору |
|
|
||||||
|
|
||||||
> При `OTEL_ENABLE=true` `access_log` uvicorn отключается (логи идут через OTEL-обработчик).
|
|
||||||
|
|
||||||
### Auth (`JWT_AUTH_*`)
|
|
||||||
|
|
||||||
| Переменная | Тип | Значение по умолчанию | Назначение |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| `JWT_AUTH_ENABLE` | bool | `False` | Включить `JWTAuthMiddleware`. При `False` middleware не подключается, и в контекст подставляется дефолтный пользователь (для локальной разработки) |
|
|
||||||
| `JWT_AUTH_PUBLIC_KEY` | string | `key` | Публичный RSA-ключ для JWT (алгоритм `RS512`) |
|
|
||||||
|
|
||||||
## Переменные инфраструктуры и сборки
|
|
||||||
|
|
||||||
Не читаются кодом приложения, но участвуют в запуске/сборке.
|
|
||||||
|
|
||||||
| Переменная | Где используется | Назначение |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| `PYTHONPATH` | `.env.template`, `Dockerfile` | Путь к исходникам (`src`) |
|
|
||||||
| `PICCOLO_CONF` | `.env.template`, `Dockerfile` | Путь к конфигу Piccolo (`db.config`) |
|
|
||||||
| `SERVICE_NAME` | `.gitlab-ci.yml` | Имя сервиса (`checklists-backend`) |
|
|
||||||
| `DOCKERFILE_PATH` | `.gitlab-ci.yml` | Путь к Dockerfile (`./docker/http/Dockerfile`) |
|
|
||||||
| `IMAGE_NAME` | `.gitlab-ci.yml` (`HELM_SET_ARGS`) | Имя собираемого образа |
|
|
||||||
| `CHART_NAME` / `CHART_VERSION` / `RELEASE_NAME` | `.gitlab-ci.yml` | Параметры релиза Helm |
|
|
||||||
|
|
||||||
Базовый образ — `python:3.13-slim-bookworm`; менеджер зависимостей — `uv` (`uv sync --locked`). В образ добавляется CA-сертификат Yandex (`docker/http/ca.crt`).
|
|
||||||
|
|
||||||
## Переменные из Helm-чарта (`.helm/values.yaml`)
|
|
||||||
|
|
||||||
Сервис деплоится подключаемым чартом `universal-chart` (OCI-зависимость). Окружение выбирается ключом `universal-chart.global.env` (`stage`/`preprod`/`production`); для каждой переменной значение берётся из блока с ключом текущего окружения либо из `_default`.
|
|
||||||
|
|
||||||
Обычные значения (блок `envs`) переопределяют дефолты кода, в частности:
|
|
||||||
|
|
||||||
| Переменная | Значение в чарте |
|
|
||||||
| --- | --- |
|
|
||||||
| `HTTP_APP_ROOT_PATH` | `/checklists` |
|
|
||||||
| `HTTP_APP_WORKERS` | `3` |
|
|
||||||
| `HTTP_APP_ADMIN_ENABLE` | `true` |
|
|
||||||
| `DATABASE_PORT` | `6432` (PgBouncer) |
|
|
||||||
| `DATABASE_NAME` | `checklists_db` (stage), `checklists` (preprod/production) |
|
|
||||||
| `OTEL_ENABLE` | `true` |
|
|
||||||
| `OTEL_URL` | `http://otel-collector.opentelemetry-collector.svc.cluster.local:4317` |
|
|
||||||
| `OTEL_SERVICE_NAME` | `checklists-backend.proc` (stage), `…checklists-preprod`, `…checklists-prod` |
|
|
||||||
| `JWT_AUTH_ENABLE` | `true` |
|
|
||||||
| `DEBUG` | `false` |
|
|
||||||
|
|
||||||
Значения из секретов (блок `secretEnvs`, монтируются как env через `secretKeyRef`):
|
|
||||||
|
|
||||||
| Переменная | Секрет (`secretName`) | Ключ (`secretKey`) |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| `DATABASE_USER` | `checklists-postgresql-secret` (stage) / `ya-pg-secret` (preprod, production) | `user` |
|
|
||||||
| `DATABASE_PASSWORD` | `checklists-postgresql-secret` / `ya-pg-secret` | `password` |
|
|
||||||
| `DATABASE_HOST` | `checklists-postgresql-secret` / `ya-pg-secret` | `host` |
|
|
||||||
| `JWT_AUTH_PUBLIC_KEY` | `jwt-secret` | `public-key` |
|
|
||||||
|
|
||||||
Прочие значения чарта (не переменные приложения): `deployment.*` (имя, реплики — 1 по умолчанию, 2 в production, ресурсы), `image.*`, `service.*` (ClusterIP, порт `80` → `8000`). Проверки `liveness`/`readiness` отключены.
|
|
||||||
|
|
||||||
## Переменные в CI (`.gitlab-ci.yml`)
|
|
||||||
|
|
||||||
Пайплайн подключает общие шаблоны из `generic/common-ci` (`universal-pipeline.yaml`, `common-security-scan.yaml`) и переключает окружение по ветке/тегу через `workflow.rules`:
|
|
||||||
|
|
||||||
| Условие | STAND | Namespace |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| ветка `stage` | `stage` | `proc` |
|
|
||||||
| ветка `master` | `preprod` | `checklists-preprod` |
|
|
||||||
| тег (`CI_COMMIT_TAG`) | `production` | `checklists-prod` |
|
|
||||||
|
|
||||||
Ключевые переменные пайплайна: `SERVICE_NAME`, `DOCKERFILE_PATH`, `RELEASE_NAME`, `CHART_NAME`, `CHART_VERSION`, `K8S_HUSTLER_BRANCH`, `HELM_SET_ARGS` (проброс `image.name`, `global.env`, метаданных коммита). Job `lint` прогоняет `ruff check`/`ruff format --check` на образе `uv`.
|
|
||||||
|
|
||||||
## Замечания и потенциальные проблемы
|
|
||||||
|
|
||||||
- Приложение **не загружает `.env` автоматически** — переменные нужно экспортировать в окружение вручную либо задавать в манифестах.
|
|
||||||
- Аутентификация JWT в коде выполняет разбор токена с `options={"verify_signature": False}` в обоих режимах (sarex-backend и Zitadel) — подпись фактически не проверяется на уровне приложения, доверие обеспечивается сетевым слоем (Istio). При `JWT_AUTH_ENABLE=false` middleware не подключается и используется дефолтный пользователь из `entity/context.py`.
|
|
||||||
- Внутренние эндпоинты (`/internal/*`) аутентификации на уровне приложения не требуют.
|
|
||||||
- SSL-настроек подключения к БД в коде нет; в prod используется PgBouncer (`DATABASE_PORT=6432`) и CA-сертификат, вшитый в образ.
|
|
||||||
- Piccolo-admin доступен по `/admin/` при `HTTP_APP_ADMIN_ENABLE=true`; в режиме `DEBUG=false` он поднимается в `production`-режиме.
|
|
||||||
|
|
||||||
## Минимальный набор для локального запуска
|
|
||||||
|
|
||||||
Нужен доступный PostgreSQL. Помимо `PYTHONPATH=src` и `PICCOLO_CONF=db.config`, для запуска достаточно значений по умолчанию — обязательных переменных без дефолта нет. Практически стоит задать:
|
|
||||||
|
|
||||||
- `DEBUG` (`true` локально)
|
|
||||||
- `HTTP_APP_HOST`, `HTTP_APP_PORT`
|
|
||||||
- `DATABASE_HOST`, `DATABASE_PORT`, `DATABASE_NAME`, `DATABASE_USER`, `DATABASE_PASSWORD`
|
|
||||||
- `JWT_AUTH_ENABLE` (`false` для локальной разработки — тогда используется дефолтный пользователь)
|
|
||||||
- `OTEL_ENABLE` (`false` локально)
|
|
||||||
|
|
||||||
Готовые значения-примеры приведены в `.env.example`.
|
|
||||||
80
apps/checklists/base/backend-deployment.yaml
Normal file
80
apps/checklists/base/backend-deployment.yaml
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: checklists-backend
|
||||||
|
namespace: checklists
|
||||||
|
labels:
|
||||||
|
app: checklists-backend
|
||||||
|
service: api
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: checklists-backend
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: checklists-backend
|
||||||
|
service: checklists-backend
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: api
|
||||||
|
image: cr.yandex/crp3ccidau046kdj8g9q/checklists-backend:production_68f242cd
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
containerPort: 8000
|
||||||
|
protocol: TCP
|
||||||
|
env:
|
||||||
|
- name: HTTP_APP_HOST
|
||||||
|
value: 0.0.0.0
|
||||||
|
- name: HTTP_APP_PORT
|
||||||
|
value: "8000"
|
||||||
|
- name: HTTP_APP_ROOT_PATH
|
||||||
|
value: /checklists
|
||||||
|
- name: HTTP_APP_WORKERS
|
||||||
|
value: "8"
|
||||||
|
- name: HTTP_APP_ADMIN_ENABLE
|
||||||
|
value: "true"
|
||||||
|
- name: JWT_AUTH_ENABLE
|
||||||
|
value: "true"
|
||||||
|
- name: DEBUG
|
||||||
|
value: "false"
|
||||||
|
- name: DATABASE_USER
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
key: username
|
||||||
|
name: postgresql-secret
|
||||||
|
- name: DATABASE_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
key: password
|
||||||
|
name: postgresql-secret
|
||||||
|
- name: DATABASE_NAME
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
key: database
|
||||||
|
name: postgresql-secret
|
||||||
|
- name: DATABASE_PORT
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
key: port
|
||||||
|
name: postgresql-secret
|
||||||
|
- name: DATABASE_HOST
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
key: hostname
|
||||||
|
name: postgresql-secret
|
||||||
|
- name: JWT_AUTH_PUBLIC_KEY
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
key: public-key
|
||||||
|
name: jwt-secret
|
||||||
|
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: "1"
|
||||||
|
memory: 1Gi
|
||||||
|
imagePullSecrets:
|
||||||
|
- name: regcred
|
||||||
15
apps/checklists/base/backend-service.yaml
Normal file
15
apps/checklists/base/backend-service.yaml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: rfi-backend-api-svc
|
||||||
|
namespace: rfi
|
||||||
|
spec:
|
||||||
|
type: ClusterIP
|
||||||
|
selector:
|
||||||
|
app: rfi-backend-api
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
port: 80
|
||||||
|
targetPort: 8000
|
||||||
|
protocol: TCP
|
||||||
@ -1,124 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
|
||||||
kind: HelmRelease
|
|
||||||
metadata:
|
|
||||||
name: checklists
|
|
||||||
namespace: checklists
|
|
||||||
spec:
|
|
||||||
interval: 10m
|
|
||||||
chart:
|
|
||||||
spec:
|
|
||||||
chart: universal-chart
|
|
||||||
version: "0.1.9"
|
|
||||||
sourceRef:
|
|
||||||
kind: HelmRepository
|
|
||||||
name: yc-oci-charts
|
|
||||||
namespace: flux-system
|
|
||||||
interval: 10m
|
|
||||||
install:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
upgrade:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
values:
|
|
||||||
global:
|
|
||||||
env: _default
|
|
||||||
services:
|
|
||||||
checklists:
|
|
||||||
enabled: true
|
|
||||||
serviceAccount:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: checklists-vault
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
name:
|
|
||||||
_default: checklists-backend
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
port:
|
|
||||||
_default: 8000
|
|
||||||
command:
|
|
||||||
_default: ["/bin/bash", "-ec"]
|
|
||||||
args:
|
|
||||||
_default:
|
|
||||||
- |
|
|
||||||
set -a
|
|
||||||
[ -f /vault/secrets/checklists-db ] && . /vault/secrets/checklists-db
|
|
||||||
[ -f /vault/secrets/checklists-jwt-public ] && export JWT_AUTH_PUBLIC_KEY="$(cat /vault/secrets/checklists-jwt-public)"
|
|
||||||
set +a
|
|
||||||
exec ./entrypoint.sh
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
cpu:
|
|
||||||
_default: 25m
|
|
||||||
memory:
|
|
||||||
_default: 128Mi
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/checklists-backend:production_68f242cd
|
|
||||||
pullPolicy:
|
|
||||||
_default: IfNotPresent
|
|
||||||
service:
|
|
||||||
enabled: true
|
|
||||||
name:
|
|
||||||
_default: rfi-backend-api-svc
|
|
||||||
type:
|
|
||||||
_default: ClusterIP
|
|
||||||
port:
|
|
||||||
_default: 80
|
|
||||||
targetPort:
|
|
||||||
_default: 8000
|
|
||||||
portName:
|
|
||||||
_default: http
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: regcred
|
|
||||||
envs:
|
|
||||||
- name: HTTP_APP_HOST
|
|
||||||
value:
|
|
||||||
_default: "0.0.0.0"
|
|
||||||
- name: HTTP_APP_PORT
|
|
||||||
value:
|
|
||||||
_default: "8000"
|
|
||||||
- name: HTTP_APP_ROOT_PATH
|
|
||||||
value:
|
|
||||||
_default: /checklists
|
|
||||||
- name: HTTP_APP_WORKERS
|
|
||||||
value:
|
|
||||||
_default: "1"
|
|
||||||
- name: HTTP_APP_ADMIN_ENABLE
|
|
||||||
value:
|
|
||||||
_default: "true"
|
|
||||||
- name: JWT_AUTH_ENABLE
|
|
||||||
value:
|
|
||||||
_default: "true"
|
|
||||||
- name: DEBUG
|
|
||||||
value:
|
|
||||||
_default: "false"
|
|
||||||
podAnnotations:
|
|
||||||
_default:
|
|
||||||
traffic.sidecar.istio.io/excludeOutboundPorts: "8200"
|
|
||||||
vault.hashicorp.com/agent-init-first: "true"
|
|
||||||
vault.hashicorp.com/agent-inject: "true"
|
|
||||||
vault.hashicorp.com/agent-pre-populate-only: "true"
|
|
||||||
vault.hashicorp.com/auth-path: auth/kubernetes
|
|
||||||
vault.hashicorp.com/role: checklists
|
|
||||||
vault.hashicorp.com/agent-inject-secret-checklists-db: secrets/data/apps/checklists/postgres
|
|
||||||
vault.hashicorp.com/agent-inject-template-checklists-db: |-
|
|
||||||
{{- with secret "secrets/data/apps/checklists/postgres" -}}
|
|
||||||
DATABASE_HOST={{ index .Data.data "host" }}
|
|
||||||
DATABASE_PORT={{ index .Data.data "port" }}
|
|
||||||
DATABASE_NAME={{ index .Data.data "database" }}
|
|
||||||
DATABASE_USER={{ index .Data.data "username" }}
|
|
||||||
DATABASE_PASSWORD={{ index .Data.data "password" }}
|
|
||||||
{{- end -}}
|
|
||||||
vault.hashicorp.com/agent-inject-secret-checklists-jwt-public: secrets/data/vault/common/rsa_keys
|
|
||||||
vault.hashicorp.com/agent-inject-template-checklists-jwt-public: |-
|
|
||||||
{{- with secret "secrets/data/vault/common/rsa_keys" -}}
|
|
||||||
{{ index .Data.data "public_key" }}
|
|
||||||
{{- end -}}
|
|
||||||
@ -4,4 +4,5 @@ kind: Kustomization
|
|||||||
namespace: checklists
|
namespace: checklists
|
||||||
resources:
|
resources:
|
||||||
- namespace.yaml
|
- namespace.yaml
|
||||||
- helmrelease.yaml
|
- backend-deployment.yaml
|
||||||
|
- backend-service.yaml
|
||||||
|
|||||||
@ -5,4 +5,3 @@ metadata:
|
|||||||
name: checklists
|
name: checklists
|
||||||
labels:
|
labels:
|
||||||
istio-injection: enabled
|
istio-injection: enabled
|
||||||
security.deckhouse.io/pod-policy: privileged
|
|
||||||
|
|||||||
@ -1,151 +0,0 @@
|
|||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
|
||||||
kind: HelmRelease
|
|
||||||
metadata:
|
|
||||||
name: backend
|
|
||||||
namespace: checklist
|
|
||||||
|
|
||||||
spec:
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
chart:
|
|
||||||
spec:
|
|
||||||
chart: universal-chart
|
|
||||||
version: "0.1.7"
|
|
||||||
sourceRef:
|
|
||||||
kind: HelmRepository
|
|
||||||
name: yc-oci-charts
|
|
||||||
namespace: flux-system
|
|
||||||
interval: 10m
|
|
||||||
|
|
||||||
install:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
upgrade:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
|
|
||||||
values:
|
|
||||||
global:
|
|
||||||
env: _default
|
|
||||||
|
|
||||||
services:
|
|
||||||
backend:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
image:
|
|
||||||
name:
|
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/checklists-backend:preprod_b1980fc6
|
|
||||||
pullPolicy:
|
|
||||||
_default: IfNotPresent
|
|
||||||
|
|
||||||
deployment:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: backend
|
|
||||||
|
|
||||||
replicaCount:
|
|
||||||
_default: 1
|
|
||||||
stage: 1
|
|
||||||
preprod: 3
|
|
||||||
production: 3
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 8000
|
|
||||||
|
|
||||||
probes:
|
|
||||||
liveness:
|
|
||||||
enabled: false
|
|
||||||
readiness:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
service:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
name:
|
|
||||||
_default: backend-service
|
|
||||||
|
|
||||||
type:
|
|
||||||
_default: ClusterIP
|
|
||||||
|
|
||||||
port:
|
|
||||||
_default: 8000
|
|
||||||
|
|
||||||
targetPort:
|
|
||||||
_default: 8000
|
|
||||||
|
|
||||||
portName:
|
|
||||||
_default: http
|
|
||||||
|
|
||||||
imagePullSecrets:
|
|
||||||
enabled:
|
|
||||||
_default: true
|
|
||||||
name:
|
|
||||||
_default: regcred
|
|
||||||
labels:
|
|
||||||
monitoring: prometheus
|
|
||||||
|
|
||||||
envs:
|
|
||||||
- name: HTTP_APP_HOST
|
|
||||||
value:
|
|
||||||
_default: "0.0.0.0"
|
|
||||||
|
|
||||||
- name: HTTP_APP_PORT
|
|
||||||
value:
|
|
||||||
_default: "8000"
|
|
||||||
|
|
||||||
- name: HTTP_APP_ROOT_PATH
|
|
||||||
value:
|
|
||||||
_default: "/checklists"
|
|
||||||
|
|
||||||
- name: HTTP_APP_WORKERS
|
|
||||||
value:
|
|
||||||
_default: "8"
|
|
||||||
|
|
||||||
- name: HTTP_APP_ADMIN_ENABLE
|
|
||||||
value:
|
|
||||||
_default: "true"
|
|
||||||
|
|
||||||
- name: JWT_AUTH_ENABLE
|
|
||||||
value:
|
|
||||||
_default: "true"
|
|
||||||
|
|
||||||
- name: DEBUG
|
|
||||||
value:
|
|
||||||
_default: "false"
|
|
||||||
secretEnvs:
|
|
||||||
- name: DATABASE_HOST
|
|
||||||
secretName:
|
|
||||||
_default: "checklists-postgresql-secret"
|
|
||||||
secretKey: "hostname"
|
|
||||||
|
|
||||||
- name: DATABASE_PORT
|
|
||||||
secretName:
|
|
||||||
_default: "checklists-postgresql-secret"
|
|
||||||
secretKey: "port"
|
|
||||||
|
|
||||||
- name: DATABASE_NAME
|
|
||||||
secretName:
|
|
||||||
_default: "checklists-postgresql-secret"
|
|
||||||
secretKey: "database"
|
|
||||||
|
|
||||||
- name: DATABASE_USER
|
|
||||||
secretName:
|
|
||||||
_default: "checklists-postgresql-secret"
|
|
||||||
secretKey: "username"
|
|
||||||
|
|
||||||
- name: DATABASE_PASSWORD
|
|
||||||
secretName:
|
|
||||||
_default: "checklists-postgresql-secret"
|
|
||||||
secretKey: "password"
|
|
||||||
|
|
||||||
- name: JWT_AUTH_PUBLIC_KEY
|
|
||||||
secretName:
|
|
||||||
_default: "checklists-public-key"
|
|
||||||
secretKey: "key"
|
|
||||||
|
|
||||||
commitSha: ""
|
|
||||||
gitlabUri: ""
|
|
||||||
gitlabJobUrl: ""
|
|
||||||
owner: ""
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
namespace: checklist
|
|
||||||
resources:
|
|
||||||
- backend.yaml
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user