# export to json for ci/cd scripts with the following command # nomad job run -output blog.nomad.hcl > blog.nomad.json locals { HOST = "cbraaten.dev" } variable "image_tag" { type = string default = "latest" } job "blog" { type = "service" group "blog" { count = 1 network { port "http" { to = 3000 } } service { name = "blog" provider = "consul" port = "http" tags = [ # ----- router for the naked domain ----- "traefik.enable=true", "traefik.http.routers.blog.rule=Host(`${local.HOST}`)", "traefik.http.routers.blog.entrypoints=websecure", "traefik.http.routers.blog.tls=true", # ----- router for the www domain (new) ----- "traefik.http.routers.blog-www.rule=Host(`www.${local.HOST}`)", "traefik.http.routers.blog-www.entrypoints=websecure", "traefik.http.routers.blog-www.tls=true", "traefik.http.routers.blog-www.middlewares=redirect-www-to-root", # ----- 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" ] } task "blog" { driver = "docker" config { image = "git.cbraaten.dev/caleb/blog:${var.image_tag}" ports = ["http"] } } update { max_parallel = 1 min_healthy_time = "10s" healthy_deadline = "3m" auto_revert = true } } }