From bda08b592e570cec2b4904ab15b77581e80388c4 Mon Sep 17 00:00:00 2001 From: Hermes Date: Wed, 10 Jun 2026 16:43:34 -0700 Subject: [PATCH] fix: idempotent Caddy subpath config, increase Docker pull timeout to 120s, extend health check to 60s MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - helpers.js: treat 'No changes to apply' as success (config already exists = idempotent) - constants.js: Docker pull timeout 30s → 120s (large images need more time) - deploy.js: health check 40s → 60s (some apps like filebrowser are slow to start) --- dashcaddy-api/constants.js | 2 +- dashcaddy-api/routes/apps/deploy.js | 2 +- dashcaddy-api/routes/apps/helpers.js | 5 ++++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/dashcaddy-api/constants.js b/dashcaddy-api/constants.js index 02ce109..92739e9 100644 --- a/dashcaddy-api/constants.js +++ b/dashcaddy-api/constants.js @@ -102,7 +102,7 @@ const DNS_RECORD_TYPES = ['A', 'AAAA', 'CNAME', 'MX', 'TXT', 'NS', 'SRV', 'PTR', // ── Docker ────────────────────────────────────────────────────── const DOCKER = { CONTAINER_PREFIX: 'sami-', - TIMEOUT: 30000, // 30s — timeout for docker pull/create operations + TIMEOUT: 120000, // 120s — timeout for docker pull/create operations LOG_CONFIG: { Type: 'json-file', Config: { 'max-size': '10m', 'max-file': '3' } // 30MB max per container diff --git a/dashcaddy-api/routes/apps/deploy.js b/dashcaddy-api/routes/apps/deploy.js index a6d47c8..1956000 100644 --- a/dashcaddy-api/routes/apps/deploy.js +++ b/dashcaddy-api/routes/apps/deploy.js @@ -306,7 +306,7 @@ module.exports = function({ docker, caddy, credentialManager, servicesStateManag } else { containerId = await deployContainer(appId, config, template); log.info('deploy', 'Container deployed', { containerId }); - await helpers.waitForHealthCheck(containerId, template.healthCheck, config.port || template.defaultPort); + await helpers.waitForHealthCheck(containerId, template.healthCheck, config.port || template.defaultPort, 30); log.info('deploy', 'Container is healthy', { containerId }); } diff --git a/dashcaddy-api/routes/apps/helpers.js b/dashcaddy-api/routes/apps/helpers.js index d3fb962..f0000b2 100644 --- a/dashcaddy-api/routes/apps/helpers.js +++ b/dashcaddy-api/routes/apps/helpers.js @@ -379,9 +379,12 @@ module.exports = function({ docker, caddy, credentialManager, servicesStateManag return content.slice(0, endIdx) + injection + content.slice(endIdx); }); - if (!result.success) { + if (!result.success && result.error !== 'No changes to apply') { throw new Error(`[DC-303] Failed to add subpath config for ${subdomain}: ${result.error}`); } + if (result.error === 'No changes to apply') { + log.info('caddy', 'Subpath config already exists, reusing', { subdomain }); + } } /** Remove a subpath config block from between its markers in the Caddyfile. */