Re-enable Caddy HTTP/3 and Document ISSUE-29 Rationale
Related:
#29,
#30,
ISSUE-29-research-high-cpu-load-after-udp-fix.md
Overview
ISSUE-29 removed Caddy UDP port mapping 443:443/udp (HTTP/3 over QUIC) during a controlled
production experiment. The observations showed no measurable CPU improvement after disabling
HTTP/3, while service availability remained stable.
This follow-up issue proposes re-enabling HTTP/3 at the Caddy edge and documenting why this
reversal is intentional. The goal is to restore HTTP/3 capability for present and future clients,
while keeping a controlled rollback path if resource cost or reliability regresses.
This issue also clarifies the protocol boundary in the current architecture:
- Edge protocol (client -> Caddy) can include HTTP/3.
- Backend protocol (Caddy -> tracker/grafana) remains reverse-proxy HTTP and does not require
tracker native HTTP/3 support.
Problem Statement
The current ISSUE-29 wording can be read as "HTTP/3 disabled for hygiene" even though the
experiment outcome was only that disabling HTTP/3 did not fix CPU pressure.
Keeping HTTP/3 disabled by default may also block automatic support for clients that prefer
or require HTTP/3 in the future. Since this demo already runs a Caddy edge proxy, re-enabling
UDP 443 is a low-complexity way to restore HTTP/3 capability without changing backend services.
The change should therefore be treated as a product-capability decision with operational
guardrails, not as a CPU-remediation tactic.
Goals
- Re-enable Caddy UDP 443 publish mapping for HTTP/3 at the edge.
- Keep backend application topology unchanged.
- Record explicitly that ISSUE-29 did not show CPU benefit from disabling HTTP/3.
- Document why re-enable is being done now (future compatibility/capability) and how rollback
will be handled if needed.
Proposed Change
- Re-add
"443:443/udp" in Caddy service ports in
server/opt/torrust/docker-compose.yml.
- Apply the same change on live
/opt/torrust/docker-compose.yml and recreate only Caddy.
- Observe immediate, T+1h, and T+next-day checkpoints with the same metrics used in ISSUE-29.
Rollback Triggers
If any trigger is met after re-enable, revert by removing "443:443/udp" again and record
the rollback in evidence:
- Caddy CPU increases by more than 20% sustained for 24h vs pre-change baseline.
- Host load average increases by more than 15% sustained for 24h vs pre-change baseline.
- New external availability regression appears on tracked HTTP1 or UDP1 endpoints.
Deliverables
- Compose change that re-enables Caddy UDP 443 publish mapping.
- Evidence notes for post-change observations (immediate, T+1h, T+next-day).
- Updated ISSUE-29 wording that clearly separates:
- measured performance result,
- capability/product decision,
- rollback criteria and operational safeguards.
Implementation Plan
Acceptance Criteria
Re-enable Caddy HTTP/3 and Document ISSUE-29 Rationale
Related:
#29,
#30,
ISSUE-29-research-high-cpu-load-after-udp-fix.md
Overview
ISSUE-29 removed Caddy UDP port mapping
443:443/udp(HTTP/3 over QUIC) during a controlledproduction experiment. The observations showed no measurable CPU improvement after disabling
HTTP/3, while service availability remained stable.
This follow-up issue proposes re-enabling HTTP/3 at the Caddy edge and documenting why this
reversal is intentional. The goal is to restore HTTP/3 capability for present and future clients,
while keeping a controlled rollback path if resource cost or reliability regresses.
This issue also clarifies the protocol boundary in the current architecture:
tracker native HTTP/3 support.
Problem Statement
The current ISSUE-29 wording can be read as "HTTP/3 disabled for hygiene" even though the
experiment outcome was only that disabling HTTP/3 did not fix CPU pressure.
Keeping HTTP/3 disabled by default may also block automatic support for clients that prefer
or require HTTP/3 in the future. Since this demo already runs a Caddy edge proxy, re-enabling
UDP 443 is a low-complexity way to restore HTTP/3 capability without changing backend services.
The change should therefore be treated as a product-capability decision with operational
guardrails, not as a CPU-remediation tactic.
Goals
will be handled if needed.
Proposed Change
"443:443/udp"in Caddy service ports inserver/opt/torrust/docker-compose.yml./opt/torrust/docker-compose.ymland recreate only Caddy.Rollback Triggers
If any trigger is met after re-enable, revert by removing
"443:443/udp"again and recordthe rollback in evidence:
Deliverables
Implementation Plan
"443:443/udp"for Caddy inserver/opt/torrust/docker-compose.yml.mpstat,docker stats, Prometheus HTTP1/UDP1rates, and
newtrackon.com/rawsample../scripts/lint.shand fix any markdown/cspell issues.Acceptance Criteria
443:443/udpmapping.documented if a trigger is met.
disabled again.
./scripts/lint.sh.