2026-02-22 18:35:22 -05:00
|
|
|
version: "3.9"
|
|
|
|
|
services:
|
|
|
|
|
nextcloud:
|
|
|
|
|
image: nextcloud:latest
|
|
|
|
|
container_name: nextcloud
|
|
|
|
|
restart: always
|
|
|
|
|
networks:
|
2026-04-27 05:47:46 -04:00
|
|
|
- cloud_net
|
2026-02-22 18:35:22 -05:00
|
|
|
environment:
|
|
|
|
|
- PUID=1000
|
|
|
|
|
- PGID=1000
|
|
|
|
|
- TZ=America/Toronto
|
|
|
|
|
# Database connection
|
|
|
|
|
- MYSQL_HOST=nextcloud_mariadb
|
|
|
|
|
- MYSQL_DATABASE=nextcloud
|
|
|
|
|
- MYSQL_USER=nextcloud
|
|
|
|
|
- MYSQL_PASSWORD=${NEXTCLOUD_MYSQL_PASSWORD}
|
|
|
|
|
# Reverse Proxy Overrides (Crucial for HTTPS behind Traefik)
|
|
|
|
|
- OVERWRITEPROTOCOL=https
|
2026-05-20 14:20:44 -04:00
|
|
|
- OVERWRITECLIURL=https://cloud.${DOMAIN}
|
|
|
|
|
- NEXTCLOUD_TRUSTED_DOMAINS=cloud.${DOMAIN}
|
2026-02-22 18:35:22 -05:00
|
|
|
volumes:
|
|
|
|
|
- /mnt/HoardingCow_docker_data/NextCloud/data:/var/www/html:rw
|
|
|
|
|
depends_on:
|
|
|
|
|
- nextcloud_mariadb
|
|
|
|
|
labels:
|
|
|
|
|
- "traefik.enable=true"
|
|
|
|
|
|
|
|
|
|
# Router for HTTP -> HTTPS Redirection (Matching your Gitea style)
|
2026-05-20 14:20:44 -04:00
|
|
|
- "traefik.http.routers.nextcloud-http.rule=Host(`cloud.${DOMAIN}`)"
|
2026-02-22 18:35:22 -05:00
|
|
|
- "traefik.http.routers.nextcloud-http.entrypoints=web"
|
|
|
|
|
- "traefik.http.routers.nextcloud-http.middlewares=redirect-to-https"
|
|
|
|
|
|
|
|
|
|
# Router for HTTPS
|
2026-05-20 14:20:44 -04:00
|
|
|
- "traefik.http.routers.nextcloud-https.rule=Host(`cloud.${DOMAIN}`)"
|
2026-02-22 18:35:22 -05:00
|
|
|
- "traefik.http.routers.nextcloud-https.entrypoints=websecure"
|
|
|
|
|
- "traefik.http.routers.nextcloud-https.tls=true"
|
|
|
|
|
- "traefik.http.routers.nextcloud-https.tls.certresolver=njalla"
|
|
|
|
|
|
|
|
|
|
# Middlewares: Redirection + Nextcloud DAV fixes
|
|
|
|
|
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
|
|
|
|
|
- "traefik.http.middlewares.nextcloud-dav.redirectregex.permanent=true"
|
|
|
|
|
- "traefik.http.middlewares.nextcloud-dav.redirectregex.regex=https://(.*)/.well-known/(card|cal)dav"
|
|
|
|
|
- "traefik.http.middlewares.nextcloud-dav.redirectregex.replacement=https://$$1/remote.php/dav/"
|
|
|
|
|
|
|
|
|
|
# Apply both redirection and DAV fixes
|
|
|
|
|
- "traefik.http.routers.nextcloud-https.middlewares=nextcloud-dav"
|
|
|
|
|
|
|
|
|
|
nextcloud_cron:
|
|
|
|
|
image: nextcloud:latest
|
|
|
|
|
container_name: nextcloud_cron
|
2026-04-27 05:47:46 -04:00
|
|
|
restart: always
|
2026-02-22 18:35:22 -05:00
|
|
|
networks:
|
2026-04-27 05:47:46 -04:00
|
|
|
- cloud_net
|
2026-02-22 18:35:22 -05:00
|
|
|
entrypoint: /cron.sh
|
|
|
|
|
volumes:
|
|
|
|
|
- /mnt/HoardingCow_docker_data/NextCloud/data:/var/www/html:rw
|
|
|
|
|
depends_on:
|
|
|
|
|
- nextcloud
|
|
|
|
|
|
|
|
|
|
nextcloud_mariadb:
|
|
|
|
|
image: mariadb:latest
|
|
|
|
|
container_name: nextcloud_mariadb
|
2026-04-27 05:47:46 -04:00
|
|
|
restart: unless-stopped
|
2026-02-22 18:35:22 -05:00
|
|
|
networks:
|
2026-04-27 05:47:46 -04:00
|
|
|
- cloud_internal
|
2026-02-22 18:35:22 -05:00
|
|
|
environment:
|
|
|
|
|
- MYSQL_RANDOM_ROOT_PASSWORD=yes
|
|
|
|
|
- MYSQL_USER=nextcloud
|
|
|
|
|
- MYSQL_PASSWORD=${NEXTCLOUD_MYSQL_PASSWORD}
|
|
|
|
|
- MYSQL_DATABASE=nextcloud
|
|
|
|
|
volumes:
|
|
|
|
|
- /mnt/HoardingCow_docker_data/NextCloud/database:/var/lib/mysql:rw
|
|
|
|
|
# command: ["--innodb-force-recovery=6"]
|
|
|
|
|
|
|
|
|
|
networks:
|
2026-04-27 05:47:46 -04:00
|
|
|
cloud_net:
|
2026-02-22 18:35:22 -05:00
|
|
|
external: true
|
2026-04-27 05:47:46 -04:00
|
|
|
name: cloud_net
|
|
|
|
|
cloud_internal:
|
|
|
|
|
driver: bridge
|
|
|
|
|
name: cloud_internal
|