Worker Configuration

When running from source, Worker reads these variables from the root .env. Docker Compose reads the same single .env and uses a consumer allowlist to inject shared and Worker-only settings. API-only settings such as initial-administrator credentials, CORS, the metrics listener, and the AI Client never enter Worker. Worker reads and validates configuration only at startup; restart it after changes, and expect startup to fail when an explicitly selected ENV_FILE is missing or malformed.

Basic configuration

SettingDefaultDescription
APP_ENVproductionSelects the Worker runtime mode; use production or development.
DATABASE_URLLocal PostgreSQLConnects to PostgreSQL; use a PostgreSQL connection URI.
REDIS_ADDRredis://localhost:6379/0Connects to the Redis task queue; use a redis:// or rediss:// URI.
SECRET_ENCRYPTION_KEY1EmptyDecrypts credentials stored by the platform; use the same stable key as API.
PUBLIC_BASE_URLRequired in productionSets the platform root used in task-notification links; in production, use the absolute HTTPS URL users actually open, with HTTP allowed only for localhost or loopback addresses.
LOG_FORMATautoSelects terminal log rendering; use auto, console, or json, and use json in production containers.
LOG_COLORautoControls console log colors; use auto, always, or never; NO_COLOR always disables colors.
LOG_LEVELinfoSets log verbosity; use debug, info, warn, or error.
OTEL_EXPORTER_OTLP_ENDPOINTEmptySets the telemetry receiver; use the Collector OTLP/HTTP URL.
BUILD_EXECUTOR_IMAGEmoby/buildkit:v0.24.0-rootlessSelects the BuildKit used by build jobs; use an OCI image reference.
BUILD_EGRESS_MODE2restrictedSets the build-network egress policy; use restricted or permissive.
BUILD_PRIVATE_EGRESS_CIDRSEmptyAllows builds to reach private targets; use comma-separated CIDRs.
DEPLOY_ROLLOUT_TIMEOUT_SECONDS600Sets the deployment wait timeout; use a positive number of seconds.
CERT_MANAGER_CLUSTER_ISSUERletsencrypt-http01Selects the certificate issuer; use a Kubernetes ClusterIssuer name.
  1. Note: API and Worker must use the same SECRET_ENCRYPTION_KEY.
  2. Note: restricted blocks metadata endpoints and private targets that were not allowed.

Advanced configuration

Runtime and database

SettingDefaultDescription
ENV_FILE.envSelects the environment file read by Worker; use a valid path, because an explicitly selected missing or malformed file fails startup.
WORKER_DB_MAX_OPEN_CONNS20Limits open database connections per Worker replica; use a positive integer.
WORKER_DB_MAX_IDLE_CONNS5Limits idle database connections per Worker replica; use a non-negative integer.
WORKER_DB_CONN_MAX_LIFETIME30mLimits each Worker database connection's lifetime; use a Go duration such as 30m.
WORKER_DB_CONN_MAX_IDLE_TIME5mLimits each Worker database connection's idle time; use a Go duration such as 5m.

Observability

SettingDefaultDescription
OTEL_RESOURCE_ATTRIBUTESEmptySets OpenTelemetry resource attributes; use comma-separated key=value pairs.
OTEL_EXPORTER_OTLP_HEADERSEmptyAuthenticates Collector requests; use comma-separated key=value headers.

Build

SettingDefaultDescription
BUILD_JOB_TIMEOUT_SECONDS1800Sets the build-job execution timeout; use a positive number of seconds.
BUILD_JOB_TTL_SECONDS3600Sets how long completed build jobs remain; use a non-negative number of seconds.
BUILD_CACHE_ENABLEDfalseControls whether BuildKit Registry cache is read and written; use true or false.
BUILD_CACHE_TAGbuildcacheSets the Registry cache tag; use a valid OCI image tag.
BUILD_PRIVATE_EGRESS_PORTS443Limits ports used to reach private targets; use comma-separated ports from 1 to 65535.
BUILD_BLOCKED_EGRESS_CIDRSEmptyAdds networks that builds cannot reach; use comma-separated CIDRs.

Volume import and export

SettingDefaultDescription
VOLUME_TRANSFER_MAX_BYTES100GiLimits one volume import or export; use a quantity from 1Gi to 5Ti.
VOLUME_TRANSFER_JOB_IMAGEEmptySelects the program used by volume-transfer Pods; use an OCI image matching the Worker version.

Helm reuses the current Worker image by default. Minimal Docker Compose, source, and binary deployments leave imports and exports disabled; when needed, set VOLUME_TRANSFER_JOB_IMAGE once in the root .env, and Compose passes that same value to API and Worker. Transfer bytes do not pass through object storage.

Docker Compose

SettingDefaultDescription
DEVOPS_IMAGE_TAGnightlySelects the Worker image version used by Docker Compose; use an image tag.