services: nextcloud: image: nextcloud:28-apache container_name: ${INFRASTRUCTURE_LABEL:-stack}-nextcloud restart: unless-stopped depends_on: - db - redis environment: - NEXTCLOUD_TRUSTED_DOMAINS=${NEXTCLOUD_DOMAIN} - OVERWRITEHOST=${NEXTCLOUD_DOMAIN} - OVERWRITEPROTOCOL=https - OVERWRITECLIURL=https://${NEXTCLOUD_DOMAIN} - REDIS_HOST=redis - MYSQL_HOST=db - MYSQL_DATABASE=${NEXTCLOUD_DB_NAME:-nextcloud} - MYSQL_USER=${NEXTCLOUD_DB_USER:-nextcloud} - MYSQL_PASSWORD=${NEXTCLOUD_DB_PASSWORD} - PHP_MEMORY_LIMIT=${NEXTCLOUD_PHP_MEMORY_LIMIT:-512M} - PHP_UPLOAD_LIMIT=${NEXTCLOUD_PHP_UPLOAD_LIMIT:-1024M} volumes: - nextcloud_data:/var/www/html networks: - nextcloud - proxy labels: - traefik.enable=true - traefik.http.routers.nextcloud.rule=Host(`${NEXTCLOUD_DOMAIN}`) - traefik.http.routers.nextcloud.entrypoints=websecure - traefik.http.routers.nextcloud.tls=true - traefik.http.routers.nextcloud.tls.certresolver=letsencrypt - traefik.http.services.nextcloud.loadbalancer.server.port=80 - traefik.http.routers.nextcloud.middlewares=security-headers@file - traefik.docker.network=${TRAEFIK_NETWORK:-proxy} db: image: mariadb:11 container_name: ${INFRASTRUCTURE_LABEL:-stack}-nextcloud-db restart: unless-stopped environment: - MYSQL_ROOT_PASSWORD=${NEXTCLOUD_DB_ROOT_PASSWORD} - MYSQL_DATABASE=${NEXTCLOUD_DB_NAME:-nextcloud} - MYSQL_USER=${NEXTCLOUD_DB_USER:-nextcloud} - MYSQL_PASSWORD=${NEXTCLOUD_DB_PASSWORD} volumes: - db_data:/var/lib/mysql networks: - nextcloud redis: image: redis:7-alpine container_name: ${INFRASTRUCTURE_LABEL:-stack}-nextcloud-redis restart: unless-stopped command: redis-server --appendonly yes volumes: - redis_data:/data networks: - nextcloud volumes: nextcloud_data: db_data: redis_data: networks: proxy: external: true nextcloud: name: ${INFRASTRUCTURE_LABEL:-stack}-nextcloud