compose.yaml.j2 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. services:
  2. {{ service_name }}-app:
  3. image: docker.io/library/nextcloud:32.0.5-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. {% endif %}
  22. {% if not traefik_enabled %}
  23. ports:
  24. {% if swarm_enabled %}
  25. - target: 80
  26. published: {{ ports_http }}
  27. protocol: tcp
  28. mode: host
  29. {% else %}
  30. - "{{ ports_http }}:80"
  31. {% endif %}
  32. {% endif %}
  33. volumes:
  34. - nextcloud-data:/var/www/html
  35. {% if traefik_enabled and not swarm_enabled %}
  36. labels:
  37. - traefik.enable=true
  38. - traefik.docker.network={{ traefik_network }}
  39. - traefik.http.services.{{ service_name }}-web.loadbalancer.server.port=80
  40. - traefik.http.routers.{{ service_name }}-web-http.rule=Host(`{{ traefik_host }}.{{ traefik_domain }}`)
  41. - traefik.http.routers.{{ service_name }}-web-http.entrypoints={{ traefik_entrypoint }}
  42. - traefik.http.routers.{{ service_name }}-web-http.service={{ service_name }}-web
  43. {% if traefik_tls_enabled %}
  44. - traefik.http.routers.{{ service_name }}-web-https.rule=Host(`{{ traefik_host }}.{{ traefik_domain }}`)
  45. - traefik.http.routers.{{ service_name }}-web-https.entrypoints={{ traefik_tls_entrypoint }}
  46. - traefik.http.routers.{{ service_name }}-web-https.tls=true
  47. - traefik.http.routers.{{ service_name }}-web-https.tls.certresolver={{ traefik_tls_certresolver }}
  48. - traefik.http.routers.{{ service_name }}-web-https.service={{ service_name }}-web
  49. {% endif %}
  50. {% endif %}
  51. depends_on:
  52. - {{ service_name }}-db
  53. {% if swarm_enabled %}
  54. deploy:
  55. replicas: {{ swarm_replicas }}
  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=80
  61. - traefik.http.routers.{{ service_name }}-web-http.rule=Host(`{{ traefik_host }}.{{ traefik_domain }}`)
  62. - traefik.http.routers.{{ service_name }}-web-http.entrypoints={{ traefik_entrypoint }}
  63. - traefik.http.routers.{{ service_name }}-web-http.service={{ service_name }}-web
  64. {% if traefik_tls_enabled %}
  65. - traefik.http.routers.{{ service_name }}-web-https.rule=Host(`{{ traefik_host }}.{{ traefik_domain }}`)
  66. - traefik.http.routers.{{ service_name }}-web-https.entrypoints={{ traefik_tls_entrypoint }}
  67. - traefik.http.routers.{{ service_name }}-web-https.tls=true
  68. - traefik.http.routers.{{ service_name }}-web-https.tls.certresolver={{ traefik_tls_certresolver }}
  69. - traefik.http.routers.{{ service_name }}-web-https.service={{ service_name }}-web
  70. {% endif %}
  71. {% endif %}
  72. {% endif %}
  73. {{ service_name }}-db:
  74. {% if database_type == 'mysql' %}
  75. # See compatibility matrix for Nextcloud 31
  76. # https://docs.nextcloud.com/server/31/admin_manual/installation/system_requirements.html
  77. image: docker.io/library/mariadb:10.11.16
  78. {% if not swarm_enabled %}
  79. restart: {{ restart_policy }}
  80. container_name: {{ service_name }}-db
  81. {% endif %}
  82. command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
  83. environment:
  84. - TZ={{ container_timezone }}
  85. - MYSQL_RANDOM_ROOT_PASSWORD=true
  86. - MYSQL_PASSWORD=${MYSQL_PASSWORD}
  87. - MYSQL_DATABASE={{ database_name }}
  88. - MYSQL_USER={{ database_user }}
  89. {% endif %}
  90. volumes:
  91. - nextcloud-db:/var/lib/mysql
  92. {% elif database_type == 'postgres' %}
  93. image: docker.io/library/postgres:17.8
  94. {% if not swarm_enabled %}
  95. restart: {{ restart_policy }}
  96. container_name: {{ service_name }}-db
  97. {% endif %}
  98. environment:
  99. - TZ={{ container_timezone }}
  100. - POSTGRES_USER={{ database_user }}
  101. - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
  102. - POSTGRES_DB={{ database_name }}
  103. {% endif %}
  104. volumes:
  105. - nextcloud-db:/var/lib/postgresql/data
  106. {% endif %}
  107. {% if swarm_enabled %}
  108. deploy:
  109. replicas: 1
  110. {% endif %}
  111. volumes:
  112. nextcloud-data:
  113. driver: local
  114. nextcloud-db:
  115. driver: local
  116. networks:
  117. {% if traefik_enabled %}
  118. {{ traefik_network }}:
  119. external: true
  120. {% endif %}
  121. {% endif %}