Skip to content

Settings

Singleton application configuration in config/settings.yaml. Each key below has its own reference page; the complete example at the end shows them together.

Sections

Section Keys Page
General schemaVersion, appName, externalBaseURL General
Admin authentication adminAuth.* Admin authentication
Trusted proxies trustedProxies Trusted proxies
TLS tls.minVersion TLS
Security headers securityHeaders, stripResponseHeaders Security headers
Error pages errorPages Error pages
Maintenance maintenance Maintenance mode
DNS sync dnsSync DNS sync
Ingress discovery ingressDiscovery Kubernetes Ingress discovery
Docker discovery dockerDiscovery Docker container discovery
Access-list sync accessListSync Access-list source sync
Webhooks webhooks Webhooks
Notifications notifications Notifications
PROXY protocol proxyProtocol PROXY protocol

Complete example

schemaVersion: 1
appName: Go Proxy Manager
externalBaseURL: https://gpm.example.com
adminAuth:
  providers: [authentik-oidc]
  localLoginEnabled: true
  ssoOnly: false
tls:
  minVersion: "1.2"                 # fleet floor; a host may pin "1.3" (or back to "1.2")
webhooks:
  - name: ci
    url: https://hooks.example.com/gpm
    secret: ${FILE:/run/secrets/gpm_webhook_secret}
dnsSync:
  pihole:
    enabled: true
    url: http://pihole.lan
    appPassword: ${FILE:/run/secrets/pihole_app_password}
    apexTarget: edge.example.com
  cloudflare:
    enabled: true
    dnsProviderRef: cloudflare      # an existing dns-providers entry
    zoneName: example.com
    apexTarget: edge.example.com
    proxied: false
accessListSync:
  enabled: true
  pollInterval: 15m
ingressDiscovery:
  enabled: true
  apiURL: https://k8s.example.lan:6443
  tokenFile: /run/secrets/gpm-k8s-token
  caFile: /run/secrets/gpm-k8s-ca.crt
  pollInterval: 60s
  allowedDomainSuffixes: [example.com]
  template:
    upstream: { scheme: http, host: 10.0.0.40, port: 80 }   # the ingress controller
    tls:
      certificateRef: wildcard
      forceSSL: true
    middlewares: [sso]
    robotsNoIndex: true             # same field a hand-written host has
    timeouts: { connectSeconds: 5, readSeconds: 60 }
    tags: [cluster]
    defaultDNS: { lanDirect: true }
  profiles:                         # optional named chains, selected per Ingress
    public-ratelimited:
      upstream: { scheme: http, host: 10.0.0.40, port: 80 }
      tls: { certificateRef: wildcard, forceSSL: true }
      middlewares: [rate-limit]     # and no access list: public on purpose