compose.yaml.j2 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. services:
  2. {{ service_name | default('nextcloud-app') }}:
  3. image: docker.io/library/nextcloud:31.0.10-apache
  4. container_name: {{ container_name | default('nextcloud-app') }}
  5. environment:
  6. - TZ={{ container_timezone | default('UTC') }}
  7. {% if database_type == 'mysql' %}
  8. - MYSQL_PASSWORD={{ database_password | default('nextcloud') }}
  9. - MYSQL_DATABASE={{ database_name | default('nextcloud') }}
  10. - MYSQL_USER={{ database_user | default('nextcloud') }}
  11. - MYSQL_HOST={{ service_name | default('nextcloud') }}-db
  12. {% elif database_type == 'postgres' %}
  13. - POSTGRES_PASSWORD={{ database_password | default('nextcloud') }}
  14. - POSTGRES_DB={{ database_name | default('nextcloud') }}
  15. - POSTGRES_USER={{ database_user | default('nextcloud') }}
  16. - POSTGRES_HOST={{ service_name | default('nextcloud') }}-db
  17. {% endif %}
  18. {% if ports_enabled %}
  19. ports:
  20. - "{{ ports_http | default(80) }}:80"
  21. {% endif %}
  22. volumes:
  23. - nextcloud-data:/var/www/html
  24. {% if network_enabled %}
  25. networks:
  26. - {{ network_name | default('bridge') }}
  27. {% endif %}
  28. {% if traefik_enabled %}
  29. labels:
  30. - traefik.enable=true
  31. - traefik.docker.network={{ traefik_network | default('traefik') }}
  32. - traefik.http.services.{{ service_name | default('nextcloud') }}.loadbalancer.server.port=80
  33. - traefik.http.routers.{{ service_name | default('nextcloud') }}-http.rule=Host(`{{ traefik_host }}`)
  34. - traefik.http.routers.{{ service_name | default('nextcloud') }}-http.entrypoints={{ traefik_entrypoint | default('web') }}
  35. {% if traefik_tls_enabled %}
  36. - traefik.http.routers.{{ service_name | default('nextcloud') }}-https.rule=Host(`{{ traefik_host }}`)
  37. - traefik.http.routers.{{ service_name | default('nextcloud') }}-https.entrypoints={{ traefik_tls_entrypoint | default('websecure') }}
  38. - traefik.http.routers.{{ service_name | default('nextcloud') }}-https.tls=true
  39. - traefik.http.routers.{{ service_name | default('nextcloud') }}-https.tls.certresolver={{ traefik_tls_certresolver }}
  40. {% endif %}
  41. {% endif %}
  42. depends_on:
  43. - {{ service_name | default('nextcloud') }}-db
  44. restart: {{ restart_policy | default('unless-stopped') }}
  45. {{ service_name | default('nextcloud') }}-db:
  46. {% if database_type == 'mysql' %}
  47. # See compatibility matrix for Nextcloud 31
  48. # https://docs.nextcloud.com/server/31/admin_manual/installation/system_requirements.html
  49. image: docker.io/library/mariadb:10.11.15
  50. container_name: {{ service_name | default('nextcloud') }}-db
  51. command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
  52. environment:
  53. - TZ={{ container_timezone | default('UTC') }}
  54. - MYSQL_RANDOM_ROOT_PASSWORD=true
  55. - MYSQL_PASSWORD={{ database_password | default('nextcloud') }}
  56. - MYSQL_DATABASE={{ database_name | default('nextcloud') }}
  57. - MYSQL_USER={{ database_user | default('nextcloud') }}
  58. volumes:
  59. - nextcloud-db:/var/lib/mysql
  60. {% elif database_type == 'postgres' %}
  61. image: docker.io/library/postgres:17.7
  62. container_name: {{ service_name | default('nextcloud') }}-db
  63. environment:
  64. - TZ={{ container_timezone | default('UTC') }}
  65. - POSTGRES_USER={{ database_user | default('nextcloud') }}
  66. - POSTGRES_PASSWORD={{ database_password | default('nextcloud') }}
  67. - POSTGRES_DB={{ database_name | default('nextcloud') }}
  68. volumes:
  69. - nextcloud-db:/var/lib/postgresql/data
  70. {% endif %}
  71. {% if network_enabled %}
  72. networks:
  73. - {{ network_name | default('bridge') }}
  74. {% endif %}
  75. restart: {{ restart_policy | default('unless-stopped') }}
  76. volumes:
  77. nextcloud-data:
  78. driver: local
  79. nextcloud-db:
  80. driver: local
  81. {% if network_enabled %}
  82. networks:
  83. {{ network_name | default('bridge') }}:
  84. {% if network_external %}
  85. external: true
  86. {% endif %}
  87. {% endif %}