compose.yaml.j2 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. services:
  2. {{ service_name }}:
  3. image: docker.io/semaphoreui/semaphore:v2.16.51
  4. restart: {{ restart_policy }}
  5. environment:
  6. - SEMAPHORE_DB_DIALECT={{ database_type }}
  7. {% if database_external %}
  8. - SEMAPHORE_DB_HOST={{ database_host }}
  9. {% else %}
  10. - SEMAPHORE_DB_HOST={{ service_name }}_db
  11. {% endif %}
  12. - SEMAPHORE_DB={{ database_name }}
  13. - SEMAPHORE_DB_USER={{ database_user }}
  14. - SEMAPHORE_DB_PASS=${DATABASE_PASSWORD}
  15. - SEMAPHORE_ADMIN={{ admin_user }}
  16. - SEMAPHORE_ADMIN_NAME={{ admin_name }}
  17. - SEMAPHORE_ADMIN_EMAIL={{ admin_email }}
  18. - SEMAPHORE_ADMIN_PASSWORD=${SEMAPHORE_ADMIN_PASSWORD}
  19. - SEMAPHORE_PLAYBOOK_PATH=/tmp/semaphore/
  20. - SEMAPHORE_ACCESS_KEY_ENCRYPTION=${SEMAPHORE_ACCESS_KEY_ENCRYPTION}
  21. - ANSIBLE_HOST_KEY_CHECKING={{ ansible_host_key_checking }}
  22. {% if not database_external or traefik_enabled %}
  23. networks:
  24. {% if not database_external %}
  25. - {{ service_name }}_backend
  26. {% endif %}
  27. {% if traefik_enabled %}
  28. - {{ traefik_network }}
  29. {% endif %}
  30. {% endif %}
  31. {% if not traefik_enabled %}
  32. ports:
  33. - "{{ ports_http }}:3000"
  34. {% endif %}
  35. {% if traefik_enabled %}
  36. labels:
  37. - traefik.enable=true
  38. - traefik.docker.network={{ traefik_network }}
  39. - traefik.http.services.{{ service_name }}-web.loadBalancer.server.port=3000
  40. - traefik.http.routers.{{ service_name }}-http.service={{ service_name }}-web
  41. - traefik.http.routers.{{ service_name }}-http.rule=Host(`{{ traefik_host }}.{{ traefik_domain }}`)
  42. - traefik.http.routers.{{ service_name }}-http.entrypoints=web
  43. {% if traefik_tls_enabled %}
  44. - traefik.http.routers.{{ service_name }}-https.service={{ service_name }}-web
  45. - traefik.http.routers.{{ service_name }}-https.rule=Host(`{{ traefik_host }}.{{ traefik_domain }}`)
  46. - traefik.http.routers.{{ service_name }}-https.entrypoints=websecure
  47. - traefik.http.routers.{{ service_name }}-https.tls=true
  48. - traefik.http.routers.{{ service_name }}-https.tls.certresolver={{ traefik_tls_certresolver }}
  49. {% endif %}
  50. {% endif %}
  51. {% if not database_external %}
  52. depends_on:
  53. - {{ service_name }}_db
  54. {% endif %}
  55. {% if not database_external and database_type == "postgres" %}
  56. {{ service_name }}_db:
  57. image: docker.io/library/postgres:17.8
  58. restart: {{ restart_policy }}
  59. environment:
  60. - POSTGRES_USER={{ database_user }}
  61. - POSTGRES_PASSWORD=${DATABASE_PASSWORD}
  62. - POSTGRES_DB={{ database_name }}
  63. networks:
  64. - {{ service_name }}_backend
  65. healthcheck:
  66. test: ["CMD-SHELL", "pg_isready -U {{ database_user }}"]
  67. start_period: 30s
  68. interval: 10s
  69. timeout: 10s
  70. retries: 5
  71. volumes:
  72. - {{ service_name }}_db:/var/lib/postgresql/data
  73. {% elif not database_external and database_type == "mysql" %}
  74. {{ service_name }}_db:
  75. image: docker.io/library/mysql:8.1
  76. restart: {{ restart_policy }}
  77. environment:
  78. - MYSQL_USER={{ database_user }}
  79. - MYSQL_PASSWORD=${DATABASE_PASSWORD}
  80. - MYSQL_DATABASE={{ database_name }}
  81. - MYSQL_ROOT_PASSWORD=${DATABASE_PASSWORD}
  82. networks:
  83. - {{ service_name }}_backend
  84. volumes:
  85. - {{ service_name }}_db:/var/lib/mysql
  86. {% endif %}
  87. {% if not database_external %}
  88. volumes:
  89. {{ service_name }}_db:
  90. driver: local
  91. {% endif %}
  92. {% if not database_external or traefik_enabled %}
  93. networks:
  94. {% if not database_external %}
  95. {{ service_name }}_backend:
  96. driver: bridge
  97. {% endif %}
  98. {% if traefik_enabled %}
  99. {{ traefik_network }}:
  100. external: true
  101. {% endif %}
  102. {% endif %}