Merge branch 'actualize-chart' into 'main'

Actualize chart

See merge request hrbox-public/helm-chart!3
This commit is contained in:
Влад
2026-02-12 08:41:19 +00:00
12 changed files with 652 additions and 52 deletions
+2 -2
View File
@@ -4,10 +4,10 @@ description: Simplified HRBox application Helm chart
type: application
# Версия самого чарта. Увеличивается при каждом изменении чарта
version: 1.2.0
version: 2.0.0
# Версия приложения, которое деплоится. Не обязательно увеличивать при изменении чарта
appVersion: "2.0.0"
appVersion: "3.0.0"
# Ключевые слова для поиска
keywords:
+11 -10
View File
@@ -1,10 +1,11 @@
---
# Chatbox (WebSocket server) - обеспечивает real-time функционал
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Chart.Name }}-websocket
name: {{ .Chart.Name }}-chatbox
labels:
app: websocket
app: chatbox
spec:
minReadySeconds: 5
strategy:
@@ -12,14 +13,14 @@ spec:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
replicas: {{ .Values.app.replicas.websocket }}
replicas: {{ .Values.app.replicas.chatbox }}
selector:
matchLabels:
service: {{ .Chart.Name }}-websocket
service: {{ .Chart.Name }}-chatbox
template:
metadata:
labels:
service: {{ .Chart.Name }}-websocket
service: {{ .Chart.Name }}-chatbox
annotations:
prometheus.io/scrape: 'true'
prometheus.io/port: '9797'
@@ -28,21 +29,21 @@ spec:
imagePullSecrets:
- name: regsecret
containers:
- name: websocket
{{- include "websocket_resources" . | indent 10}}
image: cr.yandex/crphnph9c2s776j32sjd/hrbox-websocket:2.1
- name: chatbox
image: {{ .Values.app.chatbox.image }}
imagePullPolicy: Always
env:
{{- include "envs_all" . | indent 12 }}
{{- include "chatbox_resources" . | indent 10 }}
---
apiVersion: v1
kind: Service
metadata:
name: {{ .Chart.Name }}-websocket
name: {{ .Chart.Name }}-chatbox
spec:
selector:
service: {{ .Chart.Name }}-websocket
service: {{ .Chart.Name }}-chatbox
ports:
- name: http
port: 80
@@ -0,0 +1,32 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Chart.Name }}-document-converter
labels:
app: document-converter
spec:
minReadySeconds: 5
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
replicas: {{ .Values.app.document_converter.replicas }}
selector:
matchLabels:
service: {{ .Chart.Name }}-document-converter
template:
metadata:
labels:
service: {{ .Chart.Name }}-document-converter
spec:
imagePullSecrets:
- name: regsecret
containers:
- name: document-converter
image: {{ .Values.app.document_converter.image }}
imagePullPolicy: Always
env:
{{- include "envs_all" . | indent 12 }}
{{- include "document_converter_resources" . | indent 10 }}
+34
View File
@@ -0,0 +1,34 @@
---
{{ $name := printf "%s-file-processor" (.Chart.Name) }}
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ $name }}
labels:
app: file-processor
spec:
minReadySeconds: 5
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
replicas: {{ .Values.app.file_processor.replicas }}
selector:
matchLabels:
service: {{ $name }}
template:
metadata:
labels:
service: {{ $name }}
spec:
imagePullSecrets:
- name: regsecret
containers:
- name: file-processor
image: {{ .Values.app.file_processor.image }}
imagePullPolicy: Always
env:
{{- include "envs_all" . | indent 12 }}
- name: VIDEO_CONVERTER_ENABLED
value: "false"
+52
View File
@@ -0,0 +1,52 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Chart.Name }}-goworker
labels:
app: goworker
spec:
minReadySeconds: 5
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
replicas: {{ .Values.app.goworker.replicas }}
selector:
matchLabels:
service: {{ .Chart.Name }}-goworker
template:
metadata:
labels:
service: {{ .Chart.Name }}-goworker
spec:
imagePullSecrets:
- name: regsecret
containers:
- name: goworker
stdin: true
tty: true
image: {{ .Values.app.goworker.image }}
imagePullPolicy: Always
env:
{{- include "envs_all" . | indent 12 }}
{{- include "goworker_resources" . | indent 10 }}
---
apiVersion: v1
kind: Service
metadata:
name: {{ .Chart.Name }}-goworker
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "8686"
prometheus.io/path: "/metrics"
spec:
selector:
service: {{ .Chart.Name }}-goworker
ports:
- name: http
port: 8686
targetPort: 8686
protocol: TCP
+63
View File
@@ -0,0 +1,63 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Chart.Name }}-kedoca
labels:
app: kedoca
spec:
minReadySeconds: 5
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
replicas: {{ .Values.app.kedoca.replicas }}
selector:
matchLabels:
service: {{ .Chart.Name }}-kedoca
template:
metadata:
labels:
service: {{ .Chart.Name }}-kedoca
spec:
imagePullSecrets:
- name: regsecret
containers:
- name: kedoca
image: {{ .Values.app.kedoca.image }}
imagePullPolicy: Always
env:
{{- include "envs_all" . | indent 12 }}
{{- include "envs_kedoca" . | indent 12 }}
ports:
- containerPort: 8558
{{- include "kedoca_resources" . | indent 10 }}
{{- if .Values.app.kedoca.secretName }}
volumeMounts:
- name: ca-cert
mountPath: /ca-cert
{{- end }}
{{- if .Values.app.kedoca.secretName }}
volumes:
- name: ca-cert
secret:
secretName: {{ .Values.app.kedoca.secretName }}
{{- end }}
---
apiVersion: v1
kind: Service
metadata:
name: {{ .Chart.Name }}-kedoca
labels:
app: kedoca
spec:
selector:
service: {{ .Chart.Name }}-kedoca
ports:
- name: http
port: 8558
targetPort: 8558
protocol: TCP
type: ClusterIP
+3 -3
View File
@@ -5,7 +5,7 @@ metadata:
name: {{ .Chart.Name }}-ingress
annotations:
kubernetes.io/ingress.class: {{ .Values.ingress.className }}
nginx.org/websocket-services: {{ .Chart.Name }}-websocket
nginx.org/websocket-services: {{ .Chart.Name }}-chatbox
nginx.ingress.kubernetes.io/proxy-body-size: "10m"
nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
@@ -18,11 +18,11 @@ spec:
- host: {{ .Values.ingress.host | quote }} # something.example.com
http:
paths:
- path: /ws/
- path: /chatbox/
pathType: Prefix
backend:
service:
name: {{ .Chart.Name }}-websocket
name: {{ .Chart.Name }}-chatbox
port:
number: 80
- path: /
+51 -7
View File
@@ -190,12 +190,56 @@
- name: YANDEX_CLOUD_AI_API_KEY
value: {{ .Values.app.ai.yandex.apiKey | quote }}
{{- end }}
{{- if .Values.app.ai.openai.apiKey }}
- name: OPENAI_API_KEY
value: {{ .Values.app.ai.openai.apiKey | quote }}
- name: OPENAI_PROXY_KEY
value: {{ .Values.app.ai.openai.proxyKey | quote }}
- name: OPENAI_BASE_URI
value: {{ .Values.app.ai.openai.baseUri | quote }}
# Integration Services
- name: GOWORKER_URL
value: {{ .Values.app.goworker.url | quote }}
{{- if .Values.app.goworker.sentryDsn }}
- name: GOWORKER_SENTRY_DSN
value: {{ .Values.app.goworker.sentryDsn | quote }}
{{- end }}
- name: GOWORKER_PUSH_MIN_INTERVAL
value: {{ .Values.app.goworker.pushMinInterval | quote }}
- name: KEDOCA_URL
value: {{ .Values.app.kedoca.url | quote }}
- name: TSP_URL
value: "http://qs.cryptopro.ru/tsp/tsp.srf"
# Internal Services
- name: SERVICES_INTERNAL_SECRET
value: {{ .Values.secrets.servicesInternalSecret | default "QrrH84K2dG5JfoYxi4ZNPyg5p2LEj6rN69z5tIQYkfY6SJZ8GDXOcRjTNnefbOx5" | quote }}
# Document Converter
- name: PYTHONUNBUFFERED
value: "1"
- name: DOCCONV_MAX_PARALLEL_TASKS
value: "1"
# AI Features
- name: AI_DOCS_INDEX_ENABLED
value: "true"
- name: AI_SEMANTIC_INDEX_ENABLED
value: "true"
- name: AI_SEMANTIC_INDEX_USE_BATCH
value: "true"
# Chatbox
{{- if .Values.app.chatbox.sentryDsn }}
- name: CHATBOX_SENTRY_DSN
value: {{ .Values.app.chatbox.sentryDsn | quote }}
{{- end }}
- name: CHATBOX_WRAPPING_KEY
value: {{ .Values.app.chatbox.wrappingKey | quote }}
{{- end }}
{{- define "envs_kedoca" }}
- name: ROOT_CA_PASS
value: {{ .Values.app.kedoca.rootCaPass | quote }}
- name: KEDO_ENGINE
value: {{ .Values.app.kedoca.engine | quote }}
- name: KEDO_ALGORITHM
value: {{ .Values.app.kedoca.algorithm | quote }}
- name: KEDO_PKEYOPT
value: {{ .Values.app.kedoca.pkeyopt | quote }}
{{- end }}
+48
View File
@@ -81,3 +81,51 @@ resources:
cpu: {{ .Values.resources.jobs.limits.cpu | quote }}
ephemeral-storage: {{ .Values.resources.jobs.limits.ephemeralStorage | quote }}
{{- end }}
{{- define "goworker_resources" }}
resources:
requests:
memory: {{ .Values.resources.goworker.requests.memory | quote }}
cpu: {{ .Values.resources.goworker.requests.cpu | quote }}
ephemeral-storage: {{ .Values.resources.goworker.requests.ephemeralStorage | quote }}
limits:
memory: {{ .Values.resources.goworker.limits.memory | quote }}
cpu: {{ .Values.resources.goworker.limits.cpu | quote }}
ephemeral-storage: {{ .Values.resources.goworker.limits.ephemeralStorage | quote }}
{{- end }}
{{- define "kedoca_resources" }}
resources:
requests:
memory: {{ .Values.resources.kedoca.requests.memory | quote }}
cpu: {{ .Values.resources.kedoca.requests.cpu | quote }}
ephemeral-storage: {{ .Values.resources.kedoca.requests.ephemeralStorage | quote }}
limits:
memory: {{ .Values.resources.kedoca.limits.memory | quote }}
cpu: {{ .Values.resources.kedoca.limits.cpu | quote }}
ephemeral-storage: {{ .Values.resources.kedoca.limits.ephemeralStorage | quote }}
{{- end }}
{{- define "document_converter_resources" }}
resources:
requests:
memory: {{ .Values.resources.document_converter.requests.memory | quote }}
cpu: {{ .Values.resources.document_converter.requests.cpu | quote }}
ephemeral-storage: {{ .Values.resources.document_converter.requests.ephemeralStorage | quote }}
limits:
memory: {{ .Values.resources.document_converter.limits.memory | quote }}
cpu: {{ .Values.resources.document_converter.limits.cpu | quote }}
ephemeral-storage: {{ .Values.resources.document_converter.limits.ephemeralStorage | quote }}
{{- end }}
{{- define "chatbox_resources" }}
resources:
requests:
memory: {{ .Values.resources.chatbox.requests.memory | quote }}
cpu: {{ .Values.resources.chatbox.requests.cpu | quote }}
ephemeral-storage: {{ .Values.resources.chatbox.requests.ephemeralStorage | quote }}
limits:
memory: {{ .Values.resources.chatbox.limits.memory | quote }}
cpu: {{ .Values.resources.chatbox.limits.cpu | quote }}
ephemeral-storage: {{ .Values.resources.chatbox.limits.ephemeralStorage | quote }}
{{- end }}
+111 -26
View File
@@ -32,12 +32,12 @@ app:
# Рекомендации по масштабированию:
# - web: 2-10 реплик в зависимости от количества пользователей
# - worker: 2-5 реплик для обработки фоновых задач
# - websocket: 2-6 реплик для real-time функционала
# - chatbox: 2-6 реплик для real-time функционала (WebSocket)
# - geonames: 1-2 реплики (сервис не требователен к ресурсам)
replicas:
web: 2
worker: 2
websocket: 2
chatbox: 2
geonames: 1
# PostgreSQL база данных
@@ -136,10 +136,9 @@ app:
# Проверять SSL сертификат сервера
sslVerifyPeer: "false"
# Sentry для мониторинга ошибок (опционально)
# Sentry для мониторинга ошибок
sentry:
# DSN для отправки ошибок
# Оставьте пустым, чтобы отключить
dsn: ""
# Окружение для группировки ошибок
@@ -151,6 +150,64 @@ app:
# Не меняйте, если используете стандартный деплой
url: "http://hrbox-geonames:8181"
# Goworker
goworker:
# URL внутреннего сервиса goworker
url: "http://hrbox-goworker:8686"
# Docker образ goworker
image: "cr.yandex/crphnph9c2s776j32sjd/hrbox-goworker:2.7"
# Количество реплик
replicas: 2
# Минимальный интервал между push
pushMinInterval: "5m"
# Sentry DSN для мониторинга ошибок
sentryDsn: ""
# Kedoca - сервис электронной подписи (ГОСТ, OpenSSL)
kedoca:
# URL внутреннего сервиса kedoca
url: "http://hrbox-kedoca:8558"
# Docker образ kedoca
image: "cr.yandex/crphnph9c2s776j32sjd/hrbox-kedoca:0.8"
# Количество реплик
replicas: 1
# Пароль для корневого сертификата
rootCaPass: "hrbox"
# Криптографический движок: "gost" или "openssl"
engine: "gost"
# Алгоритм: "gost2012_256" для GОСТ или "rsa" для OpenSSL
algorithm: "gost2012_256"
# Параметры ключа: "paramset:A" для ГОСТ или "rsa_keygen_bits:2048" для RSA
pkeyopt: "paramset:A"
# Имя Kubernetes Secret с сертификатами
# Если указано, будет смонтирован в /ca-cert
secretName: ""
# File Processor - обработка файлов (конвертация, ресайз изображений)
file_processor:
# Docker образ file processor
image: "cr.yandex/crphnph9c2s776j32sjd/hrbox-file-processor:1.0"
# Количество реплик
replicas: 1
# Document Converter - конвертер документов (PDF, DOCX и др.)
document_converter:
# Docker образ document converter
image: "cr.yandex/crphnph9c2s776j32sjd/hrbox-document-converter:latest"
# Количество реплик
replicas: 1
# Chatbox - WebSocket сервер для real-time функционала
chatbox:
# Docker образ chatbox
image: "cr.yandex/crphnph9c2s776j32sjd/hrbox-chatbox:3.0"
# Wrapping key - часть ключа для ассиметричного шифрования чатов
# Сгенерируйте произвольную строку из 32 символов
# openssl rand -hex 16
wrappingKey: ""
# Sentry DSN для мониторинга ошибок
sentryDsn: ""
# Настройки воркеров Launchpad
# Формат: "название-топика:количество-воркеров"
launchpad:
@@ -188,15 +245,6 @@ app:
# API ключ для Yandex Cloud
apiKey: ""
# OpenAI интеграция
openai:
# API ключ OpenAI
apiKey: ""
# Прокси ключ (если используете прокси)
proxyKey: ""
# Base URL для API (можно указать прокси)
baseUri: ""
# Настройки безопасности
security:
# Разрешить полный доступ к iframe
@@ -217,6 +265,11 @@ secrets:
# Генерация: openssl rand -base64 48
encryptionKey: ""
# Секрет для внутренней коммуникации микросервисов (64 символа)
# Используется для защиты внутренних API вызовов между сервисами
# Генерация: openssl rand -base64 48
servicesInternalSecret: ""
# Настройки Ingress
ingress:
# Включить Ingress
@@ -281,18 +334,6 @@ resources:
memory: "2Gi"
ephemeralStorage: "2Gi"
# WebSocket сервер
# Обеспечивает real-time функционал, например, уведомления
websocket:
requests:
cpu: "0.1"
memory: "128Mi"
ephemeralStorage: "64Mi"
limits:
cpu: "1"
memory: "512Mi"
ephemeralStorage: "64Mi"
# Geonames - сервис геолокации
# Определяет города, страны, часовые пояса
geonames:
@@ -329,13 +370,57 @@ resources:
memory: "2Gi"
ephemeralStorage: "256Mi"
# Goworker - интеграции с мессенджерами
goworker:
requests:
cpu: "0.1"
memory: "196Mi"
ephemeralStorage: "64Mi"
limits:
cpu: "0.3"
memory: "256Mi"
ephemeralStorage: "64Mi"
# Kedoca - электронная подпись
kedoca:
requests:
cpu: "0.1"
memory: "196Mi"
ephemeralStorage: "64Mi"
limits:
cpu: "0.5"
memory: "256Mi"
ephemeralStorage: "64Mi"
# Document Converter - конвертер документов
document_converter:
requests:
cpu: "1"
memory: "512Mi"
ephemeralStorage: "512Mi"
limits:
cpu: "1"
memory: "1024Mi"
ephemeralStorage: "1024Mi"
# Chatbox - WebSocket сервер
chatbox:
requests:
cpu: "0.3"
memory: "96Mi"
ephemeralStorage: "128Mi"
limits:
cpu: "0.3"
memory: "192Mi"
ephemeralStorage: "256Mi"
# Настройки NATS JetStream
nats:
# Включить NATS (обязательно для работы HRBox)
enabled: true
# Docker образ NATS
image: "nats:2.8"
image: "nats:2.10"
# Количество реплик NATS
# Для отказоустойчивости используйте 3 или 5
+239
View File
@@ -0,0 +1,239 @@
# Changelog
All notable changes to the HRBox Helm chart will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [2.0.0] - 2026-01-30
Масштабная актуализация чарта на основе продового окружения hrbox. Синхронизированы версии компонентов, добавлены новые микросервисы, обновлены переменные окружения.
### Added
#### Новые микросервисы
- **Goworker** (`09-goworker.yaml`) - Сервис интеграций с мессенджерами
- Образ: `hrbox-goworker:2.7`
- Prometheus metrics на порту 8686
- Настройки: `app.goworker` в values.yaml
- Переменные: `GOWORKER_URL`, `GOWORKER_PUSH_MIN_INTERVAL`, `GOWORKER_SENTRY_DSN`
- **Kedoca** (`09-kedoca.yaml`) - Сервис электронной подписи
- Образ: `hrbox-kedoca:0.8`
- Поддержка ГОСТ и OpenSSL
- Монтирование Kubernetes Secret с CA сертификатами
- Настройки: `app.kedoca` в values.yaml
- Переменные: `KEDOCA_URL`, `TSP_URL`, `ROOT_CA_PASS`, `KEDO_ENGINE`, `KEDO_ALGORITHM`, `KEDO_PKEYOPT`
- **Document Converter** (`09-document-converter.yaml`) - Конвертер документов
- Образ: `hrbox-document-converter:latest`
- Конвертация PDF, DOCX и других форматов
- Настройки: `app.document_converter` в values.yaml
- Переменные: `PYTHONUNBUFFERED`, `DOCCONV_MAX_PARALLEL_TASKS`
- **File Processor** (`09-file-processor.yaml`) - Обработка файлов (конвертация, ресайз изображений)
- Образ: `hrbox-file-processor:1.0`
- Настройки: `app.file_processor` в values.yaml
- `VIDEO_CONVERTER_ENABLED` захардкожен в `false` (видео-конвертация отключена)
#### Новые переменные окружения
- `SERVICES_INTERNAL_SECRET` - Секрет для межсервисной коммуникации
- `AI_DOCS_INDEX_ENABLED` - Включение индексации документов через AI
- `AI_SEMANTIC_INDEX_ENABLED` - Семантическое индексирование
- `AI_SEMANTIC_INDEX_USE_BATCH` - Пакетная обработка при индексации
- `CHATBOX_SENTRY_DSN` - Sentry DSN для Chatbox
- `CHATBOX_WRAPPING_KEY` - часть ключа для шифрования чатов
- `SINGLE_TENANT` - Режим single-tenant для on-premise установок
- `TSP_URL` - URL службы временных меток (http://qs.cryptopro.ru/tsp/tsp.srf)
#### Новые секреты
- `secrets.servicesInternalSecret` - Секрет для защиты внутренних API между микросервисами
- Генерация: `openssl rand -base64 48`
#### Resource definitions
Добавлены resource limits/requests для новых сервисов:
- `resources.goworker` - CPU: 0.1-0.3, Memory: 196Mi-256Mi
- `resources.kedoca` - CPU: 0.1-0.5, Memory: 196Mi-256Mi
- `resources.document_converter` - CPU: 1, Memory: 512Mi-1024Mi, Ephemeral: 512Mi-1024Mi
- `resources.chatbox` - CPU: 0.3, Memory: 96Mi-192Mi
### Changed
#### Обновление версий
- **Chart version**: `1.2.0` → `2.0.0`
- **App version**: `2.0.0` → `3.0.0`
#### Chatbox (ранее WebSocket)
- **Образ обновлен**: `hrbox-websocket:2.1` → `hrbox-chatbox:3.0`
- **Переименован deployment**: `{chart}-websocket` → `{chart}-chatbox`
- **Переименован service**: `{chart}-websocket` → `{chart}-chatbox`
- **Переименована конфигурация**:
- `app.replicas.websocket` → `app.replicas.chatbox`
- Файл остался `03-websocket.yaml` но содержимое обновлено на chatbox
#### Архитектура
- Все микросервисы теперь **обязательны** (не опциональны)
- Удалены условия `{{- if .Values.app.goworker }}` из templates
- Удалены `| default` значения для обязательных параметров
- Goworker, Kedoca, Document Converter, Chatbox всегда деплоятся
#### Templates
- `_envs.tpl`:
- Упрощена логика переменных окружения
- Удалены условия для обязательных сервисов
- Добавлен блок `envs_kedoca` для настроек криптографии
- `_resources.tpl`:
- Добавлены определения: `goworker_resources`, `kedoca_resources`, `document_converter_resources`, `chatbox_resources`
- `_helpers.tpl`:
- Без изменений, сохранена совместимость
### Removed
#### Устаревшие компоненты
- **WebSocket сервис** - Полностью заменен на Chatbox 3.0
- Удалено: `app.replicas.websocket` из values.yaml
- Удалено: `resources.websocket` из values.yaml
#### Устаревшие интеграции
- **OpenAI** - Интеграция удалена, используйте HRBox Hub
- Удален блок: `app.ai.openai` с полями `apiKey`, `proxyKey`, `baseUri`
- Удалены переменные: `OPENAI_API_KEY`, `OPENAI_PROXY_KEY`, `OPENAI_BASE_URI`
### Migration Guide
#### Миграция с версии 1.x на 2.0
**Шаг 1: Обновите values.yaml**
```yaml
# 1. Переименуйте websocket в chatbox
app:
replicas:
# websocket: 2 # УДАЛИТЬ
chatbox: 2 # ДОБАВИТЬ
# 2. Добавьте новые сервисы
app:
goworker:
url: "http://hrbox-goworker:8686"
image: "cr.yandex/crphnph9c2s776j32sjd/hrbox-goworker:2.7"
replicas: 2
pushMinInterval: "5m"
sentryDsn: ""
kedoca:
url: "http://hrbox-kedoca:8558"
image: "cr.yandex/crphnph9c2s776j32sjd/hrbox-kedoca:0.8"
replicas: 1
rootCaPass: "hrbox"
engine: "gost"
algorithm: "gost2012_256"
pkeyopt: "paramset:A"
secretName: ""
document_converter:
image: "cr.yandex/crphnph9c2s776j32sjd/hrbox-document-converter:latest"
wrappingKey: "" # Cгенерируйте: openssl rand -hex 16
replicas: 1
chatbox:
image: "cr.yandex/crphnph9c2s776j32sjd/hrbox-chatbox:3.0"
sentryDsn: ""
# 3. Добавьте новый секрет
secrets:
servicesInternalSecret: "" # Сгенерируйте: openssl rand -base64 48
# 4. Удалите OpenAI (если был настроен)
app:
ai:
# openai: # УДАЛИТЬ весь блок
# apiKey: ""
# proxyKey: ""
# baseUri: ""
```
**Шаг 2: Сгенерируйте новый секрет**
```bash
# Генерация servicesInternalSecret
openssl rand -base64 48
```
**Шаг 3: Обновите Chart**
```bash
helm upgrade hrbox .helm/ \
--namespace hrbox \
--values your-values.yaml
```
**Шаг 4: Проверьте новые поды**
```bash
# Проверка новых сервисов
kubectl get pods -n hrbox -l app=goworker
kubectl get pods -n hrbox -l app=kedoca
kubectl get pods -n hrbox -l app=document-converter
kubectl get pods -n hrbox -l app=chatbox
# Убедитесь что старый websocket удален
kubectl get pods -n hrbox -l app=websocket # Должно быть пусто
```
### Breaking Changes
⚠️ **Критические изменения, требующие действий:**
1. **WebSocket → Chatbox**: Обязательное переименование конфигурации
- Service name изменился с `{chart}-websocket` на `{chart}-chatbox`
- Если есть зависимости от старого имени сервиса - обновите их
2. **Новые обязательные сервисы**: Goworker, Kedoca, Document Converter всегда деплоятся
- Требуются дополнительные ресурсы кластера
- Проверьте доступность ресурсов перед обновлением
3. **Новый секрет**: `secrets.servicesInternalSecret` обязателен
- Приложение не запустится без этого секрета
- Сгенерируйте перед деплоем
4. **OpenAI удален**: Используйте HRBox Hub для AI интеграций
- Миграция на Hub API требуется если использовали OpenAI
### Notes
- Все образы сервисов используют registry: `cr.yandex/crphnph9c2s776j32sjd/`
- Для работы Kedoca с сертификатами создайте Kubernetes Secret и укажите в `kedoca.secretName`
- Goworker экспортирует метрики Prometheus на `/metrics` (порт 8686)
- Document Converter требует больше ephemeral storage (512Mi-1024Mi)
---
## [1.2.0] - Previous version
Упрощенный Helm chart для on-premise установок HRBox.
### Initial Features
- Базовые компоненты: web, worker, websocket, geonames, conductor
- PostgreSQL, Redis, NATS JetStream
- Ingress с TLS
- ConfigMaps и resource limits
- Migration и update jobs
---
[2.0.0]: #200---2026-01-30
[1.2.0]: #120---previous-version
+3 -1
View File
@@ -30,8 +30,10 @@ kubectl create secret tls hrbox-tls --cert=cert.pem --key=key.pem
- **cookieValidationKey** — 32 байта в hex (например: `openssl rand -hex 16`)
- **encryptionKey** — 64 байта в base64 (например: `openssl rand -base64 48`)
- **servicesInternalSecret** — 64 байта в base64 (например: `openssl rand -base64 48`)
- **chatbox.wrappingKey** — 32 символа в hex (например: `openssl rand -hex 16`)
Эти ключи используются для защиты cookie и шифрования данных.
Эти ключи используются для защиты cookie, шифрования данных, межсервисной коммуникации и шифрования чатов.
### 4. Заполните обязательные параметры в `values.yaml`