Configuration overview

Sōzune reads its main configuration from a YAML file. Path: config.yaml in the working directory by default, overridable through the CONFIG_PATH environment variable.

If the file is missing, Sōzune falls back to a built-in default configuration (everything disabled, both listeners on default ports).

Example

providers:
  docker:
    enabled: true
    expose_by_default: false

api:
  enabled: true
  listen_address: "127.0.0.1:3035"
  users:
    - name: admin
      hash: "<sha256 hex of password>"
      role: admin
  cors_origins: []

acme:
  enabled: false
  email: "you@example.com"
  certs_dir: "/etc/sozune/certs"
  staging: true
  challenge_port: 3036

proxy:
  http:
    listen_address: 80
  https:
    listen_address: 443
  tcp:
    - name: postgres
      listen: 5432
  max_buffers: 500
  buffer_size: 16384
  startup_delay_ms: 1000
  cluster_setup_delay_ms: 500

middleware:
  port: 3037

Sections

SectionPurpose
providersSources for entrypoint discovery: Docker, Podman, Swarm, Kubernetes, Nomad, HTTP polling, or a YAML file.
apiREST API for live entrypoint management.
acmeLet's Encrypt provisioning.
proxySōzu listeners and runtime tuning.
middlewareInternal middleware proxy port.

Providers

providers:
  docker:
    enabled: true
    endpoint: "/var/run/docker.sock"
    expose_by_default: false
  swarm:
    enabled: false
    endpoint: "/var/run/docker.sock"
    expose_by_default: false
    # network: sozune-public   # optional: only consider VIPs on this overlay
    refresh_interval: 15
  http:
    enabled: false
    url: "https://config.example.com/entrypoints"
    poll_interval: 30
  config_file:
    enabled: false
    path: "/etc/sozune/config.yaml"
    watch: true
FieldDefaultDescription
docker.enabledfalseEnables Docker label discovery
docker.endpoint/var/run/docker.sockDocker socket path
docker.expose_by_defaultfalseIf true, every container is candidate without sozune.enable=true
swarm.enabledfalseEnables Docker Swarm service discovery (must point to a manager)
swarm.endpoint/var/run/docker.sockDocker socket on a Swarm manager
swarm.expose_by_defaultfalseIf true, every service is candidate without sozune.enable=true
swarm.network""Optional overlay network filter
swarm.refresh_interval15Periodic poll interval, in seconds (safety net behind the event stream)
http.enabledfalseEnables polling a remote URL for JSON entrypoints
http.urlURL to poll
http.poll_interval30Polling interval, in seconds
config_file.enabledfalseEnables a static YAML file as a source
config_file.pathPath to the entrypoints file
config_file.watchtrueHot-reload on file change

API

FieldDefaultDescription
api.enabledfalseEnables the REST API
api.listen_address127.0.0.1:3035Bind address
api.users[]List of API users. Each entry has name, hash (hex sha256 of the password) and role (admin or read-only). The API refuses to start if this list is empty when api.enabled: true.
api.cors_origins[]Allowed origins for CORS

Proxy

FieldDefaultDescription
proxy.http.listen_address80Port for the HTTP listener
proxy.https.listen_address443Port for the HTTPS listener
proxy.tcp[]List of TCP listeners. Each entry has name (referenced by labels) and listen (port). See TCP routing.
proxy.max_buffers500Max number of buffers in the Sōzu pool
proxy.buffer_size16384Buffer size, in bytes
proxy.startup_delay_ms1000Delay before applying the initial config (gives Sōzu workers time to boot)
proxy.cluster_setup_delay_ms500Delay between cluster setup commands

Middleware

FieldDefaultDescription
middleware.port3037Port the internal middleware proxy listens on (rate limit, gzip, backend timeout). Auth, headers, strip prefix and redirects run natively in Sōzu and do not pass through this port.

ACME

See ACME / Let's Encrypt.

Environment variable overrides

Every field above can be overridden through an environment variable. The env var wins over the YAML value.

