compose.yaml.j2 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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={{ 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.http.services.{{ service_name | default('nextcloud') }}.loadbalancer.server.port=80
  32. - traefik.http.routers.{{ service_name | default('nextcloud') }}-http.rule=Host(`{{ traefik_host }}`)
  33. - traefik.http.routers.{{ service_name | default('nextcloud') }}-http.entrypoints={{ traefik_entrypoint | default('web') }}
  34. {% if traefik_tls_enabled %}
  35. - traefik.http.routers.{{ service_name | default('nextcloud') }}-https.rule=Host(`{{ traefik_host }}`)
  36. - traefik.http.routers.{{ service_name | default('nextcloud') }}-https.entrypoints={{ traefik_tls_entrypoint | default('websecure') }}
  37. - traefik.http.routers.{{ service_name | default('nextcloud') }}-https.tls=true
  38. - traefik.http.routers.{{ service_name | default('nextcloud') }}-https.tls.certresolver={{ traefik_tls_certresolver }}
  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. - MYSQL_RANDOM_ROOT_PASSWORD=true
  54. - MYSQL_PASSWORD={{ database_password | default('nextcloud') }}
  55. - MYSQL_DATABASE={{ database_name | default('nextcloud') }}
  56. - MYSQL_USER={{ database_user | default('nextcloud') }}
  57. volumes:
  58. - nextcloud-db:/var/lib/mysql
  59. {% elif database_type == 'postgres' -%}
  60. image: docker.io/library/postgres:17.6
  61. container_name: {{ service_name | default('nextcloud') }}-db
  62. environment:
  63. - TZ={{ container_timezone | default('UTC') }}
  64. - POSTGRES_USER={{ database_user | default('nextcloud') }}
  65. - POSTGRES_PASSWORD={{ database_password | default('nextcloud') }}
  66. - POSTGRES_DB={{ database_name | default('nextcloud') }}
  67. volumes:
  68. - nextcloud-db:/var/lib/postgresql/data
  69. {% endif %}
  70. {% if network_enabled %}
  71. networks:
  72. - {{ network_name | default('bridge') }}
  73. {% endif %}
  74. restart: {{ restart_policy | default('unless-stopped') }}
  75. volumes:
  76. nextcloud-data:
  77. driver: local
  78. nextcloud-db:
  79. driver: local
  80. {% if network_enabled %}
  81. networks:
  82. {{ network_name | default('bridge') }}:
  83. {% if network_external %}
  84. external: true
  85. {% endif %}
  86. {% endif %}