services: nextcloud-webapp: # image: nextcloud:production profiles: ["apps","all","nextcloud"] build: context: ${PROJECT_ROOT}/apps/nextcloud container_name: nextcloud-webapp restart: always hostname: nextcloud.lan.ddnsgeek.com volumes: - ${PROJECT_ROOT}/apps/nextcloud/data:/var/www/html/data:rw - ${PROJECT_ROOT}/apps/nextcloud/config:/var/www/html/config:rw - type: tmpfs target: /tmp:exec depends_on: - nextcloud-db - nextcloud-redis environment: - MYSQL_PASSWORD=${NEXTCLOUD_MYSQL_PASSWORD} - MYSQL_DATABASE=${NEXTCLOUD_MYSQL_DATABASE} - MYSQL_USER=${NEXTCLOUD_MYSQL_USER} - MYSQL_HOST=${NEXTCLOUD_MYSQL_HOST} - NEXTCLOUD_TRUSTED_DOMAINS=${NEXTCLOUD_TRUSTED_DOMAINS} - OVERWRITEPROTOCOL=${NEXTCLOUD_OVERWRITEPROTOCOL} - OVERWRITECLIURL=${NEXTCLOUD_OVERWRITECLIURL} - SMTP_HOST=${NEXTCLOUD_SMTP_HOST} - SMTP_SECURE=${NEXTCLOUD_SMTP_SECURE} - SMTP_PORT=${NEXTCLOUD_SMTP_PORT} - SMTP_AUTHTYPE=${NEXTCLOUD_SMTP_AUTHTYPE} - MAIL_FROM_ADDRESS=${NEXTCLOUD_MAIL_FROM_ADDRESS} - MAIL_DOMAIN=${NEXTCLOUD_MAIL_DOMAIN} - SMTP_NAME=${NEXTCLOUD_SMTP_NAME} - SMTP_PASSWORD=${NEXTCLOUD_SMTP_PASSWORD} - REDIS_HOST=${NEXTCLOUD_REDIS_HOST} - REDIS_HOST_PORT=${NEXTCLOUD_REDIS_HOST_PORT} - REDIS_HOST_PASSWORD=${NEXTCLOUD_REDIS_HOST_PASSWORD} networks: - traefik - nextcloud labels: - "traefik.http.routers.nextcloud.rule=Host(`nextcloud.lan.ddnsgeek.com`)" - "traefik.enable=true" - "traefik.http.routers.nextcloud.entrypoints=websecure" - "traefik.http.routers.nextcloud.tls.certresolver=myresolver" - "io.portainer.accesscontrol.public" - "traefik.http.routers.nextcloud.middlewares=nextcloud-dav, nextcloud-webfinger" - "traefik.http.middlewares.nextcloud-dav.replacepathregex.regex=^/.well-known/ca(l|rd)dav" - "traefik.http.middlewares.nextcloud-dav.replacepathregex.replacement=/remote.php/dav/" - "traefik.http.middlewares.nextcloud-nodeinfo.replacepathregex.regex=^/.well-known/nodeinfo" - "traefik.http.middlewares.nextcloud-nodeinfo.replacepathregex.replacement=/nextcloud/index.php/.well-known/nodeinfo/" - "traefik.http.middlewares.nextcloud-webfinger.redirectregex.permanent=true" - "traefik.http.middlewares.nextcloud-webfinger.redirectregex.regex=https://(.*)/.well-known/webfinger" - "traefik.http.middlewares.nextcloud-webfinger.redirectregex.replacement=https://$${1}/nextcloud/index.php/.well-known/webfinger" - "traefik.docker.network=core_traefik" healthcheck: test: - CMD-SHELL - >- php -r '$$f=@fsockopen("127.0.0.1",80,$$e,$$s,2); if(!$$f) exit(1); fwrite($$f,"GET /status.php HTTP/1.0\r\nHost: localhost\r\nConnection: close\r\n\r\n"); $$o=""; while(!feof($$f)){$$o.=fgets($$f,1024);} fclose($$f); if(strpos($$o,"\"installed\":true")===false) exit(1);' interval: 30s timeout: 5s retries: 6 start_period: 180s nextcloud-db: image: mariadb:11.4 restart: always profiles: ["apps","all","nextcloud"] container_name: nextcloud-db hostname: nextcloud_db command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW volumes: - ${PROJECT_ROOT}/apps/nextcloud/database:/var/lib/mysql:rw environment: - MYSQL_ROOT_PASSWORD=${NEXTCLOUD_MYSQL_ROOT_PASSWORD} - MYSQL_PASSWORD=${NEXTCLOUD_MYSQL_PASSWORD} - MYSQL_DATABASE=${NEXTCLOUD_MYSQL_DATABASE} - MYSQL_USER=${NEXTCLOUD_MYSQL_USER} - MARIADB_AUTO_UPGRADE=${NEXTCLOUD_MARIADB_AUTO_UPGRADE} - NEXTCLOUD_ADMIN_USER=${NEXTCLOUD_ADMIN_USER} - NEXTCLOUD_ADMIN_PASSWORD=${NEXTCLOUD_ADMIN_PASSWORD} networks: - nextcloud labels: - "io.portainer.accesscontrol.public" healthcheck: test: ["CMD-SHELL", "mariadb-admin ping -u ${NEXTCLOUD_MYSQL_USER} --password=${NEXTCLOUD_MYSQL_PASSWORD} --silent"] interval: 10s timeout: 5s retries: 12 start_period: 60s nextcloud-redis: image: "redis" profiles: ["apps","all","nextcloud"] command: ["redis-server", "--requirepass", "${NEXTCLOUD_REDIS_HOST_PASSWORD}", "--appendonly", "yes", "--save", "60", "1000"] hostname: redis container_name: nextcloud-redis environment: - REDIS_HOST_PASSWORD=${NEXTCLOUD_REDIS_HOST_PASSWORD} volumes: - ${PROJECT_ROOT}/apps/nextcloud/data/redis:/data:rw restart: always networks: - nextcloud labels: - "io.portainer.accesscontrol.public" healthcheck: test: ["CMD-SHELL", "redis-cli -a ${NEXTCLOUD_REDIS_HOST_PASSWORD} PING | grep -q PONG"] interval: 10s timeout: 5s retries: 6 start_period: 10s networks: # traefik_reverse_proxy: # external: true nextcloud: # driver: bridge