Skip to main content

Deployment & Infrastructure

Docker, CI/CD, and environment configuration for all 22 services. Last updated: 2026-03-19

Architecture Overview

All services run as Docker containers on AWS EKS (Kubernetes) in the eu-central-1 region. Container images are stored in AWS ECR. The platform uses three Kubernetes namespaces mapping to environments:

NamespaceBranchEnvironment
helvia-devdevelopDevelopment
helvia-stgstagingStaging
helviamainProduction

Two exceptions to the EKS-only pattern:

  • hbf-webchat: static frontend deployed to AWS S3 + CloudFront CDN (no container)
  • hbf-notifications: also deployed to Azure AKS (production only, via azure-ci.yml)

Multi-tenant deployments exist for helvia-rag-pipelines (separate K8s deployments for helvia-rag-pipelines, isolved-rag-pipelines, hrwiz-rag-pipelines).

Service Port Map

ServiceInternal Portdocker-compose mappingStart Command
hbf-core80808080:8080java -javaagent:/opt/elastic-apm-agent.jar -jar hbf-core.jar
hbf-bot30003000:3000npm start -- -h 0.0.0.0
hbf-nlp30003000:3000npm run start:prod
hbf-lcm30003000:3000npm run start:prod
hbf-session-manager30003000:3000npm run start:prod
hbf-notifications30003000:3000npm run start:prod
hbf-reports30003000:3000npm run start:prod
hbf-media-manager30303030:3030npm run start:prod
hbf-broadcast30043004:3004npm run apm-start
hbf-event-publisher50005000:5000npm run start
hbf-client-integrationsconfigurablen/anpm run start:prod
hbf-data-retentionn/a (daemon)no portsnpm run start:prod
hbf-statsconfigurableno portsnpm run start
hbf-console30008085:3000serve -s build
hbf-webchatn/a (static)n/an/a
hbf-core-apin/a (library)n/an/a
helvia-rag-pipelines8081n/apoetry run uvicorn app.main:fast_api_app --port 8081 --workers 4
semantic-doc-segmenter80818081:8081poetry run uvicorn app.main:app --host 0.0.0.0 --port 8081 --workers 1
open-bot-framework1986 (HTTP), 1992 (WS)no docker-composenode dist/main
hbf-data-manager30003000:3000npm run start:prod
hbf-knowledge-manager3000no docker-composenpm run start:prod
hbf-lcg1337 (HTTP), configurable (Redis microservice)no docker-composenpm run start:prod

Docker Base Images

ServiceBase Image (build)Base Image (runtime)Notes
hbf-coremaven:3.9.7-eclipse-temurin-21eclipse-temurin:21-jdkJava/Kotlin, multi-stage
hbf-botnode:22-slimnode:22-slimMulti-stage
hbf-nlpnode:22-slimnode:22-slimMulti-stage
hbf-lcmnode:latestnode:latestMulti-stage
hbf-session-managernode:22-slimnode:22-slimMulti-stage
hbf-notificationsnode:22-slimnode:22-slimMulti-stage
hbf-reportsnode:22node:22Multi-stage
hbf-media-managernode:22-slimnode:22-slimMulti-stage
hbf-broadcastnode:18-slimnode:18-slimMulti-stage
hbf-event-publishernode:18.12.1node:18.12.1-slimMulti-stage
hbf-client-integrationsnode:22-slimnode:22-slimMulti-stage
hbf-data-retentionnode:22-slimnode:22-slimMulti-stage
hbf-statsnode:18node:18-slimMulti-stage
hbf-consolenode:22-slimnode:22-slimBuild then serve -s build
hbf-webchatn/an/aNo Dockerfile, static build
hbf-core-apin/an/aLibrary, no Dockerfile
helvia-rag-pipelinespython:3.11.2-slimpython:3.11.2-slimSingle-stage, Poetry + Uvicorn
semantic-doc-segmenterpython:3.11.2-slimpython:3.11.2-slimSingle-stage, Poetry + Uvicorn
open-bot-frameworkn/an/aNo Dockerfile, Node.js direct
hbf-data-managernode:latest (build)node:latest (runtime)Multi-stage; unpinned base image
hbf-knowledge-managernode:22-slimnode:22-slimMulti-stage
hbf-lcgnode:22-slimnode:22-slimMulti-stage, runs as node user

