compose.yaml.j2 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. services:
  2. {{ service_name }}:
  3. image: docker.io/portainer/portainer-ce:2.38.1-alpine
  4. {% if not swarm_enabled %}
  5. restart: {{ restart_policy }}
  6. {% endif %}
  7. environment:
  8. - TZ={{ container_timezone }}
  9. {% if traefik_enabled %}
  10. networks:
  11. {{ traefik_network }}:
  12. {% endif %}
  13. ports:
  14. {% if not traefik_enabled %}
  15. - "{{ ports_http }}:9000"
  16. - "{{ ports_https }}:9443"
  17. {% endif %}
  18. - "{{ ports_edge }}:8000"
  19. volumes:
  20. - /run/docker.sock:/var/run/docker.sock
  21. {% if volume_mode == 'mount' %}
  22. - {{ volume_mount_path }}/data:/data
  23. {% else %}
  24. - {{ service_name }}_data:/data
  25. {% endif %}
  26. {% if traefik_enabled and not swarm_enabled %}
  27. labels:
  28. - traefik.enable=true
  29. - traefik.docker.network={{ traefik_network }}
  30. - traefik.http.services.{{ service_name }}_web.loadBalancer.server.port=9000
  31. - traefik.http.routers.{{ service_name }}_http.service={{ service_name }}_web
  32. - traefik.http.routers.{{ service_name }}_http.rule=Host(`{{ traefik_host }}.{{ traefik_domain }}`)
  33. - traefik.http.routers.{{ service_name }}_http.entrypoints=web
  34. {% if traefik_tls_enabled %}
  35. - traefik.http.routers.{{ service_name }}_https.service={{ service_name }}_web
  36. - traefik.http.routers.{{ service_name }}_https.rule=Host(`{{ traefik_host }}.{{ traefik_domain }}`)
  37. - traefik.http.routers.{{ service_name }}_https.entrypoints=websecure
  38. - traefik.http.routers.{{ service_name }}_https.tls=true
  39. - traefik.http.routers.{{ service_name }}_https.tls.certresolver={{ traefik_tls_certresolver }}
  40. {% endif %}
  41. {% endif %}
  42. {% if swarm_enabled %}
  43. deploy:
  44. mode: replicated
  45. replicas: 1
  46. {% if swarm_placement_host %}
  47. placement:
  48. constraints:
  49. - node.hostname == {{ swarm_placement_host }}
  50. {% endif %}
  51. restart_policy:
  52. condition: on-failure
  53. {% if traefik_enabled %}
  54. labels:
  55. - traefik.enable=true
  56. - traefik.docker.network={{ traefik_network }}
  57. - traefik.http.services.{{ service_name }}_web.loadBalancer.server.port=9000
  58. - traefik.http.routers.{{ service_name }}_http.service={{ service_name }}_web
  59. - traefik.http.routers.{{ service_name }}_http.rule=Host(`{{ traefik_host }}.{{ traefik_domain }}`)
  60. - traefik.http.routers.{{ service_name }}_http.entrypoints=web
  61. {% if traefik_tls_enabled %}
  62. - traefik.http.routers.{{ service_name }}_https.service={{ service_name }}_web
  63. - traefik.http.routers.{{ service_name }}_https.rule=Host(`{{ traefik_host }}.{{ traefik_domain }}`)
  64. - traefik.http.routers.{{ service_name }}_https.entrypoints=websecure
  65. - traefik.http.routers.{{ service_name }}_https.tls=true
  66. - traefik.http.routers.{{ service_name }}_https.tls.certresolver={{ traefik_tls_certresolver }}
  67. {% endif %}
  68. {% endif %}
  69. {% endif %}
  70. {% if volume_mode == 'local' %}
  71. volumes:
  72. {{ service_name }}_data:
  73. driver: local
  74. {% elif volume_mode == 'nfs' %}
  75. volumes:
  76. {{ service_name }}_data:
  77. driver: local
  78. driver_opts:
  79. type: nfs
  80. o: addr={{ volume_nfs_server }},nfsvers=4,{{ volume_nfs_options }}
  81. device: ":{{ volume_nfs_path }}/data"
  82. {% endif %}
  83. {% if traefik_enabled %}
  84. networks:
  85. {{ traefik_network }}:
  86. external: true
  87. {% endif %}