compose.yaml.j2 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. services:
  2. {{ service_name | default('nextcloud-app') }}:
  3. image: docker.io/library/nextcloud:31.0.8-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={{ mysql_password | default('nextcloud') }}
  9. - MYSQL_DATABASE={{ mysql_database | default('nextcloud') }}
  10. - MYSQL_USER={{ mysql_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.http.services.{{ service_name | default('nextcloud') }}.loadbalancer.server.port=80
  32. - traefik.http.routers.{{ service_name | default('nextcloud') }}.rule=Host(`{{ traefik_host }}`)
  33. {% if traefik_tls_enabled %}
  34. - traefik.http.routers.{{ service_name | default('nextcloud') }}.entrypoints={{ traefik_tls_entrypoint | default('websecure') }}
  35. - traefik.http.routers.{{ service_name | default('nextcloud') }}.tls=true
  36. - traefik.http.routers.{{ service_name | default('nextcloud') }}.tls.certresolver={{ traefik_tls_certresolver }}
  37. {% else %}
  38. - traefik.http.routers.{{ service_name | default('nextcloud') }}.entrypoints={{ traefik_entrypoint | default('web') }}
  39. {% endif %}
  40. {% endif %}
  41. depends_on:
  42. - {{ service_name | default('nextcloud') }}-db
  43. restart: {{ restart_policy | default('unless-stopped') }}
  44. {{ service_name | default('nextcloud') }}-db:
  45. {% if database_type == 'mysql' -%}
  46. # See compatibility matrix for Nextcloud 31
  47. # https://docs.nextcloud.com/server/31/admin_manual/installation/system_requirements.html
  48. image: docker.io/library/mariadb:10.11.14
  49. container_name: {{ service_name | default('nextcloud') }}-db
  50. command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
  51. environment:
  52. - TZ={{ container_timezone | default('UTC') }}
  53. {% if mysql_root_password_random -%}
  54. - MYSQL_RANDOM_ROOT_PASSWORD=true
  55. {% endif %}
  56. - MYSQL_PASSWORD={{ mysql_password | default('nextcloud') }}
  57. - MYSQL_DATABASE={{ mysql_database | default('nextcloud') }}
  58. - MYSQL_USER={{ mysql_user | default('nextcloud') }}
  59. volumes:
  60. - nextcloud-db:/var/lib/mysql
  61. {% elif database_type == 'postgres' -%}
  62. image: docker.io/library/postgres:17.6
  63. container_name: {{ service_name | default('nextcloud') }}-db
  64. environment:
  65. - TZ={{ container_timezone | default('UTC') }}
  66. - POSTGRES_USER={{ database_user | default('nextcloud') }}
  67. - POSTGRES_PASSWORD={{ database_password | default('nextcloud') }}
  68. - POSTGRES_DB={{ database_name | default('nextcloud') }}
  69. volumes:
  70. - nextcloud-db:/var/lib/postgresql/data
  71. {% endif %}
  72. {% if network_enabled %}
  73. networks:
  74. - {{ network_name | default('bridge') }}
  75. {% endif %}
  76. restart: {{ restart_policy | default('unless-stopped') }}
  77. volumes:
  78. nextcloud-data:
  79. driver: local
  80. nextcloud-db:
  81. driver: local
  82. {% if network_enabled %}
  83. networks:
  84. {{ network_name | default('bridge') }}:
  85. {% if network_external %}
  86. external: true
  87. {% endif %}
  88. {% endif %}