This commit is contained in:
Mike McFetridge
2026-07-20 09:23:17 -04:00
parent c1315882da
commit 72272e4006
3179 changed files with 562960 additions and 14 deletions
+513
View File
@@ -0,0 +1,513 @@
{
"slug": "traefik-swarm",
"kind": "swarm",
"metadata": {
"name": "Traefik",
"description": "Swarm-only Traefik reverse proxy and load balancer with Docker Swarm service discovery, optional Let's Encrypt DNS challenge TLS, dashboard, and metrics support. For Traefik-managed ACME certificates, run a single replica; Traefik OSS ACME storage is not safe for active-active writes from multiple instances. References: Traefik Swarm provider https://doc.traefik.io/traefik/providers/swarm/ and Traefik ACME storage notes https://doc.traefik.io/traefik/https/acme/.",
"tags": [
"reverse-proxy",
"traefik"
],
"icon": {
"provider": "devicon",
"id": "traefikproxy",
"color": "sky"
},
"draft": false,
"version": {
"name": "v3.6.15",
"source_dep_name": "docker.io/library/traefik",
"source_dep_version": "v3.6.15"
}
},
"variables": [
{
"name": "general",
"title": "General",
"items": [
{
"name": "service_name",
"type": "str",
"title": "Service Name",
"required": false,
"default": "traefik",
"config": {
"placeholder": "traefik"
}
},
{
"name": "container_timezone",
"type": "str",
"title": "Container Timezone",
"required": true,
"default": "UTC",
"config": {
"placeholder": "UTC"
}
},
{
"name": "container_loglevel",
"type": "enum",
"title": "Log Level",
"required": false,
"default": "info",
"description": "Traefik log level.",
"config": {
"options": [
"debug",
"info",
"warn",
"error"
]
}
}
]
},
{
"name": "ports",
"title": "Ports",
"items": [
{
"name": "ports_http",
"type": "int",
"title": "HTTP Port",
"required": true,
"default": 80,
"description": "Published port for the web entrypoint.",
"config": {
"placeholder": "80"
}
},
{
"name": "ports_https",
"type": "int",
"title": "HTTPS Port",
"required": true,
"default": 443,
"description": "Published port for the websecure entrypoint.",
"config": {
"placeholder": "443"
}
},
{
"name": "ports_dashboard",
"type": "int",
"title": "Dashboard Port",
"required": true,
"default": 8080,
"description": "Published port for the insecure dashboard/API.",
"config": {
"placeholder": "8080"
},
"needs": [
"dashboard_enabled=true"
]
},
{
"name": "ports_metrics",
"type": "int",
"title": "Metrics Port",
"required": true,
"default": 9090,
"description": "Published port for Prometheus metrics.",
"config": {
"placeholder": "9090"
},
"needs": [
"prometheus_enabled=true"
]
},
{
"name": "ports_publish_mode",
"type": "enum",
"title": "Publish Mode",
"required": true,
"default": "host",
"description": "Swarm port publishing mode. Host mode is recommended for edge proxies.",
"config": {
"options": [
"host",
"ingress"
]
}
}
]
},
{
"name": "traefik",
"title": "Traefik",
"items": [
{
"name": "traefik_network",
"type": "str",
"title": "Network",
"required": true,
"default": "traefik",
"description": "Overlay network Traefik uses to reach routed Swarm services.",
"config": {
"placeholder": "traefik"
}
},
{
"name": "traefik_network_external",
"type": "bool",
"title": "External Network",
"required": false,
"default": false
},
{
"name": "accesslog_enabled",
"type": "bool",
"title": "Access Log",
"required": false,
"default": false
},
{
"name": "dashboard_enabled",
"type": "bool",
"title": "Dashboard",
"required": false,
"default": false,
"description": "Enable the insecure Traefik dashboard/API. Do not expose this in production."
},
{
"name": "prometheus_enabled",
"type": "bool",
"title": "Prometheus",
"required": false,
"default": false
}
]
},
{
"name": "traefik-tls",
"title": "Traefik TLS",
"toggle": "traefik_tls_enabled",
"items": [
{
"name": "traefik_tls_enabled",
"type": "bool",
"title": "TLS",
"required": false,
"default": false
},
{
"name": "traefik_tls_certresolver",
"type": "enum",
"title": "DNS Provider",
"required": true,
"default": "cloudflare",
"description": "ACME DNS challenge provider.",
"config": {
"options": [
"cloudflare",
"porkbun",
"godaddy",
"digitalocean",
"route53",
"azure",
"namecheap",
"ovh"
]
},
"needs": [
"traefik_tls_enabled=true"
]
},
{
"name": "traefik_tls_acme_email",
"type": "str",
"title": "ACME Email",
"required": true,
"description": "Email address used for ACME registration.",
"config": {
"placeholder": "admin@example.com"
},
"needs": [
"traefik_tls_enabled=true"
]
},
{
"name": "traefik_tls_acme_token",
"type": "secret",
"title": "API Token / ID",
"required": true,
"description": "DNS provider API token or access/client ID. Stored as a Swarm secret.",
"needs": [
"traefik_tls_enabled=true",
"traefik_tls_certresolver=azure,cloudflare,digitalocean,godaddy,namecheap,ovh,porkbun,route53"
]
},
{
"name": "traefik_tls_acme_secret_key",
"type": "secret",
"title": "Secret Key",
"required": true,
"description": "DNS provider secret key. Stored as a Swarm secret.",
"needs": [
"traefik_tls_enabled=true",
"traefik_tls_certresolver=azure,godaddy,ovh,porkbun,route53"
]
},
{
"name": "traefik_tls_acme_consumer_key",
"type": "secret",
"title": "Consumer Key",
"required": true,
"description": "OVH consumer key. Stored as a Swarm secret.",
"needs": [
"traefik_tls_enabled=true",
"traefik_tls_certresolver=ovh"
]
},
{
"name": "traefik_tls_acme_username",
"type": "str",
"title": "Username",
"required": true,
"description": "Namecheap API username.",
"config": {
"placeholder": "namecheap-user"
},
"needs": [
"traefik_tls_enabled=true",
"traefik_tls_certresolver=namecheap"
]
},
{
"name": "traefik_tls_acme_region",
"type": "str",
"title": "AWS Region",
"required": true,
"default": "us-east-1",
"description": "AWS region for Route53.",
"config": {
"placeholder": "us-east-1"
},
"needs": [
"traefik_tls_enabled=true",
"traefik_tls_certresolver=route53"
]
},
{
"name": "traefik_tls_acme_endpoint",
"type": "str",
"title": "OVH Endpoint",
"required": false,
"default": "ovh-eu",
"description": "OVH API endpoint.",
"config": {
"placeholder": "ovh-eu"
},
"needs": [
"traefik_tls_enabled=true",
"traefik_tls_certresolver=ovh"
]
},
{
"name": "traefik_tls_acme_tenant_id",
"type": "str",
"title": "Azure Tenant ID",
"required": true,
"needs": [
"traefik_tls_enabled=true",
"traefik_tls_certresolver=azure"
]
},
{
"name": "traefik_tls_acme_subscription_id",
"type": "str",
"title": "Azure Subscription ID",
"required": true,
"needs": [
"traefik_tls_enabled=true",
"traefik_tls_certresolver=azure"
]
},
{
"name": "traefik_tls_acme_resource_group",
"type": "str",
"title": "Azure Resource Group",
"required": true,
"description": "Azure DNS resource group.",
"needs": [
"traefik_tls_enabled=true",
"traefik_tls_certresolver=azure"
]
},
{
"name": "traefik_tls_redirect",
"type": "bool",
"title": "HTTP Redirect",
"required": false,
"default": true,
"description": "Redirect all HTTP traffic to HTTPS.",
"needs": [
"traefik_tls_enabled=true"
]
},
{
"name": "traefik_tls_min_version",
"type": "enum",
"title": "Minimum TLS Version",
"required": false,
"default": "VersionTLS12",
"config": {
"options": [
"VersionTLS12",
"VersionTLS13"
]
},
"needs": [
"traefik_tls_enabled=true"
]
},
{
"name": "traefik_tls_secure_ciphers",
"type": "bool",
"title": "Strict Ciphers",
"required": false,
"default": false,
"needs": [
"traefik_tls_enabled=true"
]
},
{
"name": "traefik_tls_skipverify",
"type": "bool",
"title": "Skip Backend Verify",
"required": false,
"default": false,
"description": "Skip TLS verification for backend servers.",
"needs": [
"traefik_tls_enabled=true"
]
}
]
},
{
"name": "swarm",
"title": "Docker Swarm",
"items": [
{
"name": "swarm_placement_mode",
"type": "enum",
"title": "Placement Mode",
"required": true,
"default": "replicated",
"description": "Swarm deployment mode. Traefik is constrained to manager nodes because the Swarm provider reads service state through the local Docker socket. Use replicated with one replica when Traefik manages ACME certificates. Global mode runs one task per eligible manager node, but Traefik OSS cannot safely coordinate active-active ACME writes to a shared acme.json. See https://doc.traefik.io/traefik/providers/swarm/ and https://doc.traefik.io/traefik/https/acme/.",
"config": {
"options": [
"global",
"replicated"
]
}
},
{
"name": "swarm_replicas",
"type": "int",
"title": "Replicas",
"required": false,
"default": 1,
"description": "Number of replicas when placement mode is replicated. Keep this at 1 when Traefik manages ACME certificates; use multiple replicas only with external/static certificate management.",
"config": {
"placeholder": "1",
"unit": "replicas",
"slider": true,
"min": 1,
"max": 10,
"step": 1
},
"needs": [
"swarm_placement_mode=replicated"
]
},
{
"name": "swarm_placement_host",
"type": "str",
"title": "Placement Host",
"required": false,
"default": "",
"description": "Optional manager-node hostname constraint. The selected node must be a Swarm manager.",
"config": {
"placeholder": "swarm-node-1"
}
}
]
},
{
"name": "volume",
"title": "Volume",
"items": [
{
"name": "volume_mode",
"type": "enum",
"title": "Volume Mode",
"required": true,
"default": "local",
"description": "Storage mode for ACME certificate data. Shared storage allows file access from multiple nodes, but it does not make Traefik-managed ACME safe with multiple active Traefik writers. Use one Traefik replica for ACME, or use external/static certificate management for multi-replica Traefik. See https://doc.traefik.io/traefik/https/acme/.",
"config": {
"options": [
"local",
"mount",
"nfs"
]
}
},
{
"name": "volume_mount_path",
"type": "str",
"title": "Bind Mount Path",
"required": true,
"default": "/data/traefik/certs",
"description": "Host path used for certificate storage.",
"config": {
"placeholder": "/data/traefik/certs"
},
"needs": [
"volume_mode=mount"
]
},
{
"name": "volume_nfs_server",
"type": "str",
"title": "NFS Server",
"required": true,
"default": "NFS_SERVER",
"config": {
"placeholder": "NFS_SERVER"
},
"needs": [
"volume_mode=nfs"
]
},
{
"name": "volume_nfs_path",
"type": "str",
"title": "NFS Path",
"required": true,
"default": "/export/traefik/certs",
"config": {
"placeholder": "/export/traefik/certs"
},
"needs": [
"volume_mode=nfs"
]
},
{
"name": "volume_nfs_options",
"type": "str",
"title": "NFS Options",
"required": true,
"default": "rw,nolock,soft",
"config": {
"placeholder": "rw,nolock,soft"
},
"needs": [
"volume_mode=nfs"
]
}
]
}
]
}