chart 3.0

This commit is contained in:
2026-09-05 19:07:31 +06:00
parent efc506e5de
commit 67786a0160
31 changed files with 348 additions and 773 deletions
+166 -203
View File
@@ -1,57 +1,44 @@
---
# ============================================================================
# HRBox — конфигурация on-premise установки
# ============================================================================
# Конфигурация HRBox для установки в своём кластере.
#
# Минимум, который нужно заполнить перед первым деплоем:
# Заполните перед первой установкой:
# ingress.host домен, по которому будет открываться HRBox
# app.defaultTenantHostname тот же домен
# app.postgres.* подключение к PostgreSQL
# app.s3.* хранилище файлов
# app.smtp.* почта
# app.hub.token токен HRBox Hub, выдают сотрудники HRBox
# secrets.* три ключа, генерируются openssl
# app.chatbox.wrappingKey ключ шифрования чатов
# app.nanabushPlayer.keys.* два ключа плеера курсов
#
# ingress.host домен инсталляции
# app.defaultTenantHostname тот же домен
# app.postgres.* подключение к PostgreSQL
# app.s3.* S3-совместимое хранилище
# app.smtp.* почта
# app.hub.token токен HRBox Hub (выдаёт HRBox)
# secrets.* три сгенерированных ключа
# app.chatbox.wrappingKey ключ шифрования чатов
# app.nanabushPlayer.keys.* два ключа плеера курсов
#
# Чарт проверяет их на этапе рендера и падает с понятной ошибкой, если
# что-то не заполнено, — до того, как в кластере появятся поды.
#
# Команды генерации ключей перечислены рядом с каждым полем и целиком —
# в README, раздел «Секреты».
# ============================================================================
# Если что-то из этого не заполнено, helm остановится и напишет, чего не
# хватает. Команды генерации ключей — в README, раздел «Секреты».
# Переопределение базового имени объектов. По умолчанию — имя чарта (hrbox),
# то есть hrbox-web, hrbox-worker и так далее. Менять на работающей установке
# нельзя: selector у Deployment неизменяем.
# Базовое имя объектов. Пусто — имя чарта: hrbox-web, hrbox-worker и т.д.
# На уже работающей установке менять нельзя.
nameOverride: ""
# ============================================================================
# Образы
# ============================================================================
# Все образы собраны в одном месте: обновление версии сервиса — это правка
# одной строки здесь, а не поиск по шаблонам.
# --- Образы ---------------------------------------------------------------
image:
# Основное приложение (PHP-FPM, nginx, worker, conductor-задачи, миграции).
# Приложение: PHP-FPM, nginx, worker, миграции.
# Доступ к реестру выдают сотрудники HRBox.
hrbox: "cr.yandex/crphnph9c2s776j32sjd/hrbox:latest"
# Чат и вебсокеты
chatbox: "cr.yandex/crphnph9c2s776j32sjd/hrbox-chatbox:5.18"
# Интеграции с мессенджерами, пуши, синхронизация оргструктуры
# Мессенджеры, пуши, синхронизация оргструктуры
goworker: "cr.yandex/crphnph9c2s776j32sjd/hrbox-goworker:3.21.2"
# Электронная подпись (КЭДО, МЧД)
# Электронная подпись: КЭДО, МЧД
kedoca: "cr.yandex/crphnph9c2s776j32sjd/hrbox-kedoca:1.0.6"
# Справочник городов, стран и часовых поясов
# Справочник городов, стран, часовых поясов
geonames: "cr.yandex/crphnph9c2s776j32sjd/hrbox-geonames:3.3"
# Конвертация документов и обработка изображений
# Конвертация документов и изображений
fileProcessor: "cr.yandex/crphnph9c2s776j32sjd/hrbox-file-processor:1.4.6"
# Планировщик задач по расписанию
conductor: "cr.yandex/crphnph9c2s776j32sjd/hrbox-conductor:2.2.0"
# Плеер учебных материалов (SCORM, cmi5, xAPI, нативные курсы).
# Тег обязателен и не может быть latest: из него выводится версия плеера,
# которую HRBox кладёт в launch-тикет.
# Плеер курсов. Нужен конкретный тег, latest не подходит:
# из тега берётся версия плеера.
nanabushPlayer: "cr.yandex/crphnph9c2s776j32sjd/nanabush-player:1.0.11"
# Инфраструктура
@@ -59,48 +46,43 @@ image:
nats: "nats:2.10"
natsConfigReloader: "natsio/nats-server-config-reloader:0.6.2"
phpFpmExporter: "cr.yandex/crpnn6fi85p3dauha6nc/php-fpm_exporter:latest"
# Используется только init-контейнером джобы миграций (ждёт готовности БД)
# Только для джобы миграций: ждёт готовности базы
postgresClient: "postgres:14-alpine"
# Используется только при app.tracing.enabled
# Только при app.tracing.enabled
otelCollector: "otel/opentelemetry-collector:0.109.0"
pullPolicy: IfNotPresent
# Секреты доступа к приватному Docker-реестру.
# Создаются отдельно, см. README, шаг 1.
# Secret с доступом к реестру образов. Создаётся отдельно, см. README, шаг 1.
imagePullSecrets:
- name: regsecret
# ============================================================================
# Приложение
# ============================================================================
# --- Приложение -----------------------------------------------------------
app:
# Основной домен инсталляции. Должен совпадать с ingress.host.
# Домен установки. Должен совпадать с ingress.host.
defaultTenantHostname: "hrbox.example.com"
# Имя инстанса — попадает в логи и метрики, помогает различать установки.
# Имя установки, видно в логах и метриках
instanceName: "onprem"
# Режим одного арендатора. "1" — вся установка обслуживает одну компанию.
# "1" — установка обслуживает одну компанию
singleTenant: "0"
# Frontend 2: "true" — включён (по умолчанию), "false" — старый интерфейс.
# "true" — новый интерфейс, "false" — старый
front2: "true"
# Отдельный домен авторизации. Для on-premise почти всегда пусто.
# Отдельный домен авторизации. Для on-premise обычно пусто.
authHost: ""
# "0" — production, "1" — отладка. В production всегда "0".
# "0" — production, "1" — отладка
debug: "0"
# Принудительный https во всех сгенерированных ссылках.
# Подставлять https во всех ссылках, которые генерирует приложение
forceHttps: "true"
# Количество реплик.
# web 2-10, по числу пользователей
# worker 2-5, фоновые задачи
# chatbox 2-6, real-time
# остальные обычно хватает 1-2
# Число подов каждого сервиса.
# web — по числу пользователей, worker — по объёму фоновых задач,
# chatbox — по числу открытых вкладок, остальным обычно хватает 1-2.
replicas:
web: 2
worker: 2
@@ -111,43 +93,41 @@ app:
fileProcessor: 1
fileProcessorVideo: 1
# Своя политика конфиденциальности и правила использования.
# При enabled: false приложение показывает ссылки HRBox.
# Свои ссылки на политику конфиденциальности и правила использования.
# false — показываются ссылки HRBox.
customPolicy:
enabled: false
# privacyUrl: "https://example.com/privacy"
# termsUrl: "https://example.com/terms"
# --- PostgreSQL -----------------------------------------------------------
# Требуется PostgreSQL 14+. Для отказоустойчивости настройте репликацию.
# --- PostgreSQL ---------------------------------------------------------
# Нужен PostgreSQL 14 или новее. Чарт базу не разворачивает.
postgres:
host: "postgresql"
port: "5432"
database: "hrbox"
user: "hrbox"
# Пароль попадает в Secret чарта, а не в env-блок Deployment.
# Попадает в Secret, в спеке подов пароля нет
password: ""
# "true", если база работает на расширении Citus (шардирование).
# "true", если база на Citus (шардирование)
citus: "false"
# --- Redis / Dragonfly ----------------------------------------------------
# Хранит сессии, кеш и очереди плеера курсов. Потеря данных не критична,
# но разлогинивает пользователей и сбрасывает незавершённые события плеера.
#
# Пусто — используется Dragonfly из этого же релиза. Заполняйте, только
# если Redis внешний (тогда обычно dragonfly.enabled: false).
# --- Redis / Dragonfly --------------------------------------------------
# Сессии, кеш и очереди плеера курсов.
# Пусто — используется Dragonfly из этого же релиза.
# Адрес указывают, если Redis внешний (тогда обычно dragonfly.enabled: false).
redis:
host: ""
port: "6379"
# --- NATS JetStream -------------------------------------------------------
# Пусто — NATS из этого же релиза.
# --- NATS ---------------------------------------------------------------
# Пусто — используется NATS из этого же релиза.
# Внешний кластер: nats://node1:4222,nats://node2:4222,nats://node3:4222
nats:
url: ""
# --- S3 -------------------------------------------------------------------
# Подходят AWS S3, MinIO, Yandex Object Storage, VK Cloud Storage.
# --- S3 -----------------------------------------------------------------
# Подойдёт AWS S3, MinIO, Yandex Object Storage, VK Cloud Storage.
s3:
# MinIO: http://minio:9000
# Yandex: https://storage.yandexcloud.net
@@ -158,12 +138,12 @@ app:
secret: ""
region: "us-east-1"
version: "latest"
# "true" для MinIO и self-hosted S3, "false" для AWS S3
# "true" для MinIO и своего S3, "false" для AWS S3
pathStyle: "true"
multipart: "true"
prefix: ""
# --- Почта ----------------------------------------------------------------
# --- Почта --------------------------------------------------------------
smtp:
host: "smtp.example.com"
# 25 — без шифрования, 587 — STARTTLS, 465 — SSL/TLS
@@ -177,33 +157,33 @@ app:
sslAllowSelfSigned: "true"
sslVerifyPeer: "false"
# --- Мониторинг ошибок ----------------------------------------------------
# --- Sentry -------------------------------------------------------------
sentry:
dsn: ""
environment: "production"
# Отдельные DSN для подсистем. Пусто — используется общий dsn.
# Пусто — используется общий dsn
launchpadDsn: ""
conductorDsn: ""
# У этих двух общего fallback нет: пусто означает «не отправлять».
# Здесь пусто означает «не отправлять»
goworkerDsn: ""
chatboxDsn: ""
# --- Внутренние сервисы ---------------------------------------------------
# Пустой url означает сервис из этого же релиза: адрес собирается из имени,
# которое создаёт чарт. Заполняйте, только если вынесли сервис наружу.
# --- Внутренние сервисы -------------------------------------------------
# Пустой url — сервис берётся из этого же релиза.
# Заполняют, если сервис вынесен наружу.
geonames:
url: ""
goworker:
url: ""
# Минимальный интервал между push-уведомлениями одному пользователю
# Не чаще одного push одному пользователю за этот интервал
pushMinInterval: "5m"
kedoca:
url: ""
# Пароль корневого сертификата, который сервис создаёт при первом запуске
rootCaPass: "hrbox"
# "gost" (ГОСТ, КриптоПро) или "openssl"
# "gost" (КриптоПро) или "openssl"
engine: "gost"
# "gost2012_256" для ГОСТ, "rsa" для OpenSSL
algorithm: "gost2012_256"
@@ -211,81 +191,79 @@ app:
pkeyopt: "paramset:A"
# Служба меток времени
tspUrl: "http://qs.cryptopro.ru/tsp/tsp.srf"
# Kubernetes Secret с сертификатами УЦ. Если задан — монтируется в /ca-cert.
# Secret с сертификатами УЦ. Если задан, монтируется в /ca-cert.
secretName: ""
fileProcessor:
# Сколько документов конвертировать одновременно в одном поде
docconvMaxParallelTasks: "1"
# Сколько изображений ресайзить одновременно (пул конвертации видео)
# Сколько изображений обрабатывать одновременно в поде конвертации видео
imageResizeMaxParallel: "20"
# --- Конвертация видео ----------------------------------------------------
# Отдельный пул подов: конвертация видео требует много CPU и диска и
# выносится на выделенные ноды, чтобы не мешать остальным задачам.
# --- Конвертация видео --------------------------------------------------
# Отдельные поды: видео требует много CPU и диска, поэтому его выносят
# на выделенные ноды.
videoConverter:
enabled: false
# Внутренний адрес HRBox, по которому конвертер забирает и отдаёт файлы.
# Пусто — берётся http://<релиз>-web.
# Внутренний адрес HRBox, откуда конвертер берёт и куда отдаёт файлы.
# Пусто — http://<релиз>-web.
internalUrl: ""
# Куда планировать поды конвертера. Пусто — без ограничений.
# На каких нодах запускать. Пусто — на любых.
# Пример: role: converter-dedicated
nodeSelector: {}
# role: converter-dedicated
tolerations: []
# Пример:
# - key: dedicated
# operator: Equal
# value: video-converter
# effect: NoSchedule
tolerations: []
# --- Чат ------------------------------------------------------------------
# --- Чат ----------------------------------------------------------------
chatbox:
# Часть ключа асимметричного шифрования чатов, 32 символа.
# Часть ключа шифрования чатов, 32 символа.
# Генерация: openssl rand -hex 16
wrappingKey: ""
# --- Видеозвонки ----------------------------------------------------------
# --- Видеозвонки --------------------------------------------------------
livekit:
url: ""
apiKey: ""
apiSecret: ""
# --- Nanabush Player ------------------------------------------------------
# Плеер учебных материалов: SCORM 1.2/2004, cmi5, xAPI, нативные курсы,
# тесты и эссе. Полное описание контракта — docs/nanabush-player-deployment.md
# в репозитории HRBox.
# --- Nanabush Player ----------------------------------------------------
# Плеер учебных материалов: SCORM 1.2 и 2004, cmi5, xAPI, нативные курсы,
# тесты и эссе.
#
# В облаке плеер живёт на отдельном поддомене. В on-premise выделенного
# поддомена нет, поэтому плеер монтируется на основной домен под путём
# basePath. Практическое следствие: cookie HRBox видны содержимому курсов
# (один origin). Если для сторонних SCORM-пакетов нужна изоляция — заводите
# отдельный поддомен и обращайтесь в HRBox за облачной схемой.
# В облаке плеер стоит на отдельном поддомене, в on-premise поддомена нет,
# поэтому он живёт на основном домене по пути basePath. Домен общий, значит
# cookie HRBox доступны содержимому курсов. Если нужна изоляция сторонних
# SCORM-пакетов, обратитесь в HRBox за схемой с отдельным поддоменом.
nanabushPlayer:
# Отдавать ли учебные материалы через плеер. false — старый проигрыватель.
# false — материалы открываются старым проигрывателем
enabled: true
# Путь монтирования на основном домене. Пустой и "/" запрещены: корень
# занят самим HRBox.
# Путь на основном домене. Корень "/" занят самим HRBox.
basePath: "/nanabush-player"
# Issuer launch-тикета. Пусто — https://<ingress.host>/lms/player.
# Issuer launch-тикета. Пусто — https://<ingress.host>/lms/player
issuer: ""
contractVersion: "v0-current"
# Ключи плеера. Оба обязательны и должны отличаться друг от друга.
# Оба ключа обязательны и должны быть разными.
# Генерация каждого: openssl rand -base64 48
keys:
ticketHs256: ""
sessionHs256: ""
# Необязательное кольцо ключей для ротации без простоя:
# "kid1:секрет1,kid2:секрет2", текущий ключ подписи — первым.
# Секрет не должен содержать запятую (используйте base64url).
# Набор ключей для ротации без простоя, необязательный:
# "kid1:секрет1,kid2:секрет2". Первым идёт ключ, которым подписывают
# сейчас. Запятая внутри секрета недопустима, используйте base64url.
ticketKeys: ""
# Доля запусков, уходящих в новый плеер. 100 — все.
rollout:
# Какая доля запусков идёт в новый плеер. 100 — все.
percent: 100
# Разрешить откат на старый проигрыватель, если плеер недоступен
# Открывать материал старым проигрывателем, если плеер не ответил
legacyFallback: true
allowedContentTypes:
- document
@@ -299,7 +277,7 @@ app:
- native
- native_quiz
- native_essay
# "*" — все арендаторы, включая будущих
# "*" — все компании, включая новые
allowedTenants:
- "*"
@@ -308,26 +286,25 @@ app:
name: ""
port: 8094
# Публиковать ли путь плеера на основном Ingress.
# Выключать имеет смысл только при аварийном откате.
# Публиковать ли путь плеера на общем Ingress.
# Выключают только при откате.
ingress:
enabled: true
deployment:
# Создавать ли Deployment и Service плеера.
# Создавать ли Deployment и Service плеера
enabled: true
replicas: 1
terminationGracePeriodSeconds: 120
# Образ плеера должен уметь работать под путём (а не только в корне
# домена). Если ставите старый образ без этой поддержки — переключите
# в false, и чарт остановит рендер с объяснением вместо неработающего
# плеера в кластере.
# Умеет ли образ плеера работать не в корне домена, а по пути.
# Со старым образом без такой поддержки поставьте false — чарт
# остановит установку вместо того, чтобы развернуть нерабочий плеер.
binaryCapabilities:
basePath: true
# Secret с ключами плеера. create: false — Secret создаётся вне чарта
# (например, внешним vault-оператором), чарт только ссылается на него.
# Secret с ключами плеера.
# create: false — Secret заводят вне чарта, чарт только ссылается.
existingSecret:
create: true
name: "hrbox-nanabush-player"
@@ -338,48 +315,46 @@ app:
ticketKeys: ""
ticket:
# Время жизни launch-тикета, секунды
# Сколько живёт launch-тикет, секунды
ttlSeconds: 300
# Время жизни учётных данных обратного канала: сессия плеера + 2 минуты
# на расхождение часов
# Сколько живут учётные данные обратного канала: сессия плеера плюс
# 2 минуты на расхождение часов
credentialTtlSeconds: 28920
maxLifetime: "5m"
sessionTtl: "8h"
# Только на время первой раскатки кольца ключей: до какого момента
# Нужно только при первом переходе на набор ключей: до какого момента
# (RFC3339) принимать тикеты без kid. Пусто — не принимать.
keylessAcceptedUntil: ""
redis:
# false — URL собирается из app.redis.
# true — полный redis:// или rediss:// URL читается из внешнего
# Secret (нужно для ACL, пароля или TLS) и требует
# existingSecret.create: false.
# false — адрес собирается из app.redis.
# true — полный redis:// или rediss:// URL берётся из внешнего Secret
# (нужно для пароля, ACL или TLS), требует existingSecret.create: false
urlFromExistingSecret: false
database: 0
# Итоговый префикс: hrbox:<namespace>:<suffix> — разводит несколько
# релизов HRBox на одном Dragonfly.
# Полный префикс: hrbox:<namespace>:<суффикс>.
# Разделяет несколько установок HRBox на одном Redis.
keyPrefixSuffix: "nanabush-player"
# Обращения плеера обратно в HRBox: за пакетом курса и с отчётами
backchannel:
# Внутрикластерный адрес HRBox. Пусто — <релиз>-web.
# Внутренний адрес HRBox. Пусто — <релиз>-web.
host: ""
schemes: "http"
allowPrivateIps: true
packageFetchMaxBytes: "5242880"
# Транспорт должен вмещать самый большой поддерживаемый медиафайл
# Должно вмещать самый большой медиафайл курса
packageContentMaxBytes: "2147483648"
scormPackageMaxBytes: "1073741824"
# Пусто — ограничение по числу файлов в SCORM-пакете берётся из
# умолчаний приложения (4000)
# Пусто — берётся значение приложения (4000 файлов)
scormPackageMaxFiles: ""
packageFetchTimeout: "15s"
# Таймаут покрывает всю передачу, включая отдачу байтов браузеру
# учащегося, поэтому упирается в скорость его канала. Двух минут
# не хватало на крупное видео.
# Считается до конца передачи файла в браузер учащегося, поэтому
# зависит от скорости его интернета
packageStreamTimeout: "20m"
reportTimeout: "30s"
# Очередь отправки учебных событий в HRBox.
# Очередь отправки учебных событий в HRBox
forwarder:
queueSize: "1000"
workers: "4"
@@ -398,8 +373,7 @@ app:
level: info
format: json
# Метрики отдаются на отдельном порту, который не публикуется наружу:
# содержимое курсов не должно читать эксплуатационные метрики.
# Метрики отдаются на отдельном порту и наружу не публикуются
metrics:
enabled: true
port: 9090
@@ -418,22 +392,22 @@ app:
timeoutSeconds: 2
failureThreshold: 3
# --- Фоновые задачи -------------------------------------------------------
# Формат: "топик:количество-воркеров"
# --- Фоновые задачи -----------------------------------------------------
# Формат: "очередь:сколько воркеров"
launchpad:
topics: "launcher:1,file-processor:1,image-processor:1,send-mail:1,send-im:1,send-bell:1,send-push:1,backup:1,cleaning:1"
sms:
senderName: "HRBOX"
# --- Внешние интеграции ---------------------------------------------------
# --- Внешние интеграции -------------------------------------------------
integrations:
telegram:
# Прямой API Telegram; для установок без доступа к нему укажите прокси
# Если прямого доступа к Telegram нет, укажите адрес прокси
apiUrl: "https://api.telegram.org/bot"
google:
enabled: "false"
# Client ID публичный (уходит в браузер), secret — в Secret чарта
# clientId уходит в браузер, clientSecret попадает в Secret
clientId: "692956564858-ccapt35khk7tmadl17b3879ht2cropp6.apps.googleusercontent.com"
clientSecret: ""
glagol:
@@ -441,8 +415,8 @@ app:
apiUrl: "https://api.glagol.online/glagol-api"
# Привязка мобильных приложений к домену: без неё ссылки из писем и пушей
# открываются в браузере вместо приложения. По умолчанию — штатные
# приложения HRBox; меняйте, только если у вас собственная сборка.
# открываются в браузере, а не в приложении. По умолчанию указаны
# приложения HRBox, меняйте только для своей сборки.
mobileApps:
android:
- packageName: "io.hrbox.hrboxapp"
@@ -461,13 +435,13 @@ app:
clientSecret: ""
verificationToken: ""
# --- HRBox Hub ------------------------------------------------------------
# --- HRBox Hub ----------------------------------------------------------
# Лицензирование и общие сервисы. Токен выдают сотрудники HRBox.
hub:
url: "https://hub.hrbox.io"
token: ""
# --- AI -------------------------------------------------------------------
# --- AI -----------------------------------------------------------------
ai:
docsIndexEnabled: "true"
semanticIndexEnabled: "true"
@@ -476,82 +450,74 @@ app:
folderId: ""
apiKey: ""
# --- Трассировка ----------------------------------------------------------
# Включает OpenTelemetry в PHP и sidecar-коллектор в поде web.
# --- Трассировка --------------------------------------------------------
# Включает OpenTelemetry в PHP и коллектор рядом с подом web
tracing:
enabled: false
exporterUrl: "http://localhost:4318"
# Куда коллектор пересылает трейсы (Tempo, Jaeger)
# Куда коллектор отправляет трейсы: Tempo, Jaeger
tempoUrl: ""
# --- Безопасность ---------------------------------------------------------
# --- Безопасность -------------------------------------------------------
security:
# "true" разрешает встроенному iframe полный доступ к родительскому окну.
# Для production рекомендуется "false".
# "true" даёт встроенному iframe полный доступ к родительскому окну.
# Для production лучше "false".
iframeFullAccess: "false"
# ============================================================================
# Секреты приложения
# ============================================================================
# --- Секреты --------------------------------------------------------------
# Эти значения вместе с паролями из app.* складываются в один Kubernetes
# Secret, а контейнеры читают его через secretKeyRef.
# Secret, поды читают их оттуда.
secrets:
# Имя Secret, созданного вне чарта. Если задано — чарт свой Secret не
# создаёт и берёт все ключи из указанного. Список ключей — в README.
# Имя Secret, созданного вне чарта. Если задано, чарт свой Secret не
# создаёт и берёт ключи из указанного. Список ключей — в README.
existingSecret: ""
# Защита cookie от подделки, 32 символа.
# Генерация: openssl rand -hex 16
cookieValidationKey: ""
# Шифрование данных: пароли интеграций (S3, ADFS и другие).
# ВАЖНО: без этого ключа данные не расшифровать. Не теряйте его.
# Шифрование паролей интеграций в базе.
# Без этого ключа данные не расшифровать, храните копию отдельно.
# Генерация: openssl rand -base64 48
encryptionKey: ""
# Аутентификация вызовов между микросервисами релиза.
# Проверка вызовов между сервисами внутри релиза.
# Генерация: openssl rand -base64 48
servicesInternalSecret: ""
# ============================================================================
# Ingress
# ============================================================================
# --- Ingress --------------------------------------------------------------
ingress:
enabled: true
# Обычно "nginx" или "traefik"
className: "nginx"
# Домен инсталляции. Wildcard (*.hrbox.company.com) — для мультиарендности.
# Домен установки. Для мультиарендности можно wildcard: *.hrbox.company.com
host: "hrbox.example.com"
# Дополнительные аннотации ingress-контроллера
annotations: {}
# Максимальный размер загружаемого файла на общих путях.
# Загрузка оргструктуры из 1С идёт потоком и имеет собственный лимит.
# Максимальный размер загружаемого файла.
# У загрузки оргструктуры из 1С отдельный лимит, он выше.
maxBodySize: "10m"
tls:
enabled: true
# kubectl create secret tls hrbox-tls --cert=cert.pem --key=key.pem
# либо выпуск через cert-manager
# или выпустить сертификат через cert-manager
secretName: "hrbox-tls"
# ============================================================================
# Кластер
# ============================================================================
# --- Кластер --------------------------------------------------------------
cluster:
# Домен служебных имён Kubernetes. Меняйте, только если он нестандартный.
# Домен служебных имён Kubernetes. Менять только если он нестандартный.
domain: "cluster.local"
# ============================================================================
# Ресурсы
# ============================================================================
# Значения близки к продовым. Незаданные поля не рендерятся, поэтому
# компоненту можно оставить только requests.
# --- Ресурсы --------------------------------------------------------------
# Значения близки к тем, что используются в облаке HRBox.
# Можно оставить только requests: незаполненные поля в манифест не попадают.
resources:
# PHP-FPM: HTTP-запросы, API, веб-интерфейс
# PHP-FPM: веб-интерфейс и API
app:
requests:
cpu: "1"
@@ -562,7 +528,7 @@ resources:
memory: "2Gi"
ephemeralStorage: "2Gi"
# nginx в поде web: проксирует запросы в PHP-FPM
# nginx в поде web
nginx:
requests:
cpu: "0.1"
@@ -573,7 +539,7 @@ resources:
memory: "256Mi"
ephemeralStorage: "512Mi"
# Фоновые задачи: конвертация файлов, почта, отчёты
# Фоновые задачи: файлы, почта, отчёты
worker:
requests:
cpu: "0.6"
@@ -645,7 +611,7 @@ resources:
memory: "1Gi"
ephemeralStorage: "2Gi"
# Конвертация видео: тяжёлый профиль, отдельные ноды
# Конвертация видео: тяжёлые поды на отдельных нодах
fileProcessorVideo:
requests:
cpu: "4"
@@ -679,7 +645,7 @@ resources:
cpu: "1"
memory: "2Gi"
# Разовые задачи: миграции, обновление кластера
# Разовые задачи: миграции и обновление кластера
jobs:
requests:
cpu: "0.5"
@@ -690,31 +656,29 @@ resources:
memory: "4Gi"
ephemeralStorage: "256Mi"
# ============================================================================
# NATS JetStream
# ============================================================================
# --- NATS -----------------------------------------------------------------
nats:
# Обязателен для работы HRBox. Выключайте только если ставите NATS отдельно
# и указали его адрес в app.nats.url.
# HRBox без брокера не работает. Выключают, только если NATS ставят
# отдельно и указали его адрес в app.nats.url.
enabled: true
# Для отказоустойчивости — 3 или 5. Должно совпадать с cluster.replicas.
# Для отказоустойчивости 3 или 5. Должно совпадать с cluster.replicas.
replicas: 3
jetstream:
enabled: true
# Хранение в памяти — для небольших установок
# Хранение в памяти: подходит небольшим установкам
memStorage:
enabled: true
size: "2Gi"
# Хранение на диске — для production
# Хранение на диске: для production
fileStorage:
enabled: false
size: "4Gi"
storageDirectory: "/data"
# Для JetStream нужен быстрый диск
# JetStream нужен быстрый диск
storageClassName: "fast-ssd"
cluster:
@@ -722,17 +686,16 @@ nats:
# Должно совпадать с nats.replicas
replicas: 3
# Автоматическая перезагрузка конфигурации без рестарта сервера
# Подхватывает изменения конфигурации без перезапуска NATS
reloader:
enabled: true
terminationGracePeriodSeconds: 120
# ============================================================================
# Dragonfly (Redis-совместимый кеш)
# ============================================================================
# --- Dragonfly ------------------------------------------------------------
# Redis-совместимый кеш.
dragonfly:
# false — если Redis разворачивается отдельно; тогда укажите его в app.redis.
# false — если Redis ставят отдельно; тогда заполните app.redis.host
enabled: true
# Ограничение памяти. Раскомментируйте при необходимости.
# Ограничение памяти
# maxmemory: "256M"