compose.yaml.j2 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. services:
  2. {{ service_name }}:
  3. image: docker.io/library/traefik:v3.5.3
  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 traefik_tls_enabled and not swarm_enabled %}
  31. - ./.env.secret:/.env.secret:ro
  32. {% endif %}
  33. env_file:
  34. - ./.env
  35. {% if swarm_enabled %}
  36. configs:
  37. - source: traefik_config
  38. target: /etc/traefik/traefik.yaml
  39. - source: traefik_middlewares
  40. target: /etc/traefik/files/middlewares.yaml
  41. - source: traefik_routers
  42. target: /etc/traefik/files/routers.yaml
  43. - source: traefik_services
  44. target: /etc/traefik/files/services.yaml
  45. {% endif %}
  46. environment:
  47. - TZ={{ container_timezone }}
  48. healthcheck:
  49. test: ["CMD", "traefik", "healthcheck", "--ping"]
  50. interval: 30s
  51. timeout: 5s
  52. retries: 3
  53. start_period: 10s
  54. networks:
  55. - {{ traefik_network }}
  56. {% if swarm_enabled %}
  57. {% if traefik_tls_enabled %}
  58. secrets:
  59. - source: {{ traefik_tls_acme_secret_name }}
  60. target: /.env.secret
  61. mode: 0400
  62. {% endif %}
  63. deploy:
  64. mode: {{ swarm_placement_mode }}
  65. {% if swarm_placement_mode == 'replicated' %}
  66. replicas: {{ swarm_replicas }}
  67. {% endif %}
  68. {% if swarm_placement_host %}
  69. placement:
  70. constraints:
  71. - node.hostname == {{ swarm_placement_host }}
  72. {% endif %}
  73. {% else %}
  74. restart: {{ restart_policy }}
  75. {% endif %}
  76. {% if swarm_enabled %}
  77. {% if swarm_volume_mode in ['local', 'nfs'] %}
  78. volumes:
  79. traefik_certs:
  80. {% if swarm_volume_mode == 'nfs' %}
  81. driver: local
  82. driver_opts:
  83. type: nfs
  84. o: addr={{ swarm_volume_nfs_server }},nfsvers=4,{{ swarm_volume_nfs_options }}
  85. device: ":{{ swarm_volume_nfs_path }}"
  86. {% endif %}
  87. {% endif %}
  88. configs:
  89. traefik_config:
  90. file: ./config/traefik.yaml
  91. traefik_middlewares:
  92. file: ./config/files/middlewares.yaml
  93. traefik_routers:
  94. file: ./config/files/routers.yaml
  95. traefik_services:
  96. file: ./config/files/services.yaml
  97. {% if traefik_tls_enabled %}
  98. secrets:
  99. {{ traefik_tls_acme_secret_name }}:
  100. file: ./.env.secret
  101. {% endif %}
  102. {% endif %}
  103. networks:
  104. {{ traefik_network }}:
  105. {% if traefik_network_external %}
  106. external: true
  107. {% else %}
  108. {% if swarm_enabled %}
  109. driver: overlay
  110. attachable: true
  111. {% else %}
  112. driver: bridge
  113. {% endif %}
  114. name: {{ traefik_network }}
  115. {% endif %}