compose.yaml.j2.bak3 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. services:
  2. {{ service_name }}-app:
  3. image: docker.io/library/nextcloud:31.0.10-apache
  4. {% if not swarm_enabled %}
  5. restart: {{ restart_policy }}
  6. container_name: {{ container_name }}-app
  7. {% endif %}
  8. environment:
  9. - TZ={{ container_timezone }}
  10. {% if database_type == 'mysql' %}
  11. - MYSQL_PASSWORD=${MYSQL_PASSWORD}
  12. - MYSQL_DATABASE={{ database_name }}
  13. - MYSQL_USER={{ database_user }}
  14. - MYSQL_HOST={{ service_name }}-db
  15. {% elif database_type == 'postgres' %}
  16. - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
  17. - POSTGRES_DB={{ database_name }}
  18. - POSTGRES_USER={{ database_user }}
  19. - POSTGRES_HOST={{ service_name }}-db
  20. {% endif %}
  21. {% if network_mode == 'host' %}
  22. network_mode: host
  23. {% else %}
  24. networks:
  25. {% if traefik_enabled %}
  26. {{ traefik_network }}:
  27. {% endif %}
  28. {% if network_mode == 'macvlan' %}
  29. {{ network_name }}:
  30. ipv4_address: {{ network_macvlan_ipv4_address }}
  31. {% elif network_mode == 'bridge' %}
  32. {{ network_name }}:
  33. {% endif %}
  34. {% endif %}
  35. {% if not traefik_enabled and network_mode == 'bridge' %}
  36. ports:
  37. {% if swarm_enabled %}
  38. - target: 80
  39. published: {{ ports_http }}
  40. protocol: tcp
  41. mode: host
  42. {% else %}
  43. - "{{ ports_http }}:80"
  44. {% endif %}
  45. {% endif %}
  46. volumes:
  47. - nextcloud-data:/var/www/html
  48. {% if traefik_enabled and not swarm_enabled %}
  49. labels:
  50. - traefik.enable=true
  51. - traefik.docker.network={{ traefik_network }}
  52. - traefik.http.services.{{ service_name }}-web.loadbalancer.server.port=80
  53. - traefik.http.routers.{{ service_name }}-web-http.rule=Host(`{{ traefik_host }}.{{ traefik_domain }}`)
  54. - traefik.http.routers.{{ service_name }}-web-http.entrypoints={{ traefik_entrypoint }}
  55. - traefik.http.routers.{{ service_name }}-web-http.service={{ service_name }}-web
  56. {% if traefik_tls_enabled %}
  57. - traefik.http.routers.{{ service_name }}-web-https.rule=Host(`{{ traefik_host }}.{{ traefik_domain }}`)
  58. - traefik.http.routers.{{ service_name }}-web-https.entrypoints={{ traefik_tls_entrypoint }}
  59. - traefik.http.routers.{{ service_name }}-web-https.tls=true
  60. - traefik.http.routers.{{ service_name }}-web-https.tls.certresolver={{ traefik_tls_certresolver }}
  61. - traefik.http.routers.{{ service_name }}-web-https.service={{ service_name }}-web
  62. {% endif %}
  63. {% endif %}
  64. depends_on:
  65. - {{ service_name }}-db
  66. {% if swarm_enabled %}
  67. deploy:
  68. replicas: {{ swarm_replicas }}
  69. {% if traefik_enabled %}
  70. labels:
  71. - traefik.enable=true
  72. - traefik.docker.network={{ traefik_network }}
  73. - traefik.http.services.{{ service_name }}-web.loadbalancer.server.port=80
  74. - traefik.http.routers.{{ service_name }}-web-http.rule=Host(`{{ traefik_host }}.{{ traefik_domain }}`)
  75. - traefik.http.routers.{{ service_name }}-web-http.entrypoints={{ traefik_entrypoint }}
  76. - traefik.http.routers.{{ service_name }}-web-http.service={{ service_name }}-web
  77. {% if traefik_tls_enabled %}
  78. - traefik.http.routers.{{ service_name }}-web-https.rule=Host(`{{ traefik_host }}.{{ traefik_domain }}`)
  79. - traefik.http.routers.{{ service_name }}-web-https.entrypoints={{ traefik_tls_entrypoint }}
  80. - traefik.http.routers.{{ service_name }}-web-https.tls=true
  81. - traefik.http.routers.{{ service_name }}-web-https.tls.certresolver={{ traefik_tls_certresolver }}
  82. - traefik.http.routers.{{ service_name }}-web-https.service={{ service_name }}-web
  83. {% endif %}
  84. {% endif %}
  85. {% endif %}
  86. {{ service_name }}-db:
  87. {% if database_type == 'mysql' %}
  88. # See compatibility matrix for Nextcloud 31
  89. # https://docs.nextcloud.com/server/31/admin_manual/installation/system_requirements.html
  90. image: docker.io/library/mariadb:10.11.14
  91. {% if not swarm_enabled %}
  92. restart: {{ restart_policy }}
  93. container_name: {{ service_name }}-db
  94. {% endif %}
  95. command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
  96. environment:
  97. - TZ={{ container_timezone }}
  98. - MYSQL_RANDOM_ROOT_PASSWORD=true
  99. - MYSQL_PASSWORD=${MYSQL_PASSWORD}
  100. - MYSQL_DATABASE={{ database_name }}
  101. - MYSQL_USER={{ database_user }}
  102. {% if network_mode == 'host' %}
  103. network_mode: host
  104. {% else %}
  105. networks:
  106. {% if network_mode == 'macvlan' %}
  107. {{ network_name }}:
  108. ipv4_address: {{ network_macvlan_ipv4_address_db }}
  109. {% elif network_mode == 'bridge' %}
  110. {{ network_name }}:
  111. {% endif %}
  112. {% endif %}
  113. volumes:
  114. - nextcloud-db:/var/lib/mysql
  115. {% elif database_type == 'postgres' %}
  116. image: docker.io/library/postgres:17.6
  117. {% if not swarm_enabled %}
  118. restart: {{ restart_policy }}
  119. container_name: {{ service_name }}-db
  120. {% endif %}
  121. environment:
  122. - TZ={{ container_timezone }}
  123. - POSTGRES_USER={{ database_user }}
  124. - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
  125. - POSTGRES_DB={{ database_name }}
  126. {% if network_mode == 'host' %}
  127. network_mode: host
  128. {% else %}
  129. networks:
  130. {% if network_mode == 'macvlan' %}
  131. {{ network_name }}:
  132. ipv4_address: {{ network_macvlan_ipv4_address_db }}
  133. {% elif network_mode == 'bridge' %}
  134. {{ network_name }}:
  135. {% endif %}
  136. {% endif %}
  137. volumes:
  138. - nextcloud-db:/var/lib/postgresql/data
  139. {% endif %}
  140. {% if swarm_enabled %}
  141. deploy:
  142. replicas: 1
  143. {% endif %}
  144. volumes:
  145. nextcloud-data:
  146. driver: local
  147. nextcloud-db:
  148. driver: local
  149. networks:
  150. {% if traefik_enabled %}
  151. {{ traefik_network }}:
  152. external: true
  153. {% endif %}
  154. {% if network_mode == 'macvlan' %}
  155. {{ network_name }}:
  156. driver: macvlan
  157. driver_opts:
  158. parent: {{ network_macvlan_parent_interface }}
  159. ipam:
  160. config:
  161. - subnet: {{ network_macvlan_subnet }}
  162. gateway: {{ network_macvlan_gateway }}
  163. {% elif network_mode == 'bridge' %}
  164. {{ network_name }}:
  165. driver: {% if swarm_enabled %}overlay{% else %}bridge{% endif %}
  166. {% endif %}