Settings reference

Generated by apelora-control-plane settings (npm run settings:doc) from the list the control plane itself reports at GET /api/v1/settings. Do not edit by hand.

Every setting is an environment variable. The control plane reads its own at start; the worker reads its own; a setting both read must be given to both. A value marked never shown (a secret, or the path of a certificate or key file) is not displayed by the Console or the API. Defaults apply when the variable is not set; none means the feature is off or the value is worked out.

Read by the control plane and the worker

SettingDefaultWhat it does
APELORA_DEPLOY_PROJECTSapeloraIncus projects Apelora may change
APELORA_IMAGE_MIRRORSnoneImage mirrors, upstream=mirror pairs
APELORA_IMAGE_SERVERSanymirrors-only refuses every server that is not a mirror
APELORA_INCUS_CLIENT_CERTnoneClient certificate file of the restricted deploy identity (never shown)
APELORA_INCUS_CLIENT_KEYnonePrivate key file of the restricted deploy identity (never shown)
APELORA_INCUS_SERVER_CERTnonePinned Incus server certificate file (never shown)
APELORA_INCUS_TLS_SERVER_NAMEnoneName to expect in the Incus server certificate
APELORA_INCUS_URLnoneIncus API address; without it the mock is used
APELORA_LOG_FORMATtexttext or json log lines
APELORA_MAAS_API_KEYnoneMAAS API key (consumer:token:secret) of a dedicated MAAS user; read once at start, never shown
APELORA_MAAS_CAnonePEM file of the authority that signed MAAS's certificate; default the system roots
APELORA_MAAS_URLnoneAddress of the MAAS region API (https://host:5240/MAAS); empty: only manual machines. The control plane lists its machines; the worker can fence through it
APELORA_OTLP_ENDPOINToffOTLP/HTTP traces for request and job spans (off, or an http(s) URL of a Tempo or collector inside the site)
APELORA_REGIONdefaultConstant region label on metrics
APELORA_SECTORdefaultConstant sector label on metrics
APELORA_SITEdefaultConstant site label on metrics
APELORA_WORKER_METRICS_ADDR127.0.0.1:9471The worker's metrics and liveness listener
DATABASE_URLnonePostgreSQL connection (contains a password); without it the control plane runs without sign-in on loopback only (never shown)
RUST_LOGinfoWhich log lines are written

Read by the control plane only

SettingDefaultWhat it does
APELORA_ALLOWED_ORIGINSnoneBrowser origins besides the API's own host
APELORA_API_ADDR127.0.0.1:8080Address the API listens on
APELORA_BEHIND_PROXY01: a TLS-terminating proxy is in front
APELORA_CONSOLE_ACCESSenableddisabled turns terminal sessions off
APELORA_CONSOLE_GID1000Group terminal sessions run as
APELORA_CONSOLE_IDLE_SECS900No typing for this long ends a session
APELORA_CONSOLE_MAX_SECS3600Absolute limit of a session
APELORA_CONSOLE_MAX_SESSIONS3Open sessions and tickets per person
APELORA_CONSOLE_POWERSHELLdisabledenabled offers PowerShell
APELORA_CONSOLE_UID1000User terminal sessions run as
APELORA_DB_BACKUP_DIRnoneDirectory the database backup and restore-drill scripts write their records to (read only; Administration shows whether backups are recent and a restore was verified)
APELORA_DRAIN_WAIT_SECS30Seconds evacuating or restoring a member waits for its replicas to leave their service addresses; 0 skips it
APELORA_INCUS_ADMIN_CLIENT_CERTnoneClient certificate file of the unrestricted admin identity (never shown)
APELORA_INCUS_ADMIN_CLIENT_KEYnonePrivate key file of the unrestricted admin identity (never shown)
APELORA_LEGACY_TOKENSenableddisabled refuses legacy apl_ API tokens
APELORA_METRICS_ADDRoffSeparate metrics listener without authentication
APELORA_MOCK_WORKERnone1 runs the deployment worker inside the control plane on the mock cluster (development builds with the dev-worker feature only)
APELORA_NETWORK_UPLINKnoneUplink for per-application OVN networks
APELORA_OIDC_AUDIENCEnoneNames this API has at the provider
APELORA_OIDC_AUTHORIZED_PARTIESnoneClients a token must be issued to (azp)
APELORA_OIDC_CLIENT_IDnonePublic browser client (no secret)
APELORA_OIDC_GROUPS_CLAIMgroupsClaim holding group names
APELORA_OIDC_ISSUERnoneIdentity provider set by the environment
APELORA_OIDC_JWKS_URLnoneThe provider's key set
APELORA_OIDC_LABELnoneName on the sign-in button
APELORA_OIDC_MFA_ACRnoneacr values that count as multi-factor
APELORA_OIDC_MFA_AMRnoneamr values that count as multi-factor
APELORA_OIDC_SCOPESopenid profile emailScopes the browser asks for
APELORA_OIDC_USERNAME_CLAIMpreferred_usernameClaim holding the user name
APELORA_RATE_LIMIT_FAILED_AUTH_BURST20Refused credentials saved up per client address
APELORA_RATE_LIMIT_FAILED_AUTH_PER_MIN10Refused credentials per client address per minute
APELORA_RATE_LIMIT_MAX_CLIENTS10000Buckets kept per limit
APELORA_RATE_LIMIT_PUBLIC_BURST60Public requests saved up per client address
APELORA_RATE_LIMIT_PUBLIC_PER_MIN120Public requests per client address per minute
APELORA_RATE_LIMIT_WRITES_BURST200Changes saved up per signed-in caller
APELORA_RATE_LIMIT_WRITES_PER_MIN600Changes per signed-in caller per minute
APELORA_RDP_GATEWAYdisabledenabled offers remote desktop sessions into Windows modules through the control plane (the person runs apelora-desktop-tunnel; not yet verified against a Windows guest)
APELORA_SERVICE_ADDRESSESnoneRouted IPv4 (/16–/30) or IPv6 (/112–/126) range for service addresses
APELORA_SHARED_POOLnoneShared storage pool behind the data-replicated volume class (modules that restart on another server after fencing)
APELORA_TLS_CERTnoneCertificate chain file for HTTPS served by the API itself (never shown)
APELORA_TLS_KEYnonePrivate key file for HTTPS served by the API itself (never shown)
APELORA_TRUSTED_PROXIESnoneProxies whose X-Forwarded-For is believed
APELORA_VOLUME_POOLnoneStorage pool behind the data-local volume class

Read by the worker only

SettingDefaultWhat it does
APELORA_ALERT_EVALUATE_SECS30How often built-in alert rules are evaluated (0: off)
APELORA_BACKUP_POOLnonePool scheduled backups are copied to
APELORA_BMC_ALLOW_LABnoneAllows the lab-only provider that stops a Lima VM (the disposable test cluster); never in production
APELORA_BMC_FENCE_AFTER_SECS30A server Offline for this long (at least 20) is switched off through its BMC and fenced
APELORA_BMC_MAPnoneFile naming each server's BMC (ADR 0014): provider (redfish, ipmi, maas), address, user, the name of its password variable and its hardware UUID (for IPMI the system GUID). No passwords in it; absent: no fencing through a BMC (never shown)
APELORA_DNS_BINARYnonePath of the Linux apelora-dns executable the worker copies into a resolver (default: apelora-dns next to the worker)
APELORA_FENCE_LOCKSPACEnoneThe shared volume group's lockspace the fence probe reads; default the only one joined
APELORA_FENCE_PROBEoffHow the worker reads the shared storage's leases to fence a failed server (off or ssh)
APELORA_FENCE_PROBE_KEYnonePrivate key of the fence probe's forced SSH command (never shown)
APELORA_FENCE_PROBE_KNOWN_HOSTSnonePinned host keys of the members the fence probe reads (never shown)
APELORA_FENCE_PROBE_TARGETSnoneWhere the fence probe reaches each member (member=host[:port]); default the member's address, port 22
APELORA_FENCE_PROBE_USERapelora-fenceAccount of the fence probe on each member
APELORA_HEALTH_FAIL_AFTER_SECS20Failing checks for this long: unhealthy
APELORA_HEALTH_RESTART_AFTER_SECS60Unhealthy for this long: restarted
APELORA_OUTBOX_SINKlogWhere audit messages are relayed
APELORA_PROBE_UID65534User a module's readiness command runs as inside its instances (not root by default)
APELORA_REBALANCEnone1: move a stateless replica that shares a server with another of its module (off when unset)
APELORA_RECOVER_AFTER_SECS120Offline time before replicas are substituted
APELORA_RESTORE_DRILL_RECORDnoneThe restore drill's result file the restore-age alert reads
APELORA_SUPERVISE_SECS30Seconds between replica supervisor passes
APELORA_UPDATE_DRAIN_SECS5Seconds an old replica keeps running after it left its service address, for requests in flight to finish
APELORA_UPDATE_HEALTHY_SECS20A rolling update's new replica must pass its service's health check this long before the old one goes
APELORA_UPDATE_TIMEOUT_SECS300A new replica not healthy this long after it was created stops the rolling update; it is removed and the old replicas keep serving
APELORA_WORKER_IDnoneWorker name (default worker-<process id>)

Read by the web development server only

SettingDefaultWhat it does
APELORA_API_URLhttp://127.0.0.1:8080Where the web development server sends /api

Named by other settings

These variables have names an administrator chooses, so they are not listed above. Their values are secrets: read when needed, never stored, logged or shown.

SettingRead byWhat it does
APELORA_ALERT_SECRET_<NAME>workerThe signing secret of an alert channel whose secretRef names it (alerts runbook)
APELORA_BMC_SECRET_<NAME>workerThe password of a BMC whose entry in APELORA_BMC_MAP names it as secretRef (member-failure runbook)
APELORA_SECTOR_<CREDENTIALS>_CLIENT_CERT, _CLIENT_KEY, _SERVER_CERTcontrol planePaths of the Incus identity and server certificate of a registered sector whose credentials names them (ADR 0008); read when the sector is probed, never stored

Read by the DNS resolver

apelora-dns runs inside an application's resolver module, not on the servers.

SettingDefaultWhat it does
APELORA_DNS_RECORDS_FILE/etc/apelora-dns.recordsThe service names it answers (name address lines), read again on every query
APELORA_DNS_UPSTREAM_FILE/etc/apelora-dns.upstreamThe resolvers it forwards every other lookup to

This page is a copy of docs/architecture/SETTINGS.md in the repository, which is the source of truth. Suggest a change.