CI/CD Pipeline

All CI/CD runs on GitHub Actions. Image tags use git commit short SHA.

Per-Service CI/CD

ServiceWorkflowsTriggerDeploy TargetRollout TimeoutSpecial
hbf-coreci.yml, tests.ymlpush main/staging/develop; PR staging/developAWS EKS + ECR600sSonarqube, separate isolved deployment
hbf-botci.yml, node.js.yml, release-please.ymlpush main/staging/developAWS EKS + ECR600srelease-please for versioning
hbf-nlpci.ymlpush main/staging/developAWS EKS + ECR900sLonger rollout timeout
hbf-lcmci.ymlpush main/staging/developAWS EKS + ECR600s
hbf-session-managerci.ymlpush main/staging/developAWS EKS + ECR600s
hbf-notificationsci.yml, azure-ci.ymlpush main/staging/developAWS EKS + ECR, Azure AKS600sDual-cloud (AWS + Azure)
hbf-reportsci.ymlpush main/staging/developAWS EKS + ECR600s
hbf-media-managerci.ymlpush main/staging/developAWS EKS + ECR600s
hbf-broadcastci.ymlpush main/staging/developAWS EKS + ECR600s
hbf-event-publisherci.ymlpush main/staging/developAWS EKS + ECR600sNo GITHUB_TOKEN build arg
hbf-client-integrationsci.ymlpush main/staging/developAWS EKS + ECR600s
hbf-data-retentionci.ymlpush main/staging/developAWS EKS + ECR600s
hbf-statsci.ymlpush main/staging/developAWS EKS + ECR600s
hbf-consoleci.ymlpush main/staging/developNone (Sonarqube only)n/aNo deployment in CI
hbf-webchatdeploy-branches.yml, deploy-tags.yml, deploy-isolved.ymlpush develop/staging; v* tagsAWS S3 + CloudFrontn/aStatic CDN deploy
hbf-core-apinodejs.yml, release-please.ymlpush/PR to masterNone (CI only)n/aLibrary, no deployment
helvia-rag-pipelinesci.ymlpush main/staging/developAWS EKS + ECR600sMulti-tenant (helvia, isolved, hrwiz)
semantic-doc-segmenterci.ymlpush main/staging/developAWS EKS + ECR600sSonarQube audit
open-bot-frameworknonen/an/an/aNo CI/CD configured
hbf-data-managerci.ymlpush main/staging/developAWS EKS + ECR600sSonarQube audit
hbf-knowledge-managernonen/an/an/aNo CI/CD configured
hbf-lcgnonen/an/an/aNo CI/CD configured

Build Args

Most Node.js services pass GITHUB_TOKEN (from PAT_TOKEN secret) as a Docker build arg for authenticating to the GitHub npm registry (@helvia scope). Exception: hbf-event-publisher (no build arg needed).

Data Stores per Service

ServicePrimary DBConnection Config
hbf-coreMongoDBMONGODB_URL
hbf-nlpMySQL (TypeORM)TYPEORM_HOST/PORT/USERNAME/PASSWORD/DATABASE
hbf-lcmMySQL (TypeORM)TYPEORM_HOST/PORT/USERNAME/PASSWORD/DATABASE
hbf-notificationsMySQL (TypeORM)TYPEORM_HOST/PORT/USERNAME/PASSWORD/DATABASE
hbf-event-publisherMySQL (TypeORM)TYPEORM_HOST/PORT/USERNAME/PASSWORD/DATABASE
hbf-reportsMySQLDB_HOST/PORT/USERNAME/PASSWORD/NAME
hbf-media-managerMySQLDB_HOST/PORT/USERNAME/PASSWORD/NAME
hbf-session-managerMySQLDB_HOST/PORT/USERNAME/PASSWORD/NAME
helvia-rag-pipelinesMySQL (SQLAlchemy)MYSQL_URL (connection string)
semantic-doc-segmenterMySQL (PyMySQL)MYSQL_URL (connection string)
open-bot-frameworkPostgreSQL (TypeORM)TYPEORM_HOST/PORT/USERNAME/PASSWORD/DATABASE
hbf-data-managerMySQL + KafkaMYSQL_HOST/PORT/USER/PASSWORD/DATABASE, KAFKA_BROKERS
hbf-knowledge-managern/aStateless; all state in hbf-core
hbf-lcgMySQL (TypeORM) + Redis (optional cache)TYPEORM_HOST/PORT/USERNAME/PASSWORD/DATABASE (lcm DB), CACHE_REDIS_URL
hbf-botRedisREDIS_HOST
hbf-broadcastn/aCalls hbf-core API
hbf-statsn/aCalls hbf-core API
hbf-data-retentionn/aCalls hbf-core API
hbf-client-integrationsn/aCalls hbf-core API
hbf-consolen/aFrontend SPA
hbf-webchatn/aFrontend widget
hbf-core-apin/aLibrary

