From b3ff8d2935d49b8b1be74fb3c0ad4dc95c78ea29 Mon Sep 17 00:00:00 2001 From: romleiaj Date: Tue, 29 Sep 2026 16:25:28 -0400 Subject: [PATCH] Give Traefik's request read timeout room for slow uploads Traefik v3 limits reading a whole request, body included, to 60s by default, and neither compose file changed it. The web client uploads in 64MB chunks, so any chunk a link cannot deliver within a minute was cut off mid-body and the multicam upload failed. On a ~2.75 MB/s link shared by five parallel uploads, the 26MB RGB frames of a KAMERA flight did exactly that. Set respondingTimeouts.readTimeout on the web (dev) and websecure (prod) entrypoints to TRAEFIK_READ_TIMEOUT, default 600s -- enough for a 64MB chunk at ~0.1 MB/s while still bounding a stalled client. --- .env.default | 3 +++ docker-compose.prod.yml | 1 + docker-compose.yml | 1 + 3 files changed, 5 insertions(+) diff --git a/.env.default b/.env.default index 94cbf7921..d4bc1799a 100644 --- a/.env.default +++ b/.env.default @@ -46,6 +46,9 @@ COMPOSE_PROFILES=gpu #RABBITMQ_MANAGEMENT_URL="http://rabbit:15672/" #RABBITMQ_MANAGEMENT_BROKER_URL_TEMPLATE="amqp://{}:{}@rabbit/default" +# Max time to receive a whole request; Traefik's 60s default cuts off slow upload chunks. +#TRAEFIK_READ_TIMEOUT=600s + # Production data bind paths # #DIVE_PUBLIC_DATA=/var/local/public diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 0d10034ec..9c570ffb9 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -11,6 +11,7 @@ services: --entrypoints.web.address=:80 --entrypoints.websecure.address=:443 --entrypoints.websecure.http.tls.certresolver=myresolver + --entrypoints.websecure.transport.respondingTimeouts.readTimeout=${TRAEFIK_READ_TIMEOUT:-600s} --certificatesresolvers.myresolver.acme.email=${ACME_EMAIL} --certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json --certificatesresolvers.myresolver.acme.httpchallenge=true diff --git a/docker-compose.yml b/docker-compose.yml index 293b0c5a2..5ce5a85ee 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -28,6 +28,7 @@ services: --providers.docker=true --providers.docker.exposedByDefault=false --entrypoints.web.address=:80 + --entrypoints.web.transport.respondingTimeouts.readTimeout=${TRAEFIK_READ_TIMEOUT:-600s} volumes: - "${SOCK_PATH:-/var/run/docker.sock}:/var/run/docker.sock" ports: