template.yaml 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. kind: compose
  2. metadata:
  3. name: Traefik
  4. description: 'Traefik is a modern HTTP reverse proxy and load balancer that makes
  5. deploying microservices easy.
  6. This template sets up Traefik with automatic HTTPS using Let''s Encrypt and can
  7. be integrated with Authentik for SSO.
  8. ## References
  9. - **Project:** https://traefik.io/
  10. - **Documentation:** https://doc.traefik.io/traefik/
  11. - **GitHub:** https://github.com/traefik/traefik'
  12. version: v3.6.8
  13. author: Christian Lempa
  14. date: '2026-02-11'
  15. tags:
  16. - swarm
  17. - volume
  18. icon:
  19. provider: simpleicons
  20. id: traefikproxy
  21. draft: false
  22. next_steps: "Start the `{{ service_name }}` project\n{% if swarm_enabled %}\n1.\
  23. \ Deploy Traefik to Docker Swarm:\n `docker stack deploy -c compose.yaml {{ service_name\
  24. \ }}`\n{% else %}\n1. Copy the project directory for `{{ service_name }}` to the\
  25. \ host.\n2. Start Traefik with Docker Compose from the project directory:\n `docker\
  26. \ compose up -d`\n{% endif %}"
  27. schema: '1.2'
  28. spec:
  29. general:
  30. vars:
  31. service_name:
  32. default: traefik
  33. container_name:
  34. type: str
  35. container_hostname:
  36. type: str
  37. container_timezone:
  38. type: str
  39. container_loglevel:
  40. type: enum
  41. options:
  42. - debug
  43. - info
  44. - warn
  45. - error
  46. restart_policy:
  47. type: enum
  48. options:
  49. - unless-stopped
  50. - always
  51. - on-failure
  52. - 'no'
  53. default: unless-stopped
  54. required: true
  55. ports:
  56. vars:
  57. ports_dashboard:
  58. description: Dashboard port (external)
  59. type: int
  60. default: 8080
  61. required: true
  62. needs:
  63. - dashboard_enabled=true
  64. extra: Only used when dashboard is enabled
  65. ports_http:
  66. default: 80
  67. extra: Maps to entrypoint 'web'
  68. ports_https:
  69. default: 443
  70. extra: Maps to entrypoint 'websecure'
  71. traefik:
  72. title: Settings
  73. vars:
  74. accesslog_enabled:
  75. description: Enable Traefik access log
  76. type: bool
  77. default: false
  78. dashboard_enabled:
  79. description: Enable Traefik dashboard
  80. type: bool
  81. default: false
  82. extra: 'WARNING: Don''t use in production!'
  83. prometheus_enabled:
  84. description: Enable Prometheus metrics
  85. type: bool
  86. default: false
  87. security_enabled:
  88. description: Create production-ready security headers middleware
  89. type: bool
  90. default: true
  91. extra: Enables HSTS, XSS protection, frame denial, etc.
  92. traefik_network:
  93. extra: Network that Traefik uses to connect to services
  94. traefik_network_external:
  95. description: Use existing Docker network (external)
  96. type: bool
  97. default: false
  98. toggle: dashboard_enabled
  99. description: Configure Traefik features and settings
  100. traefik_tls:
  101. title: TLS Settings
  102. toggle: traefik_tls_enabled
  103. vars:
  104. traefik_tls_enabled:
  105. description: Enable HTTPS/TLS with ACME
  106. type: bool
  107. default: false
  108. traefik_tls_certresolver:
  109. description: ACME DNS challenge provider
  110. type: str
  111. options:
  112. - cloudflare
  113. - porkbun
  114. - godaddy
  115. - digitalocean
  116. - route53
  117. - azure
  118. - namecheap
  119. - ovh
  120. default: cloudflare
  121. required: true
  122. needs:
  123. - traefik_tls_enabled=true
  124. extra: DNS provider for domain validation
  125. traefik_tls_acme_email:
  126. description: Email address for ACME
  127. type: str
  128. required: true
  129. needs:
  130. - traefik_tls_enabled=true
  131. traefik_tls_acme_endpoint:
  132. description: OVH API endpoint
  133. type: str
  134. default: ovh-eu
  135. required: false
  136. needs:
  137. - traefik_tls_enabled=true
  138. - traefik_tls_certresolver=ovh
  139. extra: Common values are ovh-eu, ovh-ca, ovh-us
  140. traefik_tls_acme_region:
  141. description: AWS Region
  142. type: str
  143. default: us-east-1
  144. required: true
  145. needs:
  146. - traefik_tls_enabled=true
  147. - traefik_tls_certresolver=route53
  148. traefik_tls_acme_resource_group:
  149. description: Azure Resource Group
  150. type: str
  151. required: true
  152. needs:
  153. - traefik_tls_enabled=true
  154. - traefik_tls_certresolver=azure
  155. traefik_tls_acme_secret_key:
  156. description: DNS provider secret key
  157. type: str
  158. sensitive: true
  159. required: true
  160. needs:
  161. - traefik_tls_enabled=true
  162. - traefik_tls_certresolver=azure,godaddy,ovh,porkbun,route53
  163. extra: AZURE_CLIENT_SECRET, GODADDY_API_SECRET, OVH_APPLICATION_SECRET, PORKBUN_SECRET_API_KEY, or AWS_SECRET_ACCESS_KEY
  164. traefik_tls_acme_subscription_id:
  165. description: Azure Subscription ID
  166. type: str
  167. required: true
  168. needs:
  169. - traefik_tls_enabled=true
  170. - traefik_tls_certresolver=azure
  171. traefik_tls_acme_tenant_id:
  172. description: Azure Tenant ID
  173. type: str
  174. required: true
  175. needs:
  176. - traefik_tls_enabled=true
  177. - traefik_tls_certresolver=azure
  178. traefik_tls_acme_token:
  179. description: DNS provider API token
  180. type: str
  181. sensitive: true
  182. required: true
  183. needs:
  184. - traefik_tls_enabled=true
  185. - traefik_tls_certresolver=cloudflare,digitalocean,godaddy,namecheap,ovh,porkbun
  186. extra: CF_DNS_API_TOKEN, DO_AUTH_TOKEN, GODADDY_API_KEY, NAMECHEAP_API_KEY, OVH_APPLICATION_KEY, or PORKBUN_API_KEY
  187. traefik_tls_acme_username:
  188. description: Namecheap API username
  189. type: str
  190. required: true
  191. needs:
  192. - traefik_tls_enabled=true
  193. - traefik_tls_certresolver=namecheap
  194. traefik_tls_acme_consumer_key:
  195. description: OVH Consumer Key
  196. type: str
  197. sensitive: true
  198. required: true
  199. needs:
  200. - traefik_tls_enabled=true
  201. - traefik_tls_certresolver=ovh
  202. traefik_tls_redirect:
  203. description: Redirect all HTTP traffic to HTTPS
  204. type: bool
  205. default: true
  206. needs:
  207. - traefik_tls_enabled=true
  208. traefik_tls_secure_ciphers:
  209. description: Enable strict cipher suites (recommended)
  210. type: bool
  211. default: false
  212. needs:
  213. - traefik_tls_enabled=true
  214. extra: Enforces modern, secure cipher suites
  215. traefik_tls_skipverify:
  216. description: Skip TLS verification for backend servers
  217. type: bool
  218. default: false
  219. needs:
  220. - traefik_tls_enabled=true
  221. extra: 'WARNING: Only enable for self-signed certificates in trusted environments'
  222. volume:
  223. vars:
  224. volume_mode:
  225. type: enum
  226. options:
  227. - local
  228. - mount
  229. - nfs
  230. default: local
  231. required: true
  232. volume_mount_path:
  233. type: str
  234. default: /mnt/storage
  235. needs:
  236. - volume_mode=mount
  237. required: true
  238. volume_nfs_server:
  239. type: str
  240. default: 192.168.1.1
  241. needs:
  242. - volume_mode=nfs
  243. required: true
  244. volume_nfs_path:
  245. type: str
  246. default: /export
  247. needs:
  248. - volume_mode=nfs
  249. required: true
  250. volume_nfs_options:
  251. type: str
  252. default: rw,nolock,soft
  253. needs:
  254. - volume_mode=nfs
  255. required: true
  256. swarm:
  257. title: Docker Swarm
  258. toggle: swarm_enabled
  259. vars:
  260. swarm_placement_mode:
  261. type: enum
  262. options:
  263. - replicated
  264. - global
  265. default: replicated
  266. required: true
  267. swarm_replicas:
  268. type: int
  269. default: 1
  270. needs:
  271. - swarm_placement_mode=replicated
  272. required: true
  273. swarm_placement_host:
  274. type: str
  275. description: Target hostname for placement constraint
  276. default: ''
  277. needs:
  278. - swarm_placement_mode=replicated
  279. extra: Constrains service to run on specific node by hostname
  280. swarm_enabled:
  281. type: bool
  282. default: false
  283. description: Enable Docker Swarm mode