From 080233a7cd1e37ce3440dc15814a70d2e6d13157 Mon Sep 17 00:00:00 2001 From: Bazyli Brzoska Date: Sun, 5 Oct 2025 07:54:43 -0700 Subject: [PATCH] fix: traefik needs middlewares to be empty/valid --- packages/server/src/utils/traefik/application.ts | 8 ++++++++ packages/server/src/utils/traefik/middleware.ts | 10 +++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/server/src/utils/traefik/application.ts b/packages/server/src/utils/traefik/application.ts index b18161c7..ccc4e3f2 100644 --- a/packages/server/src/utils/traefik/application.ts +++ b/packages/server/src/utils/traefik/application.ts @@ -263,6 +263,14 @@ export const writeTraefikConfigRemote = async ( try { const { DYNAMIC_TRAEFIK_PATH } = paths(true); const configPath = path.join(DYNAMIC_TRAEFIK_PATH, `${appName}.yml`); + if (traefikConfig.http?.middlewares) { + // traefik will fail to start if the file contains middlewares entry but no middlewares are defined + const hasNoMiddlewares = Object.keys(traefikConfig.http.middlewares).length === 0; + if (hasNoMiddlewares) { + // if there aren't any middlewares, remove the whole section + delete traefikConfig.http.middlewares; + } + } const yamlStr = stringify(traefikConfig); await execAsyncRemote(serverId, `echo '${yamlStr}' > ${configPath}`); } catch (e) { diff --git a/packages/server/src/utils/traefik/middleware.ts b/packages/server/src/utils/traefik/middleware.ts index 0340f2ed..636b2d36 100644 --- a/packages/server/src/utils/traefik/middleware.ts +++ b/packages/server/src/utils/traefik/middleware.ts @@ -100,9 +100,17 @@ export const loadRemoteMiddlewares = async (serverId: string) => { throw new Error(`File not found: ${configPath}`); } }; -export const writeMiddleware = (config: T) => { +export const writeMiddleware = (config: FileConfig) => { const { DYNAMIC_TRAEFIK_PATH } = paths(); const configPath = join(DYNAMIC_TRAEFIK_PATH, "middlewares.yml"); + if (config.http?.middlewares) { + // traefik will fail to start if the file contains middlewares entry but no middlewares are defined + const hasNoMiddlewares = Object.keys(config.http.middlewares).length === 0; + if (hasNoMiddlewares) { + // if there aren't any middlewares, remove the whole section + delete config.http.middlewares; + } + } const newYamlContent = stringify(config); writeFileSync(configPath, newYamlContent, "utf8"); };