compose.yaml.j2 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. services:
  2. {{ service_name }}:
  3. image: docker.io/library/traefik:v3.6.0
  4. {% if not swarm_enabled %}
  5. container_name: {{ container_name }}
  6. security_opt:
  7. - no-new-privileges:true
  8. {% endif %}
  9. hostname: {{ container_hostname }}
  10. ports:
  11. - "{{ ports_http }}:80"
  12. - "{{ ports_https }}:443"
  13. {% if dashboard_enabled %}
  14. - "{{ ports_dashboard }}:8080"
  15. {% endif %}
  16. volumes:
  17. - /var/run/docker.sock:/var/run/docker.sock:ro
  18. {% if not swarm_enabled %}
  19. - ./config/:/etc/traefik/:ro
  20. - ./certs/:/var/traefik/certs/:rw
  21. {% else %}
  22. {% if swarm_volume_mode == 'mount' %}
  23. - {{ swarm_volume_mount_path }}:/var/traefik/certs/:rw
  24. {% elif swarm_volume_mode == 'local' %}
  25. - traefik_certs:/var/traefik/certs/:rw
  26. {% elif swarm_volume_mode == 'nfs' %}
  27. - traefik_certs:/var/traefik/certs/:rw
  28. {% endif %}
  29. {% endif %}
  30. {% if not swarm_enabled %}
  31. env_file:
  32. - ./.env
  33. {% endif %}
  34. environment:
  35. - TZ={{ container_timezone }}
  36. {% if traefik_tls_enabled %}
  37. {% if traefik_tls_acme_provider == 'cloudflare' %}
  38. {% if swarm_enabled %}
  39. - CF_DNS_API_TOKEN_FILE=/run/secrets/{{ traefik_tls_acme_secret_name }}
  40. {% else %}
  41. - CF_DNS_API_TOKEN=${CF_DNS_API_TOKEN}
  42. {% endif %}
  43. {% endif %}
  44. {% endif %}
  45. {% if swarm_enabled %}
  46. configs:
  47. - source: traefik_config
  48. target: /etc/traefik/traefik.yaml
  49. - source: traefik_middlewares
  50. target: /etc/traefik/files/middlewares.yaml
  51. - source: traefik_routers
  52. target: /etc/traefik/files/routers.yaml
  53. - source: traefik_services
  54. target: /etc/traefik/files/services.yaml
  55. {% endif %}
  56. healthcheck:
  57. test: ["CMD", "traefik", "healthcheck", "--ping"]
  58. interval: 30s
  59. timeout: 5s
  60. retries: 3
  61. start_period: 10s
  62. networks:
  63. - {{ traefik_network }}
  64. {% if swarm_enabled %}
  65. {% if traefik_tls_enabled %}
  66. secrets:
  67. - {{ traefik_tls_acme_secret_name }}
  68. {% endif %}
  69. deploy:
  70. mode: {{ swarm_placement_mode }}
  71. {% if swarm_placement_mode == 'replicated' %}
  72. replicas: {{ swarm_replicas }}
  73. {% endif %}
  74. {% if swarm_placement_host %}
  75. placement:
  76. constraints:
  77. - node.hostname == {{ swarm_placement_host }}
  78. {% endif %}
  79. {% else %}
  80. restart: {{ restart_policy }}
  81. {% endif %}
  82. {% if swarm_enabled %}
  83. {% if swarm_volume_mode in ['local', 'nfs'] %}
  84. volumes:
  85. traefik_certs:
  86. {% if swarm_volume_mode == 'nfs' %}
  87. driver: local
  88. driver_opts:
  89. type: nfs
  90. o: addr={{ swarm_volume_nfs_server }},nfsvers=4,{{ swarm_volume_nfs_options }}
  91. device: ":{{ swarm_volume_nfs_path }}"
  92. {% endif %}
  93. {% endif %}
  94. configs:
  95. traefik_config:
  96. file: ./config/traefik.yaml
  97. traefik_middlewares:
  98. file: ./config/files/middlewares.yaml
  99. traefik_routers:
  100. file: ./config/files/routers.yaml
  101. traefik_services:
  102. file: ./config/files/services.yaml
  103. {% if traefik_tls_enabled %}
  104. secrets:
  105. {{ traefik_tls_acme_secret_name }}:
  106. file: ./.env.secret
  107. {% endif %}
  108. {% endif %}
  109. networks:
  110. {{ traefik_network }}:
  111. {% if traefik_network_external %}
  112. external: true
  113. {% else %}
  114. {% if swarm_enabled %}
  115. driver: overlay
  116. attachable: true
  117. {% else %}
  118. driver: bridge
  119. {% endif %}
  120. name: {{ traefik_network }}
  121. {% endif %}