From 149489c8b8c5c29b622ff2879c3cd537c5baf7ec Mon Sep 17 00:00:00 2001 From: Caleb Braaten Date: Tue, 21 Apr 2026 16:14:29 -0700 Subject: [PATCH] Add health checks --- blog.nomad.hcl | 9 ++++++++- blog.nomad.json | 7 ++++++- index.tsx | 1 + 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/blog.nomad.hcl b/blog.nomad.hcl index ba24097..7501334 100644 --- a/blog.nomad.hcl +++ b/blog.nomad.hcl @@ -33,6 +33,7 @@ job "blog" { "traefik.http.routers.blog.rule=Host(`${local.HOST}`)", "traefik.http.routers.blog.entrypoints=websecure", "traefik.http.routers.blog.tls=true", + "traefik.http.routers.blog.service=blog-svc", # ----- router for the www domain (new) ----- "traefik.http.routers.blog-www.rule=Host(`www.${local.HOST}`)", @@ -43,7 +44,13 @@ job "blog" { # ----- middleware that does the 301 redirect ----- "traefik.http.middlewares.redirect-www-to-root.redirectregex.regex=^https?://www\\.${local.HOST}(.*)", "traefik.http.middlewares.redirect-www-to-root.redirectregex.replacement=https://${local.HOST}$${1}", - "traefik.http.middlewares.redirect-www-to-root.redirectregex.permanent=true" + "traefik.http.middlewares.redirect-www-to-root.redirectregex.permanent=true", + + # ----- service and health check ----- + "traefik.http.services.blog-svc.loadbalancer.healthcheck.path=/healthz", + "traefik.http.services.blog-svc.loadbalancer.healthcheck.interval=5s", + "traefik.http.services.blog-svc.loadbalancer.healthcheck.timeout=2s", + "traefik.http.services.blog-svc.loadbalancer.healthcheck.hostname=${local.HOST}", ] } diff --git a/blog.nomad.json b/blog.nomad.json index deb5756..455afc3 100644 --- a/blog.nomad.json +++ b/blog.nomad.json @@ -105,13 +105,18 @@ "traefik.http.routers.blog.rule=Host(`cbraaten.dev`)", "traefik.http.routers.blog.entrypoints=websecure", "traefik.http.routers.blog.tls=true", + "traefik.http.routers.blog.service=blog-svc", "traefik.http.routers.blog-www.rule=Host(`www.cbraaten.dev`)", "traefik.http.routers.blog-www.entrypoints=websecure", "traefik.http.routers.blog-www.tls=true", "traefik.http.routers.blog-www.middlewares=redirect-www-to-root", "traefik.http.middlewares.redirect-www-to-root.redirectregex.regex=^https?://www\\.cbraaten.dev(.*)", "traefik.http.middlewares.redirect-www-to-root.redirectregex.replacement=https://cbraaten.dev${1}", - "traefik.http.middlewares.redirect-www-to-root.redirectregex.permanent=true" + "traefik.http.middlewares.redirect-www-to-root.redirectregex.permanent=true", + "traefik.http.services.blog-svc.loadbalancer.healthcheck.path=/healthz", + "traefik.http.services.blog-svc.loadbalancer.healthcheck.interval=5s", + "traefik.http.services.blog-svc.loadbalancer.healthcheck.timeout=2s", + "traefik.http.services.blog-svc.loadbalancer.healthcheck.hostname=cbraaten.dev" ], "CanaryTags": null, "EnableTagOverride": false, diff --git a/index.tsx b/index.tsx index 89901b6..5705267 100644 --- a/index.tsx +++ b/index.tsx @@ -116,6 +116,7 @@ Bun.serve({ }, }); }, + "/healthz": new Response('ok'), "/*": (req) => { if(req.headers.get("shell-loaded") === "true") { return compressResponse(renderToString(), 404);