Environment Variables Reference

Common Patterns

Most Node.js services share these env var patterns:

Core API integration:

  • CORE_URL / CORE_BASEURL / HBF_CORE_URL -- hbf-core base URL
  • CORE_TOKEN / HBF_CORE_ACCESS_TOKEN / HBF_CORE_API_TOKEN -- static service token

Logging (Pino):

  • PINO_LOGGER_USE -- enable/disable (true/false)
  • PINO_LOGGER_LEVEL -- trace/debug/info/warn/error
  • PINO_LOGGER_AUTO_LOGGING -- auto-log HTTP requests (true/false)

Elastic APM:

  • ELASTIC_APM_ACTIVE -- enable/disable
  • ELASTIC_APM_SERVER_URL -- APM server endpoint
  • ELASTIC_APM_SECRET_TOKEN -- auth token
  • ELASTIC_APM_SERVICE_NAME -- service identifier
  • ELASTIC_APM_ENVIRONMENT -- environment name

TypeORM (NestJS services):

  • TYPEORM_CONNECTION -- mysql
  • TYPEORM_HOST / TYPEORM_PORT / TYPEORM_USERNAME / TYPEORM_PASSWORD / TYPEORM_DATABASE
  • TYPEORM_AUTORUN_MIGRATIONS -- auto-run on startup

DB config (non-TypeORM services):

  • DB_HOST / DB_PORT / DB_USERNAME / DB_PASSWORD / DB_NAME

hbf-core

VarRequiredDescription
MONGODB_URLyesMongoDB connection string
ROOT_LOGGING_LEVELnoLogging level (default: INFO)

hbf-bot

VarRequiredDescription
CORE_BASEURLyeshbf-core base URL
CORE_TOKENyesService auth token
REDIS_HOSTyesRedis hostname
KAFKAJS_NO_PARTITIONER_WARNINGnoSuppress Kafka warning

hbf-nlp

VarRequiredDescription
SERVICE_PORTyesListen port (default: 2055)
HBF_CORE_URLyeshbf-core base URL
HBF_CORE_API_TOKENyesCore API token
AZURE_OPENAI_ENDPOINTyesAzure OpenAI endpoint
AZURE_OPENAI_DEPLOYMENT_NAMEyesModel deployment (e.g. gpt-4o-mini)
AZURE_OPENAI_API_VERSIONyesAPI version
AZURE_OPENAI_API_KEYyesAPI key
SESSION_ANALYSIS_DEFAULT_MODELnoDefault LLM model
JWT_SECRETyesJWT signing key
CACHE_REDIS_ENABLEDnoEnable Redis cache
CACHE_REDIS_URLconditionalRedis URL (if cache enabled)
TYPEORM_*yesMySQL connection (TypeORM pattern)
NOTIFICATIONS_SERVICE_URLnohbf-notifications URL

helvia-rag-pipelines

VarRequiredDescription
MYSQL_URLyesSQLAlchemy MySQL connection string
QDRANT_API_URLyesQdrant vector DB URL
QDRANT_BACKEND_TYPEnoBackend type (default: api)
SQLALCHEMY_POOL_SIZEnoConnection pool size
SQLALCHEMY_POOL_OVERFLOWnoPool overflow limit
VECTOR_DBnoVector DB selection (qdrant)

hbf-lcm

VarRequiredDescription
TYPEORM_*yesMySQL connection (TypeORM pattern)
REDIS_ENABLEnoEnable Redis caching

hbf-session-manager

