alpine.conf key reference (server runtime)¶
How to read these tables:
Key: HOCON path used inapplication.confandoverride.confDefault value: shipped defaultDescription: runtime meaning and impact
Process-wide secrets¶
These keys live at the top of the alpine { ... } block and apply to the whole {{ product_name }} process. They back AES-256 at-rest encryption and key derivation for secrets the server seals before persisting.
| Key | Default value | Description |
|---|---|---|
alpine.secret |
"abcdefghijklmnopqrstuwyz0123456789abcdefghijklmnopqrstuwyz0123456789" |
Process-wide AES-256 secret used to encrypt secrets at rest. |
alpine.salt |
"abcdefghijklmnopqrstuwyzabcdefghijklmnopqrstuwyz" |
Salt used together with alpine.secret for key derivation. |
Override the shipped secret and salt in production
The values shipped in alpine.conf are development placeholders only. They are public and identical across every install. Override both alpine.secret and alpine.salt for every non-development deployment via override.conf or CONFIG_FORCE_alpine_secret / CONFIG_FORCE_alpine_salt. See Environment overrides with CONFIG_FORCE and the Override workflow.
Endpoint and service mapping¶
Each entry under alpine.endpoints[] is one gRPC listener. The runtime reads the bind host and port directly from the endpoint entry (bindHost / port); the named settings block carries TLS, keepalive, flow-control, and message-size limits for that listener.
| Key | Default value | Description |
|---|---|---|
alpine.fail.on.missing.services |
false |
If true, startup fails when a configured service provider is missing. |
alpine.endpoints[].name |
"public" |
Logical endpoint name. |
alpine.endpoints[].bindHost |
"any" |
External bind host for the endpoint listener. |
alpine.endpoints[].port |
5051 |
External bind port for the endpoint listener. |
alpine.endpoints[].settings |
"alpine" |
Name of server settings block under alpine.settings. |
alpine.endpoints[].services |
["alpine-admin", "alpine-ca", "alpine-keyserver"] |
Service IDs exposed on the endpoint. |
Server settings (alpine.settings.alpine.*)¶
The settings block carries TLS, keepalive, flow-control, and message-size limits for the listener that references it. The bind host and port are not read here; they come from the matching alpine.endpoints[] entry.
| Key | Default value | Description |
|---|---|---|
alpine.settings.alpine.ssl.enable |
false |
Enables TLS for gRPC server settings block. |
alpine.settings.alpine.ssl.type |
"PKCS12" |
Server keystore type. |
alpine.settings.alpine.ssl.store |
"" |
Server keystore file path. |
alpine.settings.alpine.ssl.password |
"" |
Server keystore password. |
alpine.settings.alpine.ssl.protocol |
"TLSv1.3" |
TLS protocol version. |
alpine.settings.alpine.ssl.client.enable |
false |
Enables mTLS client authentication. |
alpine.settings.alpine.ssl.client.type |
"PKCS12" |
Client truststore/keystore type. |
alpine.settings.alpine.ssl.client.store |
"" |
Client truststore/keystore file path. |
alpine.settings.alpine.ssl.client.password |
"" |
Client truststore/keystore password. |
alpine.settings.alpine.handshake.timeout |
30000000000 |
gRPC/TCP handshake timeout in nanoseconds (30s). |
alpine.settings.alpine.keep.alive.time |
7200000000000 |
Keepalive ping interval in nanoseconds (2h). |
alpine.settings.alpine.keep.alive.timeout |
20000000000 |
Keepalive response timeout in nanoseconds. |
alpine.settings.alpine.keep.alive.permit |
300000000000 |
Minimum allowed interval for keepalive pings in nanoseconds. |
alpine.settings.alpine.keep.alive.permitWithoutCalls |
true |
Allows keepalive pings when no RPC is active. |
alpine.settings.alpine.flow.control.windows |
1048576 |
Flow-control window size in bytes. |
alpine.settings.alpine.max.concurrent.calls.per.connection |
2147483647 |
Maximum concurrent calls per connection. |
alpine.settings.alpine.max.connection.age |
9223372036854775807 |
Maximum connection age in nanoseconds. |
alpine.settings.alpine.max.connection.grace |
9223372036854775807 |
Grace period before forced connection close in nanoseconds. |
alpine.settings.alpine.max.connection.idle |
9223372036854775807 |
Maximum idle connection duration in nanoseconds. |
alpine.settings.alpine.max.inbound.message.size |
4194304 |
Maximum inbound message size in bytes. |
alpine.settings.alpine.max.inbound.metadata.size |
8192 |
Maximum inbound metadata size in bytes. |
Service-specific settings (alpine.services.*)¶
| Key | Default value | Description |
|---|---|---|
alpine.services.alpine-admin.initialization.enabled |
true |
Enables the one-time admin initialization gate on this endpoint. |
alpine.services.alpine-admin.initialization.secret |
"dev-init-shared-secret-0123456789-abcdef" |
HS256 shared secret of at least 32 bytes that gates the admin CLI init command. |
alpine.services.alpine-keyserver.hsm.threadsPerKey |
3 |
Number of worker threads allocated per HSM key context. |
alpine.services.alpine-keyserver.hsm.queueCapacityPerKey |
0 |
Queue capacity per key; 0 means unbounded queue. |
alpine.services.alpine-keyserver.hsm.daemonThreads |
false |
Whether HSM workers are daemon threads. |
alpine.services.alpine-keyserver.hsm.prestartCoreThreads |
true |
Prestarts core worker threads. |
alpine.services.alpine-keyserver.hsm.threadNamePrefix |
"runner-" |
Prefix for HSM worker thread names. |
alpine.services.alpine-ca |
{} |
Placeholder block for CA-specific service options. |
Override the admin init secret in production
alpine.services.alpine-admin.initialization.secret ships with a development-only placeholder. The admin CLI init command signs its one-time bootstrap request with this HS256 secret, so it must be replaced with a private, random value of at least 32 bytes for any real deployment — via override.conf or CONFIG_FORCE_alpine_services_alpine__admin_initialization_secret.