Skip to main content

Configuration Explanation

Note: This document only explains the important parameters. Some parameters, due to their similar or identical functions, are not elaborated upon here.

  • All non-third-party services can customize the service name <service>.name to change the service name and the domain name exposed by the gateway API (except for the portal's main domain).

  • All non-third-party services can define deployments and most deployment-related attributes of the StatefulSet, such as labels, annotations, replicas, serviceAccount, environments, resources, volumeMounts, livenessProbe, readinessProbe, startupProbe, lifecycle, stdin, tty, volumes, nodeSelector, tolerations, affinity, securityContext, etc.

This document explains the important configuration items in the CSGHub Helm Chart, including global configuration, core service configuration, built-in components, and the priority of each parameter. It is suitable for deployment, operation and maintenance, and secondary development personnel.

1. Global Parameter

1.1 Release edition

global:
edition: "ce" / "ee" / "saas"

This specifies the deployment version: Community (ce), Enterprise (ee), or SaaS edition. Different versions affect the image tag, enabled features, and dependencies. The saas edition was added in chart v2.2.0.

1.2 Global Gateway API

global:
gateway:
external:
domain: "csghub.example.com"
# public: "public.example.com"
tls:
enabled: false
secretName: "<kubernetes tls secret name>"
service:
type: "LoadBalancer" or "NodePort"
nodePorts:
http: 30080
https: 30443
gitssh: 30022
  • gateway

    • external

      • domain

        Default: csghub.example.com.

        The domain name used for external access to CSGHub. This differs from previous versions; the base domain is no longer used.

        • For example: If access is ultimately via http://csghub.example.com, configure csghub.example.com here.
        • Other service domains are generated based on the base domain of the current domain, such as casdoor.example.com.
        • If the specified domain is a subdomain, such as example.com, it will ultimately reference csghub.example.com, automatically appending a prefix.
      • public

        Default: nil.

        When accessing instances such as inference, fine-tuning, MCP, and SPACE using independent domains, an independent domain name needs to be assigned to each service.

        The default is <domain>. If you need to modify it, please specify a separate domain name, such as public.exmaple.com. It will ultimately be referenced as a wildcard domain.

        You cannot directly specify a wildcard domain here.

    • tls

      • enabled

        Default false.

        • true: Enables HTTPS encrypted access. To enable HTTPS, you must provide secretName.
        • false: Disables HTTPS encrypted access.
      • secretName

        Default nil.

        Specify the domain certificate to use. Ensure the domain certificate contains at least the public wildcard domain. For example:

        • If public is not specified, and domain is specified as csghub.example.com, then the domain certificate must contain at least *.csghub.example.com.
        • If public is specified as public.example.com, then the domain certificate must contain at least *.public.example.com.
    • service

      • type

        Default LoadBalancer.

        Specifies the external exposure method for the Gateway API Controller. Optional values are LoadBalancer or NodePort.

        Note: This value needs to be specified during deployment. Modifying the svc type after deployment may affect access.

      • nodePorts (only valid for type = NodePort)

        • http

          Default 30080.

          Specifies the NodePort corresponding to port 80.

        • https

          Default 30443.

          Specifies the NodePort corresponding to port 443.

        • gitssh

          Default 30022.

          Specifies the NodePort corresponding to port 22.

Priority:

global.gateway < gateway < <service>.gateway

1.3 Global Image

global:
imageRegistry: "registry.opencsg.com/opencsghq"
image:
registry: "registry.opencsg.com"
tag: "v1.11.0"
pullPolicy: "IfNotPresent"
pullSecrets:
- acr-pull-secret
  • imageRegistry

    Default docker.io.

    Specifies the global mirror repository for EnvoyGateway. For use within China, it can be set to registry.opencsg.com/opencsghq.

  • registry

    Default docker.io.

    This parameter overrides the image repositories for all images in the Helm chart. Modifying it is generally not recommended, as it defaults to relying on the original image repository of the image to pull relevant images. This might be docker.io, etc. If used in China, it can be set to registry.opencsg.com(envoyGateway is not subject to this parameter; please refer to imageRegistry.).

  • tag

    This is used to define the version number of the csghub image. If the image namespace belongs to opencsghq, the template will automatically complete identifiers such as edition based on whether the tag is compliant. For example, the tag in the example will be output as v1.11.0-ce/v1.11.0-ee during actual rendering.

  • pullPolicy

    Default IfNotPresent.

    Image pull policy.

  • pullSecrets

    Default nil.

    Configure the pull key to pull images from the private image repository.

Priority:

global.image < image < <service>.image

1.4 Global Persistence

global:
persistence:
storageClass: "hostpath"
accessModes: ["ReadWriteOnce"]
size: "10Gi"
  • storageClass

    Default nil.

    The default storage class used by all StatefulSets.

  • accessModes

    Default ReadWriteOnce.

    The default access modes used by all StatefulSets.

  • Size

    Default 10Gi.

    The default storage volume size used by all StatefulSets when creating PVCs.

Priority:

global.persistence < <service>.persistence

1.5 PostgreSQL、Redis、Mongo、Object Storage、Registry 等 external 配置

Each component allow:

<service>:
enabled: true or false
external: {}
  • enabled

    • true: Enables the built-in service component; in this case, the external configuration will not take effect.
    • false:Disable the built-in service component.
  • external

    When enabled is set to false, the connection information for the corresponding external service component is set via external.

Priority:

global.service < <service>.service

1.6 Global ChartContext

global:
chartContext:
isBuiltIn: true
  • isBuiltIn

    Default true (the main chart lives at global.chartContext.isBuiltIn; usually leave as default when installing the csghub main service).

    Its main purpose is to achieve seamless integration of dataflow, runner, and csgship charts, and to indicate whether the chart is deployed independently or bundled with the csghub main service.


2. CSGHub Core Configuration

2.1 Image(Core service image)

image:
registry: "registry.opencsg.com"
tag: "v1.11.0"
pullPolicy: "IfNotPresent"
pullSecrets:
- acr-pull-secret

This parameter functions similarly to global.image, but its scope is limited to services started using the csghub-server/csghub-portal image.

Priority:

global.image < image(Here) < <service>.image

2.2 Logging

logging:
level: "info" or "warning" or "debug" or "error"

Default info.

Used to set the log level for all services started from the csghub-server image. Global control over log levels.

3. Portal

3.1 Image

portal:
repository: "opencsghq/csghub-portal"

Other configurations can be ignored; they are inherited from global.image and image.

Priority:

global.image < image < portal.image

3.2 Gateway API

Without going into details, it functions the same as global.gateway, but it cannot declare gateway.service.type, and all other parameters have higher priority than global.image.

3.3 Docs

portal:
docs:
service: "docs-svc"
port: 8080

This configuration is used to route the CSGHub docs center /docs path to an already-existing Kubernetes Service inside the cluster (CSGHub does not ship a built-in docs center).

  • service

    Name of the Kubernetes Service that fronts the externally deployed docs center.

  • port

    Target port on that Service.

The legacy domain / host+port form was removed in v2.5.0; the route now connects directly to an existing Service.

3.4 PostgreSQL

portal:
postgresql:
host: "<postgresql host>"
port: "<postgreql port>"
database: "<postgresql csghub portal database>"
user: "<postgresql user>"
password: "<postgresql password>"
timezone: "Etc/UTC"
sslmode: "prefer"

This parameter defines the database connection information for the Portal. Compared to global.postgresql.external, it includes a database parameter. Because this parameter cannot be specified globally, using the same database for all components is discouraged, and Helm charts haven't internally adapted for it.

Standard parameter settings are not detailed here.

Priority:

global.postgresql.external < portal.postgresql

3.5 ObjectStore

portal:
objectStore:
endpoint: "<object store endpoint>"
accessKey: "<object store access key>"
secretKey: "<object store secret key>"
bucket: "<object store public bucket>"
region: "<object store region>"
secure: <true|false> # enable HTTPS
encrypt: <true|false> # enable server-side encryption
pathStyle: <true|false> # use path-style addressing

The object storage connection information used to define the Portal has an additional bucket parameter compared to global.objectStore.external. Because this parameter cannot be specified globally, it is not recommended for all components to use the same database, and Helm charts have not adapted it internally.

Priority:

global.objectStore.external < portal.objectStore

4. Server

4.1 gitlabShell

server:
gitlabShell:
sshPort: 22

This defines the port number for the SSH service when cloning using git over ssh. The default port is 22 in LoadBalancer mode and 30022 in NodePort mode. Modifying this port is generally not recommended, as it involves adjusting the gateway API Controller's TCP exposure rules.

4.2 multiSync

server:
multiSync:
enabled: true
proxy: "<proxy to connect internet>"
  • enabled

    Default true.

    Indicating that multi-source synchronization is enabled.

  • proxy

    Default nil.

    Used to specify the network proxy used to connect to the Internet during multi-source synchronization.

4.3 SwaggerAPI

server:
swaggerAPI:
enabled: false
  • enabled

    Default false.

    Which disables the Swagger API helper instance.

5. RProxy

rproxy:
coredns:
enabled: true
image:
repository: "coredns/coredns"
tag: "1.11.1"
nginx:
enabled: true
image:
repository: "nginx"
tag: "latest"

This section will not be explained in detail. Coridns and Nginx were components used in versions prior to v1.12.0 to assist rproxy in traffic forwarding. Starting with v1.12.0, these two components are deprecated and no longer used.

6. Notifier

6.1 SMTP

notifier:
smtp:
host: "<smtp host>"
port: "<smtp port>"
username: "<smtp username>"
password: "<smtp password>"

Configure the notifier mail server.

6.2 FeiShu

notifier:
feiShu:
appId: "<feishu app id>"
appSecret: "<feishu app secret>"

Configure the notifier to send notifications to Lark.

7. Runner(Chart built-in)

These configurations are passed directly to the Runner sub-chart.

v2.3.0 value restructuring: Since v2.3.0, the Runner sub-chart's values structure has been reorganized, changing many field paths and adding new configuration options. Use the new paths when setting Runner configurations from the csghub parent chart.

7.1 Core Runner Configuration

ParameterDefaultDescriptionv2.3.0 Change
runner.runner.regionregion-0Identify the cluster where the runner resides, e.g., "cn-north"⚠️ Path changed from runner.region
runner.runner.interval60Runner report interval to CSGHub (seconds)⚠️ Path changed from runner.interval
runner.runner.namespacespacesK8s namespace for inference, finetune, and app spaces⚠️ Path changed from runner.namespace
runner.runner.mergingNamespacedisableNamespace merging mode (multi/single/disable)⚠️ Path changed from runner.mergingNamespace
runner.runner.applicationEndpointautoKnative endpoint override, auto-generates http://kourier-internal...⚠️ Path changed from runner.applicationEndpoint
runner.runner.networkInterfacenilNetwork interface for LWS multi-GPU inference⚠️ Path changed from runner.networkInterface
runner.runner.storageClassNamenilStorageClass for Space persistent volumes⚠️ Path changed from runner.storageClassName
runner.runner.allowCpuOnGpuNodesfalseAllow CPU workloads on GPU nodes; set to false to prevent GPU waste🆕 New

7.2 Space Deployment Configuration

ParameterDefaultDescriptionv2.3.0 Change
runner.space.usePublicDomaintrueUse separate domain for instances; false uses subPath (limited features)⚠️ Path changed from runner.userPublicDomain
runner.space.pipIndexUrlhttps://pypi.tuna.tsinghua.edu.cn/simple/PyPi source for space image builds⚠️ Path changed from runner.pipIndexUrl
runner.gpuModelLabel.typeLabelnvidia.com/gpu.productGPU model label on nodesPath changed back from runner.space.gpuModelLabel.typeLabel
runner.gpuModelLabel.capacityLabelnvidia.com/gpuGPU capacity label on nodesPath changed back from runner.space.gpuModelLabel.capacityLabel
runner.gpuModelLabel.memLabelnvidia.com/gpu.memoryGPU memory label on nodesNew
runner.gpuModelLabel.xpuTypeGPUXPU type identifierNew
runner.space.deployTimeoutInMin30Space deploy timeout (minutes)🆕 New configurable
runner.space.buildTimeoutInMin30Space image build timeout (minutes)🆕 New configurable

7.3 Model Deploy Configuration

ParameterDefaultDescriptionv2.3.0 Change
runner.model.deployTimeoutInMin60Model inference deploy timeout (minutes)⚠️ Renamed from model.deployTimeout, unit changed from seconds to minutes
runner.model.dockerRegBasenilCustom image registry for model images⚠️ Renamed from model.registry
runner.model.downloadEndpointnilModel download endpoint URL🆕 New
runner.model.deployStatusCheckInterval10Model deploy status check interval (seconds)🆕 New configurable

7.4 Knative Serving Configuration

ParameterDefaultDescription
runner.knative.serving.domainexample.comInternal domain for ksvc services, no DNS required
runner.knative.serving.autoscaler.enableScaleToZerotrueEnable auto-shutdown of KSVC Pods
runner.knative.serving.autoscaler.scaleToZeroPodRetentionPeriod60mGrace period for KSVC auto-shutdown

7.5 Other Configurations

ParameterDefaultDescription
runner.rbac.createtrueWhether to create RBAC permissions for runner
runner.logcollector.enabledtrueWhether to enable the log collector (csghub umbrella chart forces this to true; revert to false to disable)
runner.logcollector.loki.addressnilLoki service address (defaults to csghub built-in Loki if unset)

8. Dataflow and AI Gateway Components (built-in)

8.0 Built-in Dataflow Sub-chart

Data processing tool. The Dataflow Helm Chart can be deployed standalone or bundled with the CSGHub Helm Chart (by setting global.chartContext: true). It contains the following components:

  • dataflow
  • label studio
  • embedded PostgreSQL (disabled by default when bundled, served by the main chart)
  • envoy-gateway (disabled by default when bundled, served by the main chart)

ℹ️ Redis and MongoDB are no longer required by the Dataflow service as of chart v2.2.0. The Celery worker component was also removed.

⚠️ Prometheus is not part of the Dataflow chart — it is a built-in third-party dependency of the csghub main service, see 12.4 Prometheus.

Enabled via dataflow.enabled. It is installed bundled with CSGHub Helm Chart by default and requires no additional configuration. Currently, customizable settings are as follows:

dataflow:
enabled: true
dataflow:
image: {}
postgresql: {}
persistence: {}
labelStudio:
image: {}
postgresql: {}
persistence: {}

All parameter definition rules are the same as those described above.

⚠️ The components described in §8.1–8.4 (llmlog / moderation / fedap / trustregistry) belong to the csghub main service's AI Gateway system and are NOT bundled into the Dataflow sub-chart. Their configuration paths live at the top level of the csghub main chart values. They are listed here together for convenience.

8.1 llmlog (EE/SaaS only)

llmlog is a logging worker of the AI Gateway (aigateway service) that writes LLM call logs to MinIO. It only deploys when global.edition is ee or saas; it is suppressed in ce.

The enable switch lives under the aigateway service config (default true for non-ce editions):

aigateway:
aigateway:
llm:
log:
# enabled: true

The worker's own parameters live under the top-level llmlog service:

llmlog:
bucket: "csghub-llmlog"
prefix: "llmlog"
workerNum: 10
batchSize: 1000
flushIntervalSeconds: 300
ParameterDefaultDescription
aigateway.aigateway.llm.log.enabledtrue (ee/saas)Enable the llmlog worker
llmlog.bucketcsghub-llmlogMinIO bucket name for LLM logs
llmlog.prefixllmlogObject key prefix
llmlog.workerNum10Number of concurrent workers
llmlog.batchSize1000Max log entries per batch flush
llmlog.flushIntervalSeconds300Flush interval in seconds

8.2 Moderation (content guard)

AI Gateway sensitive-content checking supports an optional LLM-based content guard. When enabled, a secondary LLM reviews model outputs before they are returned to the user.

aigateway:
moderation:
enabled: false
checkChain: "ac_automaton,mutable_ac_automaton,aliyun_green"
streamCheckMode: "async"
asyncBufferMaxChars: 50
maxContentLength: 2000
llm:
enabled: false
endpoint: ""
apiKey: ""
guard:
model: "Qwen/Qwen3Guard-Gen-0.6B"
guardStream:
model: "Qwen/Qwen3Guard-Gen-Stream-0.6B"

The guard-model fields are nested as llm.guard.model and llm.guardStream.model (NOT flat guardModel / guardStreamModel).

8.3 fedap (SaaS only)

Federation adapter service. Automatically enabled when global.edition=saas. The configuration lives at top level fedap (NOT under aigateway).

fedap:
enabled: true
ParameterDefaultDescription
fedap.enabledtrueEnable the federation adapter (port 8099, SaaS only)

8.4 trustregistry (SaaS only)

Federation registry service. Automatically enabled when global.edition=saas. The configuration lives at top level trustregistry (NOT under aigateway).

trustregistry:
enabled: true
ParameterDefaultDescription
trustregistry.enabledtrueEnable the federation registry (port 8098, SaaS only)

8.5 allowCpuOnGpuNodes

Controls whether CPU-only workloads can be scheduled onto GPU-labeled nodes. Default is false to prevent GPU resource waste.

server:
allowCpuOnGpuNodes: false

9. CSGShip(内建子Chart)

AI-assisted coding assistant backend service. CSGShip Helm Chart can be deployed independently or bundled with CSGHub Helm Chart (by setting global.chartContext: true). This Chart contains the following components:

  • agentic
  • billing
  • casdoor
  • frontend
  • megalinter-server
  • megalinter-worker
  • postgresql
  • redis
  • secscan
  • web

All components require no special or additional configuration.

10. Other Services

Besides the csghub-server service, the following derivative services are based on the same image:

  • accounting

  • user

  • dataviewer

  • mirror

  • temporalWorker

  • aigateway

They have extremely similar configuration parameters for image, PostgreSQL, Redis, etc., and by default inherit all parameters from csghub-server. Common custom parameters are mostly passed in proprietary environments settings.

11. Third-party Built-In Components

11.1 PostgreSQL

11.1.1 Databases

postgresql:
databases:
- "csghub_casdoor"
- "csghub_temporal"
- "csghub_server"
- "csghub_portal"
- "csghub_dataflow"
- "csghub_label_studio"
- "csghub_csgship"
- "csghub_xnet"
- "csghub_agenticflow"
- "csghub_superset"

Defines the data created during database initialization; only valid during database initialization.

11.1.2 Parameters

postgresql:
parameters:
max_connections: 200
......

This parameter is used to customize database parameters. By default, the database starts with all parameters at their default values, but you can optimize them using this parameter.

11.1.3 Other Configuration

The details are not elaborated here, as they are all general configurations.

11.2 Redis

11.2.1 requirePass

redis:
requirePass: false

This parameter is not enabled by default. It can be enabled if csgship is not running. Currently, csgship does not support password verification for Redis.

11.3 MinIO

11.3.1 Console

minio:
console:
enabled: true
service:
port: 9001
protocol: "TCP"

Define whether the port for the MinIO service UI is enabled, etc.

11.3.2 Region

minio:
region: "cn-north-1"

Define the default region for minio.

11.3.3 Buckets

minio:
buckets:
- name: "csghub-registry"
policy: "none" # Access policy: none, download, public
- name: "csghub-billing"
policy: "none"
- name: "csghub-server"
policy: "none"
- name: "csghub-portal"
policy: "none"
- name: "csghub-portal-public"
policy: "download"
- name: "csghub-runner"
policy: "none"
- name: "csghub-xnet"
policy: "none"
- name: "csghub-llmlog"
policy: "none"

Defines the bucket to be created. Unlike postgresql.databases, this parameter can be modified after startup and always checks if the bucket has been created.

  • name

    The bucket name

  • policy

    The bucket access policy.

    • none Default value, i.e., private
    • download Allows read-only access
    • public Allows public read and write access

11.3.4 Other Configuration

The rest are all standard configurations, which will not be elaborated here.

11.4 Registry

Unless there are any special configuration requirements, they will not be elaborated here.

11.5 Gitaly

11.5.1 Storage

gitaly:
storage: "default"

The default name for the gitaly storage.

11.5.2 Other Configuration

The rest are all standard configurations, which will not be elaborated here.

11.6 GitlabShell

11.6.1 RBAC

gitlabShell:
rbac:
create: true

Whether to create RBAC permissions. The primary user creates a key pair containing SSH keys to verify git over SSH operations.

11.6.2 Other Configuration

The rest are all standard configurations, which will not be elaborated here.

11.7 Nats

The rest are all standard configurations, which will not be elaborated here.

11.8 Casdoor

The rest are all standard configurations, which will not be elaborated here.

11.9 Temporal

11.9.1 Console

temporal:
console:
enabled: false

Whether to enable the temporal console UI (the switch lives at temporal.console.enabled, NOT temporal.enabled). It is disabled by default. Due to OAuth settings, if the UI is enabled and the Casdoor service is not ready, the entire Temporal service will fail to come up. Therefore, if you want to enable this service, please ensure that your Casdoor service is ready (i.e., accessible via gateway API).

11.9.2 Dynamic Config

temporal:
dynamicConfig:
content: |
system.workflow.startWorkflowDelay:
- value: 1s

Rendered into /etc/temporal/config/dynamicconfig/docker.yaml. Empty by default, in which case the server uses all built-in dynamic config defaults.

11.9.3 Other Configuration

Unless there are any special configuration requirements, they will not be elaborated here.

12 Third-party Dependencies

The following components are for illustrative purposes only. In actual use, they generally do not need to be modified; the default configuration is sufficient.

12.1 EnvoyGateway

The default gateway API controller is used. Its enabling/disabling function can be controlled via envoy.enabled.

Please do not modify the default configuration, as this may cause service access errors.

12.2 Loki

Log storage and query engine. Due to low usage intensity, a minimal deployment was adopted here.

12.2.1 Gateway API

loki:
gatewayAuth:
enabled: false
# htpasswd: "" # omit to expose without authentication
gateway:
enabled: false

If the logcollector in loki and the runner chart are not the same instance, you need to enable loki gateway. When gatewayAuth.enabled=true, provide htpasswd (generate with htpasswd -nbs <username> <password>); omitting htpasswd exposes the gateway without authentication. logcollector does not currently support authentication.

12.3 Tempo

Trace is a log collection tool. Enabling it will significantly impact performance. It is not recommended to enable it unless there is a specific need.

12.4 Prometheus

Used to collect background analytics data for inference, finetune, and other instances. Enabled by default in the csghub main service (prometheus.enabled: true); set it to false to disable.