DocktorNet v1.1.0 adds multi-domain Nginx Proxy Manager support and substantially strengthens reconciliation safety across Docker/Podman agents, NPM, Cloudflare DNS, and Gatus.
Highlights
- Route several comma-separated public domains through one NPM proxy host.
- Remove NPM proxy hosts and Cloudflare DNS records safely after a service disappears, while preserving them through the restart grace period.
- Persist pending external-resource removals so cleanup survives restarts and temporary API failures.
- Sequence reconciliation per machine so stale background work cannot resurrect removed resources.
Reliability and recovery
- Skip authoritative snapshot pushes when any configured container source fails or times out.
- Enumerate Docker/Podman sources concurrently and reject duplicate container names rather than silently merging them.
- Restore external-resource mappings when services return during the grace period.
- Recreate NPM and Cloudflare resources deleted out of band.
- Add Cloudflare request timeouts and shared
Retry-Afterbackoff. - Treat already-deleted NPM and Cloudflare resources as successful cleanup.
- Avoid redundant Cloudflare updates and honor Gatus removal grace periods.
- Chunk large SQLite ID lists to stay below parameter limits.
Security and validation
- Compare bearer tokens using a constant-time primitive.
- Hide agent inventory from unauthenticated
/healthzresponses. - Reject empty bearer secrets and sub-second polling intervals.
- Reject non-canonical label indices and unsafe SSL configurations without a matching certificate.
- Warn when the server is bound to a non-loopback plaintext address.
Upgrade notes
- Database migrations
0004_pending_npm_removals.sqland0005_pending_cf_removals.sqlrun automatically at startup. - NPM proxy hosts and Cloudflare records are now deleted after the removal grace period when their service remains absent.
- Anonymous
/healthzcallers receive liveness information only; include the bearer token to retrieve agent inventory. DOCKTORNET_SECRETmust be non-empty andDOCKTORNET_POLL_INTERVALmust be at least one second.- All DocktorNet Cargo packages now report version
1.1.0.
Validation
cargo fmt --all -- --checkcargo clippy --workspace --all-targets -- -D warningscargo test --workspace— 188 passed, 0 failed
Full changelog: v1.0.0...v1.1.0