compose.yaml.j2 3.4 KB

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