VarRequiredDescription
PORTyesListen port (default: 3000)
DB_*yesMySQL connection (DB_ pattern)
CORE_URLyeshbf-core base URL
CORE_TOKENyesCore API token
NLP_URLyeshbf-nlp URL
CHAT_SESSION_CHECK_INTERVAL_IN_MINSnoSession check interval
BOT_EXPIRE_CONVERSATION_AFTER_DEFAULT_VALUEnoConversation expiry (minutes)
EVENT_PUBLISHER_URLnohbf-event-publisher URL
EMAIL_*noSMTP settings for email
CONSOLE_URLnohbf-console URL

hbf-notifications

VarRequiredDescription
SERVICE_PORTyesListen port (default: 2048)
TYPEORM_*yesMySQL connection (TypeORM pattern)
CORE_URLyeshbf-core base URL
JWT_SECRETyesJWT signing secret

hbf-reports

VarRequiredDescription
PORTyesListen port (default: 3000)
DB_*yesMySQL connection (DB_ pattern)
CORE_URLyeshbf-core base URL
CORE_TOKENyesCore API token
CONSOLE_URLnohbf-console URL
EMAIL_*noSMTP settings for scheduled reports
RUN_MIGRATIONSnoRun DB migrations on startup

hbf-media-manager

VarRequiredDescription
PORTyesListen port (default: 3030)
DB_*yesMySQL connection (DB_ pattern)
CORE_URLyeshbf-core base URL
CORE_TOKENyesCore API token

hbf-broadcast

VarRequiredDescription
HOSTyesBind address (0.0.0.0)
PORTyesListen port (default: 3004)
CORE_URLyeshbf-core base URL
CORE_TOKENyesCore API token
SCAN_INTERVAL_TIMEyesBroadcast scan interval (seconds)
FB_GRAPH_VERSIONyesFacebook Graph API version
FB_MAX_USERS_PER_BATCHyesFacebook batch size
TEAMS_MAX_USERS_PER_BATCHyesTeams batch size
VIBER_MAX_USERS_PER_BATCHyesViber batch size

hbf-event-publisher

VarRequiredDescription
TYPEORM_*yesMySQL connection (TypeORM pattern)

hbf-data-retention

VarRequiredDescription
HBF_CORE_URLyeshbf-core base URL
HBF_CORE_ACCESS_TOKENyesCore API token
EXECUTION_INTERVAL_IN_HOURSyesRetention job interval (hours)
THRESHOLD_OF_DELETION_RETIRESnoDeletion retry count

hbf-stats

VarRequiredDescription
CORE_URLyeshbf-core base URL
CORE_TOKENyesCore API token
SERVICE_PORTnoListen port
EXECUTION_TIME_INTERVAL_MILLISECONDSnoStats computation interval
BATCH_SIZEnoProcessing batch size
BATCH_COOLDOWN_SECONDSnoCooldown between batches

hbf-client-integrations

Has extensive env vars for per-client CRM/API integrations (Dynamics 365, Zendesk, Pobuca, Novibet). Each integration has DEV/UAT/PROD variants. Key vars:

VarRequiredDescription
PORTyesListen port
BASE_URLyesService base URL
CORE_URLyeshbf-core base URL
CORE_TOKENyesCore API token
CORE_TOKEN_SECRETyesCore token secret

Plus per-integration OAuth/API credentials (CLIENT_ID, CLIENT_SECRET, CRM_URL, etc.) for each environment tier.

hbf-console

React SPA with REACT_APP_* build-time env vars. Key categories:

  • API URLs: REACT_APP_API_CORE_URL, REACT_APP_API_LIVECHAT_URL, REACT_APP_API_REPORTS_URL, REACT_APP_API_MEDIA_URL, REACT_APP_API_NOTIFICATIONS_URL, REACT_APP_API_NLP_SERVICE_URL
  • OAuth: REACT_APP_GOOGLE_CLIENT_ID, REACT_APP_MICROSOFT_CLIENT_ID
  • Feature flags: ~25 REACT_APP_*_ENABLED/REACT_APP_*_DISABLED toggles
  • White-label: REACT_APP_HRWIZ_* flags for HRWiz variant

hbf-webchat

No env vars at runtime (static). Build-time public_path for iSolved CDN variants.

hbf-core-api

Library package, no deployment env vars. CI only: CI=true for test runner.

open-bot-framework

