template.yaml 7.4 KB

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