services: nextcloud: image: nextcloud:33-fpm container_name: nextcloud restart: unless-stopped depends_on: postgres: condition: service_healthy redis: condition: service_started env_file: .env environment: - POSTGRES_HOST=postgres - REDIS_HOST=redis - REDIS_HOST_PASSWORD=${REDIS_PASSWORD} - TRUSTED_PROXIES=172.18.0.0/16 volumes: - ${DATA_ROOT}/nextcloud/html:/var/www/html - ${DATA_ROOT}/nextcloud/data:/var/www/html/data - ./hooks/post-installation.sh:/docker-entrypoint-hooks.d/post-installation/post-installation.sh:ro - ./hooks/post-upgrade.sh:/docker-entrypoint-hooks.d/post-upgrade/post-upgrade.sh:ro networks: - nextcloud-internal logging: driver: json-file options: max-size: "10m" max-file: "3" nginx: image: nginx:alpine container_name: nextcloud-nginx restart: unless-stopped depends_on: - nextcloud volumes: - ${DATA_ROOT}/nextcloud/html:/var/www/html:ro - ${DATA_ROOT}/nextcloud/data:/var/www/html/data:ro - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro healthcheck: test: ["CMD-SHELL", "wget -q --spider http://localhost/status.php || exit 1"] interval: 30s timeout: 10s retries: 3 networks: - proxy - nextcloud-internal logging: driver: json-file options: max-size: "10m" max-file: "3" postgres: image: postgres:17-alpine container_name: nextcloud-postgres restart: unless-stopped env_file: .env volumes: - ${DATA_ROOT}/nextcloud/db:/var/lib/postgresql/data networks: - nextcloud-internal healthcheck: test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"] interval: 10s timeout: 5s retries: 5 logging: driver: json-file options: max-size: "10m" max-file: "3" redis: image: redis:8-alpine container_name: nextcloud-redis restart: unless-stopped command: redis-server --requirepass ${REDIS_PASSWORD} env_file: .env networks: - nextcloud-internal logging: driver: json-file options: max-size: "10m" max-file: "3" cron: image: nextcloud:33-fpm container_name: nextcloud-cron restart: unless-stopped depends_on: - nextcloud entrypoint: /cron.sh volumes: - ${DATA_ROOT}/nextcloud/html:/var/www/html - ${DATA_ROOT}/nextcloud/data:/var/www/html/data networks: - nextcloud-internal logging: driver: json-file options: max-size: "10m" max-file: "3" networks: proxy: external: true nextcloud-internal: driver: bridge