Configuration model
Unkey services read configuration from a TOML file passed at startup. Environment variables can be referenced with ${VAR} and are expanded before parsing. Defaults and validation run after parsing.
The config schema maps to svc/frontline/config.go .
Minimal config example:
challenge_port = 7070
http_port = 7443
region = "${UNKEY_REGION}.aws"
instance_id = "${POD_NAME}"
apex_domain = "${UNKEY_APEX_DOMAIN}"
max_hops = 10
ctrl_addr = "${UNKEY_CTRL_ADDR}"
prometheus_port = 9090
[ database ]
primary = "${UNKEY_DATABASE_PRIMARY}"
readonly_replica = "${UNKEY_DATABASE_REPLICA}"
[ vault ]
url = "${UNKEY_VAULT_URL}"
token = "${UNKEY_VAULT_TOKEN}"
[ gossip ]
bind_addr = "0.0.0.0"
lan_port = 7946
wan_port = 7947
secret_key = "${UNKEY_GOSSIP_SECRET_KEY}"
Instance identifier for logs and tracing.
Port for ACME HTTP-01 challenges.
Region label for routing.
apex_domain
string
default: "unkey.cloud"
Apex domain for regional routing.
Maximum number of routing hops.
ctrl_addr
string
default: "localhost:8080"
Control API address.
Prometheus metrics port. Set to 0 to disable.
MySQL configuration. database.readonly_replica
Optional read replica DSN.
Gossip-based cache invalidation. Secret key for gossip encryption.
Tracing and logging configuration. observability.tracing.sample_rate
Trace sampling rate.
observability.logging.sample_rate
Log sampling rate.
observability.logging.slow_threshold
Slow log threshold.
Environment variables
The Helm chart provides these variables for the default config template:
Example configuration
challenge_port = 7070
http_port = 7443
region = "${UNKEY_REGION}.aws"
instance_id = "${POD_NAME}"
apex_domain = "${UNKEY_APEX_DOMAIN}"
max_hops = 10
ctrl_addr = "${UNKEY_CTRL_ADDR}"
prometheus_port = 9090
[ database ]
primary = "${UNKEY_DATABASE_PRIMARY}"
readonly_replica = "${UNKEY_DATABASE_REPLICA}"
[ vault ]
url = "${UNKEY_VAULT_URL}"
token = "${UNKEY_VAULT_TOKEN}"
[ gossip ]
bind_addr = "0.0.0.0"
lan_port = 7946
wan_port = 7947
secret_key = "${UNKEY_GOSSIP_SECRET_KEY}"
[ observability . tracing ]
sample_rate = 0.1
[ observability . logging ]
sample_rate = 0.01
slow_threshold = "2s"