compose.yaml.j2 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. services:
  2. {{ service_name }}:
  3. image: docker.io/semaphoreui/semaphore:v2.16.45
  4. container_name: {{ container_name }}
  5. user: "{{ user_uid }}:{{ user_gid }}"
  6. env_file:
  7. - .env.semaphore
  8. {% if ports_enabled %}
  9. ports:
  10. - "{{ ports_http }}:3000"
  11. {% endif %}
  12. {% if network_enabled or traefik_enabled %}
  13. networks:
  14. {% if network_enabled %}
  15. - {{ network_name }}
  16. {% endif %}
  17. {% if traefik_enabled %}
  18. - {{ traefik_network }}
  19. {% endif %}
  20. {% endif %}
  21. {% if traefik_enabled %}
  22. labels:
  23. - traefik.enable=true
  24. - traefik.docker.network={{ traefik_network }}
  25. - traefik.http.services.{{ service_name }}.loadbalancer.server.port=3000
  26. - traefik.http.routers.{{ service_name }}-http.rule=Host(`{{ traefik_host }}`)
  27. - traefik.http.routers.{{ service_name }}-http.entrypoints={{ traefik_entrypoint }}
  28. {% if traefik_tls_enabled %}
  29. - traefik.http.routers.{{ service_name }}-https.rule=Host(`{{ traefik_host }}`)
  30. - traefik.http.routers.{{ service_name }}-https.entrypoints={{ traefik_tls_entrypoint }}
  31. - traefik.http.routers.{{ service_name }}-https.tls=true
  32. - traefik.http.routers.{{ service_name }}-https.tls.certresolver={{ traefik_tls_certresolver }}
  33. {% endif %}
  34. {% endif %}
  35. volumes:
  36. - ./inventory:/inventory:ro
  37. - ./authorized-keys:/authorized-keys:ro
  38. - ./config:/etc/semaphore:rw
  39. depends_on:
  40. {% if database_type == 'mysql' %}
  41. - {{ service_name }}-mysql
  42. {% elif database_type == 'postgres' %}
  43. - {{ service_name }}-postgres
  44. {% endif %}
  45. restart: {{ restart_policy }}
  46. {% if not database_external %}
  47. {% if database_type == 'mysql' %}
  48. {{ service_name }}-mysql:
  49. image: docker.io/library/mysql:8.4
  50. container_name: {{ service_name }}-mysql
  51. env_file:
  52. - .env.database
  53. healthcheck:
  54. test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "{{ database_user }}", "-p{{ database_password }}"]
  55. start_period: 30s
  56. interval: 10s
  57. timeout: 10s
  58. retries: 5
  59. volumes:
  60. - database_data:/var/lib/mysql
  61. {% if network_enabled or traefik_enabled %}
  62. networks:
  63. {% if network_enabled %}
  64. - {{ network_name }}
  65. {% endif %}
  66. {% if traefik_enabled %}
  67. - {{ traefik_network }}
  68. {% endif %}
  69. {% endif %}
  70. restart: {{ restart_policy }}
  71. {% elif database_type == 'postgres' %}
  72. {{ service_name }}-postgres:
  73. image: docker.io/library/postgres:17.7
  74. container_name: {{ service_name }}-postgres
  75. env_file:
  76. - .env.database
  77. healthcheck:
  78. test: ["CMD-SHELL", "pg_isready -U {{ database_user }}"]
  79. start_period: 30s
  80. interval: 10s
  81. timeout: 10s
  82. retries: 5
  83. volumes:
  84. - database_data:/var/lib/postgresql/data
  85. {% if network_enabled or traefik_enabled %}
  86. networks:
  87. {% if network_enabled %}
  88. - {{ network_name }}
  89. {% endif %}
  90. {% if traefik_enabled %}
  91. - {{ traefik_network }}
  92. {% endif %}
  93. {% endif %}
  94. restart: {{ restart_policy }}
  95. {% endif %}
  96. {% endif %}
  97. {% if network_enabled or traefik_enabled %}
  98. networks:
  99. {% if network_enabled %}
  100. {{ network_name }}:
  101. {% if network_external %}
  102. external: true
  103. {% else %}
  104. driver: bridge
  105. {% endif %}
  106. {% endif %}
  107. {% if traefik_enabled %}
  108. {{ traefik_network }}:
  109. external: true
  110. {% endif %}
  111. {% endif %}
  112. volumes:
  113. {% if not database_external %}
  114. database_data:
  115. driver: local
  116. {% endif %}