FieldEnv var
proxy.http.listen_addressSOZUNE_HTTP_PORT
proxy.https.listen_addressSOZUNE_HTTPS_PORT
proxy.max_buffersSOZUNE_PROXY_MAX_BUFFERS
proxy.buffer_sizeSOZUNE_PROXY_BUFFER_SIZE
proxy.startup_delay_msSOZUNE_PROXY_STARTUP_DELAY_MS
proxy.cluster_setup_delay_msSOZUNE_PROXY_CLUSTER_SETUP_DELAY_MS
proxy.reload_debounce_msSOZUNE_PROXY_RELOAD_DEBOUNCE_MS
api.enabledSOZUNE_API_ENABLED
api.listen_addressSOZUNE_API_LISTEN_ADDRESS
dashboard.enabledSOZUNE_DASHBOARD_ENABLED
dashboard.listen_addressSOZUNE_DASHBOARD_LISTEN_ADDRESS
providers.docker.enabledSOZUNE_PROVIDER_DOCKER_ENABLED
providers.docker.endpointSOZUNE_PROVIDER_DOCKER_ENDPOINT
providers.docker.expose_by_defaultSOZUNE_PROVIDER_DOCKER_EXPOSE_BY_DEFAULT
providers.podman.enabledSOZUNE_PROVIDER_PODMAN_ENABLED
providers.podman.endpointSOZUNE_PROVIDER_PODMAN_ENDPOINT
providers.podman.expose_by_defaultSOZUNE_PROVIDER_PODMAN_EXPOSE_BY_DEFAULT
providers.swarm.enabledSOZUNE_PROVIDER_SWARM_ENABLED
providers.swarm.endpointSOZUNE_PROVIDER_SWARM_ENDPOINT
providers.swarm.expose_by_defaultSOZUNE_PROVIDER_SWARM_EXPOSE_BY_DEFAULT
providers.swarm.networkSOZUNE_PROVIDER_SWARM_NETWORK
providers.swarm.refresh_intervalSOZUNE_PROVIDER_SWARM_REFRESH_INTERVAL
providers.kubernetes.enabledSOZUNE_PROVIDER_KUBERNETES_ENABLED
providers.kubernetes.kubeconfigSOZUNE_PROVIDER_KUBERNETES_KUBECONFIG
providers.kubernetes.namespaceSOZUNE_PROVIDER_KUBERNETES_NAMESPACE
providers.kubernetes.ingress_classSOZUNE_PROVIDER_KUBERNETES_INGRESS_CLASS
providers.kubernetes.expose_by_defaultSOZUNE_PROVIDER_KUBERNETES_EXPOSE_BY_DEFAULT
providers.http.enabledSOZUNE_PROVIDER_HTTP_ENABLED
providers.http.urlSOZUNE_PROVIDER_HTTP_URL
providers.http.poll_intervalSOZUNE_PROVIDER_HTTP_POLL_INTERVAL
providers.http.auth_headerSOZUNE_PROVIDER_HTTP_AUTH_HEADER
providers.http.auth_valueSOZUNE_PROVIDER_HTTP_AUTH_VALUE
providers.config_file.enabledSOZUNE_PROVIDER_CONFIG_FILE_ENABLED
providers.config_file.pathSOZUNE_PROVIDER_CONFIG_FILE_PATH
providers.config_file.watchSOZUNE_PROVIDER_CONFIG_FILE_WATCH
acme.enabledSOZUNE_ACME_ENABLED
acme.emailSOZUNE_ACME_EMAIL
acme.certs_dirSOZUNE_ACME_CERTS_DIR
acme.stagingSOZUNE_ACME_STAGING
acme.challenge_portSOZUNE_ACME_CHALLENGE_PORT
middleware.portSOZUNE_MIDDLEWARE_PORT

Booleans accept true/false/1/0/yes/no/on/off.

Standalone variables

These have no YAML counterpart:

Env varEffect
CONFIG_PATHPath to the YAML config file (default: config.yaml)
SOZUNE_DEBUGWhen true, routing failures (502) include a body listing configured hosts/backends and a did-you-mean suggestion. Off by default to avoid leaking topology. See Debugging.