compose.yaml.j2 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. ---
  2. services:
  3. {{ service_name }}:
  4. image: ghcr.io/mend/renovate-ce:13.1.0-full
  5. {#
  6. If not in swarm mode, apply container name and restart policy
  7. #}
  8. {% if not swarm_enabled %}
  9. container_name: {{ container_name }}
  10. restart: {{ restart_policy }}
  11. {% endif %}
  12. {#
  13. Set container hostname for identification
  14. #}
  15. hostname: {{ container_hostname }}
  16. {#
  17. When traefik is enabled, add traefik network for reverse proxy access
  18. #}
  19. {% if traefik_enabled %}
  20. networks:
  21. {{ traefik_network }}:
  22. {% endif %}
  23. {#
  24. Port mappings for web interface (only when Traefik is disabled)
  25. #}
  26. {% if not traefik_enabled %}
  27. ports:
  28. - "{{ ports_http }}:8080"
  29. {% endif %}
  30. {#
  31. Environment file containing Renovate configuration
  32. #}
  33. env_file:
  34. - ./.env
  35. {#
  36. When swarm_enabled is set, use Docker secrets for sensitive data
  37. #}
  38. {% if swarm_enabled %}
  39. secrets:
  40. - source: {{ service_name }}_license_key
  41. target: /run/secrets/{{ service_name }}_license_key
  42. mode: 0400
  43. - source: {{ service_name }}_git_token
  44. target: /run/secrets/{{ service_name }}_git_token
  45. mode: 0400
  46. {% if webhook_secret %}
  47. - source: {{ service_name }}_webhook_secret
  48. target: /run/secrets/{{ service_name }}_webhook_secret
  49. mode: 0400
  50. {% endif %}
  51. {#
  52. Deploy configuration for Swarm mode:
  53. - Configure replicas, placement constraints
  54. - Traefik: Labels for reverse proxy integration (Swarm mode)
  55. #}
  56. deploy:
  57. mode: {{ swarm_placement_mode }}
  58. {% if swarm_placement_mode == 'replicated' %}
  59. replicas: {{ swarm_replicas }}
  60. {% endif %}
  61. {% if swarm_placement_host %}
  62. placement:
  63. constraints:
  64. - node.hostname == {{ swarm_placement_host }}
  65. {% endif %}
  66. {#
  67. When traefik_enabled is set in swarm mode, add traefik labels
  68. (optionally enable TLS if traefik_tls_enabled is set)
  69. #}
  70. {% if traefik_enabled %}
  71. labels:
  72. - traefik.enable=true
  73. - traefik.http.services.{{ service_name }}.loadbalancer.server.port=8080
  74. - traefik.http.routers.{{ service_name }}-http.rule=Host(`{{ traefik_host }}.{{ traefik_domain }}`)
  75. - traefik.http.routers.{{ service_name }}-http.entrypoints={{ traefik_entrypoint }}
  76. {% if traefik_tls_enabled %}
  77. - traefik.http.routers.{{ service_name }}-https.rule=Host(`{{ traefik_host }}.{{ traefik_domain }}`)
  78. - traefik.http.routers.{{ service_name }}-https.entrypoints={{ traefik_tls_entrypoint }}
  79. - traefik.http.routers.{{ service_name }}-https.tls=true
  80. - traefik.http.routers.{{ service_name }}-https.tls.certresolver={{ traefik_tls_certresolver }}
  81. {% endif %}
  82. {% endif %}
  83. {% else %}
  84. {#
  85. When traefik_enabled is set, and not running in swarm mode, add traefik labels
  86. (optionally enable TLS if traefik_tls_enabled is set)
  87. #}
  88. {% if traefik_enabled %}
  89. labels:
  90. - traefik.enable=true
  91. - traefik.http.services.{{ service_name }}.loadbalancer.server.port=8080
  92. - traefik.http.routers.{{ service_name }}-http.rule=Host(`{{ traefik_host }}.{{ traefik_domain }}`)
  93. - traefik.http.routers.{{ service_name }}-http.entrypoints={{ traefik_entrypoint }}
  94. {% if traefik_tls_enabled %}
  95. - traefik.http.routers.{{ service_name }}-https.rule=Host(`{{ traefik_host }}.{{ traefik_domain }}`)
  96. - traefik.http.routers.{{ service_name }}-https.entrypoints={{ traefik_tls_entrypoint }}
  97. - traefik.http.routers.{{ service_name }}-https.tls=true
  98. - traefik.http.routers.{{ service_name }}-https.tls.certresolver={{ traefik_tls_certresolver }}
  99. {% endif %}
  100. {% endif %}
  101. {% endif %}
  102. {#
  103. Health check: Verify Renovate service is responding
  104. #}
  105. healthcheck:
  106. test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
  107. interval: 30s
  108. timeout: 10s
  109. retries: 3
  110. start_period: 40s
  111. {#
  112. Docker Swarm secrets (only when swarm_enabled is set):
  113. - License key, Git token, and webhook secret
  114. #}
  115. {% if swarm_enabled %}
  116. secrets:
  117. {{ service_name }}_license_key:
  118. file: ./.env.secret.license
  119. {{ service_name }}_git_token:
  120. file: ./.env.secret.token
  121. {% if webhook_secret %}
  122. {{ service_name }}_webhook_secret:
  123. file: ./.env.secret.webhook
  124. {% endif %}
  125. {% endif %}
  126. {#
  127. Network definitions (only when Traefik is enabled):
  128. - Traefik network: always external (managed by Traefik)
  129. #}
  130. {% if traefik_enabled %}
  131. networks:
  132. {{ traefik_network }}:
  133. external: true
  134. {% endif %}