compose.yaml.j2 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. ---
  2. services:
  3. {{ service_name }}:
  4. image: docker.io/netboxcommunity/netbox:v4.5.2
  5. restart: {{ restart_policy }}
  6. environment:
  7. {% if container_timezone %}
  8. - TIME_ZONE={{ container_timezone }}
  9. {% endif %}
  10. {% if traefik_enabled %}
  11. - ALLOWED_HOSTS={{ traefik_host }}.{{ traefik_domain }}
  12. {% else %}
  13. - ALLOWED_HOSTS=*
  14. {% endif %}
  15. {% if database_external %}
  16. - DB_HOST={{ database_host }}
  17. {% else %}
  18. - DB_HOST={{ service_name }}_postgres
  19. {% endif %}
  20. - DB_NAME={{ database_name }}
  21. - DB_USER={{ database_user }}
  22. - DB_PASSWORD=${DATABASE_PASSWORD}
  23. - REDIS_HOST={{ service_name }}_redis
  24. - REDIS_PASSWORD=${REDIS_PASSWORD}
  25. - REDIS_CACHE_HOST={{ service_name }}_redis-cache
  26. - REDIS_CACHE_PASSWORD=${REDIS_PASSWORD}
  27. - SECRET_KEY=${NETBOX_SECRET_KEY}
  28. {% if netbox_metrics_enabled %}
  29. - METRICS_ENABLED=true
  30. {% endif %}
  31. {% if email_enabled %}
  32. - EMAIL_SERVER={{ email_host }}
  33. - EMAIL_PORT={{ email_port }}
  34. - EMAIL_FROM={{ email_from }}
  35. - EMAIL_USERNAME={{ email_username }}
  36. - EMAIL_PASSWORD=${EMAIL_PASSWORD}
  37. {% if email_encryption == "ssl" %}
  38. - EMAIL_USE_SSL=True
  39. {% elif email_encryption == "starttls" %}
  40. - EMAIL_USE_TLS=True
  41. {% endif %}
  42. {% endif %}
  43. networks:
  44. {% if traefik_enabled %}
  45. {{ traefik_network }}:
  46. {% endif %}
  47. {{ service_name }}_backend:
  48. {% if not traefik_enabled %}
  49. ports:
  50. - "{{ ports_http }}:8080"
  51. {% endif %}
  52. volumes:
  53. - {{ service_name }}_media:/opt/netbox/netbox/media
  54. - {{ service_name }}_reports:/opt/netbox/netbox/reports
  55. - {{ service_name }}_scripts:/opt/netbox/netbox/scripts
  56. {% if traefik_enabled %}
  57. labels:
  58. - traefik.enable=true
  59. - traefik.docker.network={{ traefik_network }}
  60. - traefik.http.services.{{ service_name }}_web.loadBalancer.server.port=8080
  61. - traefik.http.routers.{{ service_name }}_http.service={{ service_name }}_web
  62. - traefik.http.routers.{{ service_name }}_http.rule=Host(`{{ traefik_host }}.{{ traefik_domain }}`)
  63. - traefik.http.routers.{{ service_name }}_http.entrypoints=web
  64. {% if traefik_tls_enabled %}
  65. - traefik.http.routers.{{ service_name }}_https.service={{ service_name }}_web
  66. - traefik.http.routers.{{ service_name }}_https.rule=Host(`{{ traefik_host }}.{{ traefik_domain }}`)
  67. - traefik.http.routers.{{ service_name }}_https.entrypoints=websecure
  68. - traefik.http.routers.{{ service_name }}_https.tls=true
  69. - traefik.http.routers.{{ service_name }}_https.tls.certresolver={{ traefik_tls_certresolver }}
  70. {% endif %}
  71. {% endif %}
  72. depends_on:
  73. {% if not database_external %}
  74. - {{ service_name }}_postgres
  75. {% endif %}
  76. - {{ service_name }}_redis
  77. - {{ service_name }}_redis-cache
  78. {{ service_name }}_worker:
  79. image: docker.io/netboxcommunity/netbox:v4.5.2
  80. restart: {{ restart_policy }}
  81. command:
  82. - /opt/netbox/venv/bin/python
  83. - /opt/netbox/netbox/manage.py
  84. - rqworker
  85. environment:
  86. {% if container_timezone %}
  87. - TIME_ZONE={{ container_timezone }}
  88. {% endif %}
  89. {% if database_external %}
  90. - DB_HOST={{ database_host }}
  91. {% else %}
  92. - DB_HOST={{ service_name }}_postgres
  93. {% endif %}
  94. - DB_NAME={{ database_name }}
  95. - DB_USER={{ database_user }}
  96. - DB_PASSWORD=${DATABASE_PASSWORD}
  97. - REDIS_HOST={{ service_name }}_redis
  98. - REDIS_PASSWORD=${REDIS_PASSWORD}
  99. - REDIS_CACHE_HOST={{ service_name }}_redis-cache
  100. - REDIS_CACHE_PASSWORD=${REDIS_PASSWORD}
  101. - SECRET_KEY=${NETBOX_SECRET_KEY}
  102. {% if netbox_metrics_enabled %}
  103. - METRICS_ENABLED=true
  104. {% endif %}
  105. {% if email_enabled %}
  106. - EMAIL_SERVER={{ email_host }}
  107. - EMAIL_PORT={{ email_port }}
  108. - EMAIL_FROM={{ email_from }}
  109. - EMAIL_USERNAME={{ email_username }}
  110. - EMAIL_PASSWORD=${EMAIL_PASSWORD}
  111. {% if email_encryption == "ssl" %}
  112. - EMAIL_USE_SSL=True
  113. {% elif email_encryption == "starttls" %}
  114. - EMAIL_USE_TLS=True
  115. {% endif %}
  116. {% endif %}
  117. networks:
  118. {{ service_name }}_backend:
  119. volumes:
  120. - {{ service_name }}_media:/opt/netbox/netbox/media
  121. - {{ service_name }}_reports:/opt/netbox/netbox/reports
  122. - {{ service_name }}_scripts:/opt/netbox/netbox/scripts
  123. depends_on:
  124. {% if not database_external %}
  125. - {{ service_name }}_postgres
  126. {% endif %}
  127. - {{ service_name }}
  128. - {{ service_name }}_redis
  129. - {{ service_name }}_redis-cache
  130. {{ service_name }}_redis:
  131. image: docker.io/library/redis:8.4.1-alpine
  132. restart: {{ restart_policy }}
  133. command: ["redis-server", "--requirepass", "${REDIS_PASSWORD}"]
  134. environment:
  135. - REDIS_PASSWORD=${REDIS_PASSWORD}
  136. networks:
  137. {{ service_name }}_backend:
  138. volumes:
  139. - {{ service_name }}_redis:/data
  140. {{ service_name }}_redis-cache:
  141. image: docker.io/library/redis:8.4.1-alpine
  142. restart: {{ restart_policy }}
  143. command: ["redis-server", "--requirepass", "${REDIS_PASSWORD}"]
  144. environment:
  145. - REDIS_PASSWORD=${REDIS_PASSWORD}
  146. networks:
  147. {{ service_name }}_backend:
  148. volumes:
  149. - {{ service_name }}_redis-cache:/data
  150. {% if not database_external %}
  151. {{ service_name }}_postgres:
  152. image: docker.io/library/postgres:17.8
  153. restart: {{ restart_policy }}
  154. environment:
  155. {% if container_timezone %}
  156. - TZ={{ container_timezone }}
  157. {% endif %}
  158. - POSTGRES_USER={{ database_user }}
  159. - POSTGRES_PASSWORD=${DATABASE_PASSWORD}
  160. - POSTGRES_DB={{ database_name }}
  161. healthcheck:
  162. test: ["CMD-SHELL", "pg_isready -U {{ database_user }}"]
  163. start_period: 30s
  164. interval: 10s
  165. timeout: 10s
  166. retries: 5
  167. networks:
  168. - {{ service_name }}_backend
  169. volumes:
  170. - {{ service_name }}_postgres:/var/lib/postgresql/data
  171. {% endif %}
  172. networks:
  173. {{ service_name }}_backend:
  174. driver: bridge
  175. {% if traefik_enabled %}
  176. {{ traefik_network }}:
  177. external: true
  178. {% endif %}
  179. volumes:
  180. {% if not database_external %}
  181. {{ service_name }}_postgres:
  182. driver: local
  183. {% endif %}
  184. {{ service_name }}_redis:
  185. driver: local
  186. {{ service_name }}_redis-cache:
  187. driver: local
  188. {{ service_name }}_media:
  189. driver: local
  190. {{ service_name }}_reports:
  191. driver: local
  192. {{ service_name }}_scripts:
  193. driver: local