VarRequiredDescription
PORTnoHTTP listen port (default: 1986)
SOCKET_PORTnoWebSocket port (default: 1992)
DIRECTLINE_HOSTyesHostname used in DirectLine stream URLs
DIRECTLINE_REGIONyesRegion tag
DIRECTLINE_SOCKET_URLyesWebSocket base URL returned to clients
JWT_SECRETyesJWT signing secret for DirectLine tokens
JWT_EXPIRATION_SECONDSnoToken lifetime in seconds (default: 3600)
TYPEORM_CONNECTIONyesDB driver — must be postgres
TYPEORM_HOSTyesPostgreSQL host
TYPEORM_PORTyesPostgreSQL port
TYPEORM_USERNAMEyesPostgreSQL user
TYPEORM_PASSWORDyesPostgreSQL password
TYPEORM_DATABASEyesPostgreSQL database name (default: obf)
TYPEORM_AUTORUN_MIGRATIONSnoRun migrations on startup (default: true)
STORAGE_ACCESS_KEYconditionalS3 access key (required for file uploads)
STORAGE_SECRET_KEYconditionalS3 secret key (required for file uploads)
STORAGE_BUCKETconditionalS3 bucket name (required for file uploads)
STORAGE_REGION_S3noS3 region (default: us-east-1, AWS S3 only)
STORAGE_FORCE_S3_PATH_STYLEnoPath-style URLs — set true for MinIO/custom (default: true)
STORAGE_ENDPOINTnoS3-compatible endpoint (omit for AWS)
REDIS_URInoRedis connection URI (default: redis://localhost:6379)
ATOMIC_OPERATIONS_IMPLEMENTATIONnoCounter backend: redis or memory (default: redis)

semantic-doc-segmenter

VarRequiredDescription
MYSQL_URLyesPyMySQL connection string
JWT_SECRETyesJWT auth signing key
LOG_LEVEL_APPnoApp log level (default: DEBUG)
GOOGLE_APPLICATION_CREDENTIALSconditionalGoogle Cloud service account JSON path
OPENAI_API_KEYconditionalOpenAI API key
GEMINI_API_KEYconditionalGoogle Gemini API key
GEMINI_MODELnoGemini model identifier
GEMINI_PROMPT_TEXT_ONLY_PATHnoText-only prompt template path
GEMINI_PROMPT_TEXT_AND_IMAGES_PATHnoText+images prompt template path
GEMINI_LOG_PROMPTnoLog Gemini prompts (default: false)
GEMINI_DEBUG_SAVE_OVERLAY_PDFnoDebug overlay PDF (default: false)
GEMINI_DEBUG_OVERLAY_DIRnoOverlay PDF output directory
USE_GOOGLE_LANGUAGE_DETECTIONnoUse Google vs FastText for lang detection
FASTTEXT_LANGUAGE_DETECT_MODELnoFastText model variant (lite/full)
LANGUAGE_DETECT_GOOGLE_TIMEOUT_SECONDSnoGoogle lang detection timeout
SEGMENTER_MAX_ARTICLE_SIZEnoMax article segment size (default: 2000)
AWS_S3_BUCKET_NAMEyesS3 bucket for images
AWS_REGION_NAMEyesAWS region
AWS_ACCESS_KEY_IDyesAWS access key
AWS_SECRET_ACCESS_KEYyesAWS secret key
IMAGE_HANDLING_MODEnoImage handling backend (s3)
FTLANG_CACHEnoFastText cache directory

hbf-data-manager

VarRequiredDescription
PORTnoHTTP listen port (default: 3000)
NODE_ENVyesRuntime environment
CORE_URLyeshbf-core base URL
CORE_TOKENyesCore API auth token
MYSQL_HOSTyesMySQL hostname
MYSQL_PORTnoMySQL port (default: 3306)
MYSQL_USERyesMySQL username
MYSQL_PASSWORDyesMySQL password
MYSQL_DATABASEyesMySQL database name
DB_SYNCHRONIZEnoTypeORM schema sync — disable in prod
TYPEORM_AUTORUN_MIGRATIONSnoRun migrations on startup
KAFKA_BROKERSyesComma-separated Kafka broker list
KAFKA_CLIENT_IDyesKafka client identifier
KAFKA_GROUP_IDyesKafka consumer group ID
KAFKA_TOPICSyesComma-separated topic subscriptions
KAFKA_SSLnoEnable SSL for Kafka
KAFKA_SECURITY_PROTOCOLnoKafka security protocol (e.g. SASL_SSL)
KAFKA_SASL_MECHANISMnoSASL mechanism (e.g. PLAIN)
KAFKA_SASL_USERNAMEconditionalSASL username (required if SASL enabled)
KAFKA_SASL_PASSWORDconditionalSASL password (required if SASL enabled)
PINO_LOGGER_USEnoEnable Pino logger
PINO_LOG_LEVELnoPino log level

hbf-knowledge-manager

VarRequiredDescription
PORTnoHTTP listen port (default: 3000)
CORE_BASE_URLyeshbf-core base URL
CORE_TOKENyesStatic service auth token for hbf-core
PINO_LOGGER_USEnoEnable Pino structured logging
PINO_LOGGER_LEVELnoLog level (default: info)
PINO_LOGGER_AUTO_LOGGINGnoAuto-log HTTP requests (default: false)
ELASTIC_APM_ACTIVEnoEnable Elastic APM (default: false)
ELASTIC_APM_SERVER_URLconditionalAPM server endpoint (required if APM active)
ELASTIC_APM_SECRET_TOKENconditionalAPM auth token (required if APM active)
ELASTIC_APM_SERVICE_NAMEconditionalService identifier in APM
ELASTIC_APM_ENVIRONMENTconditionalEnvironment name in APM
SHAREPOINT_CLIENT_IDconditionalHelvia's multi-tenant Azure AD app client ID. Required for SharePoint KB integrations.
SHAREPOINT_CLIENT_SECRETconditionalHelvia's multi-tenant Azure AD app client secret. Required for SharePoint KB integrations.
SHAREPOINT_WEBHOOK_BASE_URLconditionalPublic HTTPS base URL for Graph webhook notifications (e.g., https://api.example.com/hbf-knowledge-manager). Required for real-time SharePoint sync.

Note: Azure Blob Storage credentials (accountName, containerName, sasToken) and SharePoint per-integration config (tenantId, siteId, driveId) are per-org config stored in hbf-core, not service-level env vars.

hbf-lcg

VarRequiredDescription
SERVICE_URLyesService base URL
SERVICE_PORTyesHTTP listen port (default: 1337)
HBF_CORE_URLyeshbf-core base URL
HBF_CORE_API_TOKENyesCore API token
HBF_LCM_URLyeshbf-lcm base URL
HBF_LCM_TOKENyeshbf-lcm auth token
HBF_BOT_EVENT_URLyeshbf-bot event endpoint URL
JWT_SECRETyesJWT signing secret
JWT_SUByesJWT subject claim
TYPEORM_*yesMySQL connection (TypeORM pattern); database: lcm (shared with hbf-lcm)
TYPEORM_AUTORUN_MIGRATIONSyesAuto-run migrations on startup (set to true)
CACHE_REDIS_URLnoRedis connection URL for optional caching
MICROSERVICE_REDIS_HOSTnoRedis host for NestJS microservice transport
MICROSERVICE_REDIS_PORTnoRedis port for NestJS microservice transport
ELASTIC_APM_ACTIVEnoEnable Elastic APM (default: false)
ELASTIC_APM_SERVER_URLconditionalAPM server endpoint (required if APM active)
ELASTIC_APM_SECRET_TOKENconditionalAPM auth token (required if APM active)
ELASTIC_APM_SERVICE_NAMEconditionalService identifier in APM
ELASTIC_APM_ENVIRONMENTconditionalEnvironment name in APM

Note: hbf-lcg shares the lcm MySQL database with hbf-lcm and auto-runs TypeORM migrations on startup. Redis is used for both optional response caching (CACHE_REDIS_URL) and as a NestJS microservice transport layer (MICROSERVICE_REDIS_*).

Health Checks

Most services have no explicit Docker HEALTHCHECK directives. Health monitoring relies on Kubernetes liveness/readiness probes (configured in K8s manifests, not in this repo).

Exception: semantic-doc-segmenter defines a docker-compose health check: curl -f http://semantic-doc-segmenter:8081 (15s interval, 10s timeout, 3 retries).

hbf-data-manager exposes GET /health returning {"status":"ok","timestamp":"<ISO>","uptimeSeconds":<N>}. No Docker HEALTHCHECK directive; relies on K8s probes in production.

Secrets Management

Secrets are injected via:

  • GitHub Actions Secrets for CI/CD (AWS credentials, KUBE_CONFIG, PAT_TOKEN, SONAR_TOKEN)
  • Kubernetes environment variables for runtime (set in K8s deployment manifests)
  • Docker build args for GITHUB_TOKEN (npm registry auth during image build)

CI/CD Secrets Used

SecretServicesPurpose
AWS_ACCESS_KEY_IDall deployed servicesAWS authentication
AWS_SECRET_ACCESS_KEYall deployed servicesAWS authentication
KUBE_CONFIG_DATA_NEWmost servicesEKS kubectl access
PAT_TOKENmost Node.js servicesGitHub npm registry auth (build arg)
SONAR_TOKENall servicesSonarQube code analysis
SONAR_HOST_URLall servicesSonarQube server URL
AZURE_CREDENTIALShbf-notificationsAzure login for AKS deploy
AZURE_RESOURCE_GROUPhbf-notificationsAzure resource group for AKS
AKS_CLUSTER_NAMEhbf-notificationsAzure AKS cluster name
AWS_CLOUDFRONT_DISTRIBUTION_IDhbf-webchatCloudFront cache invalidation
GPR_ACCESS_TOKENhbf-botGitHub Package Registry access

docker-compose (Local Development)

Each service with a docker-compose file provides a local dev stack. Common patterns:

  • MySQL services use mysql:8.0.34 with default dev credentials
  • Redis services use bitnami/redis:latest with empty password
  • MongoDB (hbf-core) uses mongo:8.2.1 with replica set (--replSet rs0)

Services that include infrastructure in docker-compose:

ServiceIncludes
hbf-coreMongoDB (replset), Redis
hbf-botRedis, ngrok tunnel
hbf-broadcastself only
hbf-consoleself only
hbf-data-retentionself only
hbf-event-publisherMySQL
hbf-lcmMySQL
hbf-media-managerMySQL
hbf-nlpself only (env from .env file)
hbf-notificationsMySQL
hbf-reportsMySQL
hbf-session-managerMySQL
hbf-statsself only
semantic-doc-segmenterMySQL, self + test runner
hbf-data-managerMySQL (mysql:8.4), Kafka (confluentinc/cp-kafka:7.6.1), Confluent Control Center (confluentinc/cp-enterprise-control-center:7.6.1)
hbf-knowledge-managernone (no docker-compose; run via npm run start:dev)
hbf-lcgnone (no docker-compose; standalone service)

Infrastructure Notes

  • Container registry: AWS ECR in eu-central-1
  • Orchestration: AWS EKS (Kubernetes) with three namespaces
  • Azure: hbf-notifications has a separate Azure AKS deployment (helviaagentsregistry-eserg5f6d5enfpgf.azurecr.io)
  • CDN: hbf-webchat static assets on S3 (helvia-cdn bucket) + CloudFront
  • Multi-tenant K8s deployments: helvia-rag-pipelines runs as three separate deployments (helvia, isolved, hrwiz)
  • No Helm/Terraform: deployments use raw kubectl set image + kubectl rollout status in CI
  • Elastic APM: supported by hbf-core, hbf-reports, hbf-session-manager, hbf-media-manager (configurable via env vars)
  • SonarQube: all repos run code quality analysis on push
  • Kafka: introduced by hbf-data-manager. The service's standalone docker-compose bundles Confluent Platform 7.6.1 (cp-kafka + cp-enterprise-control-center) running in KRaft mode (no ZooKeeper). The shared platform docker-compose does NOT include Kafka — in local dev, hbf-data-manager must either run with its own docker-compose stack or point KAFKA_BROKERS at an external broker. A task should be created to evaluate adding a shared Kafka to the platform dev stack.
  • hbf-knowledge-manager: stateless NestJS service. No database, no Kafka, no Redis. No docker-compose; run with npm run start:dev locally. Azure Blob Storage and Azure Event Grid are cloud-only external dependencies — not present in local infra. Azure credentials are per-org config in hbf-core, not service env vars. No CI/CD configured yet.
  • hbf-lcg: NestJS service. Shares the lcm MySQL database with hbf-lcm (same TypeORM connection config, same database name). Redis is optional: used for caching (CACHE_REDIS_URL) and as a microservice transport (MICROSERVICE_REDIS_HOST/PORT). HTTP port is 1337 (SERVICE_PORT), diverging from the platform's usual 3000. Auto-runs TypeORM migrations on startup. No docker-compose; no CI/CD configured yet.