250 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			HCL
		
	
	
	
			
		
		
	
	
			250 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			HCL
		
	
	
	
| job "traefik-cloudflare-v3" {
 | ||
|   datacenters = ["dc1"]
 | ||
|   type = "service"
 | ||
| 
 | ||
|   group "traefik" {
 | ||
|     count = 1
 | ||
| 
 | ||
|     constraint {
 | ||
|       attribute = "${node.unique.name}"
 | ||
|       value     = "hcp1"
 | ||
|     }
 | ||
| 
 | ||
|     volume "traefik-certs" {
 | ||
|       type      = "host"
 | ||
|       read_only = false
 | ||
|       source    = "traefik-certs"
 | ||
|     }
 | ||
| 
 | ||
|     network {
 | ||
|       mode = "host"
 | ||
|       port "http" {
 | ||
|         static = 80
 | ||
|       }
 | ||
|       port "https" {
 | ||
|         static = 443
 | ||
|       }
 | ||
|       port "traefik" {
 | ||
|         static = 8080
 | ||
|       }
 | ||
|     }
 | ||
| 
 | ||
|     task "traefik" {
 | ||
|       driver = "exec"
 | ||
|       
 | ||
|       config {
 | ||
|         command = "/usr/local/bin/traefik"
 | ||
|         args = [
 | ||
|           "--configfile=/local/traefik.yml"
 | ||
|         ]
 | ||
|       }
 | ||
| 
 | ||
|       env {
 | ||
|         CLOUDFLARE_EMAIL = "locksmithknight@gmail.com"
 | ||
|         CLOUDFLARE_DNS_API_TOKEN = "0aPWoLaQ59l0nyL1jIVzZaEx2e41Gjgcfhn3ztJr"
 | ||
|         CLOUDFLARE_ZONE_API_TOKEN = "0aPWoLaQ59l0nyL1jIVzZaEx2e41Gjgcfhn3ztJr"
 | ||
|       }
 | ||
| 
 | ||
|       volume_mount {
 | ||
|         volume      = "traefik-certs"
 | ||
|         destination = "/opt/traefik/certs"
 | ||
|         read_only   = false
 | ||
|       }
 | ||
| 
 | ||
|       template {
 | ||
|         data = <<EOF
 | ||
| api:
 | ||
|   dashboard: true
 | ||
|   insecure: true
 | ||
| 
 | ||
| entryPoints:
 | ||
|   web:
 | ||
|     address: "0.0.0.0:80"
 | ||
|     http:
 | ||
|       redirections:
 | ||
|         entrypoint:
 | ||
|           to: websecure
 | ||
|           scheme: https
 | ||
|           permanent: true
 | ||
|   websecure:
 | ||
|     address: "0.0.0.0:443"
 | ||
|   traefik:
 | ||
|     address: "0.0.0.0:8080"
 | ||
| 
 | ||
| providers:
 | ||
|   consulCatalog:
 | ||
|     endpoint:
 | ||
|       address: "warden.tailnet-68f9.ts.net:8500"
 | ||
|       scheme: "http"
 | ||
|     watch: true
 | ||
|     exposedByDefault: false
 | ||
|     prefix: "traefik"
 | ||
|     defaultRule: "Host(`{{ .Name }}.git-4ta.live`)"
 | ||
|   file:
 | ||
|     filename: /local/dynamic.yml
 | ||
|     watch: true
 | ||
| 
 | ||
| certificatesResolvers:
 | ||
|   cloudflare:
 | ||
|     acme:
 | ||
|       email: {{ env "CLOUDFLARE_EMAIL" }}
 | ||
|       storage: /opt/traefik/certs/acme.json
 | ||
|       dnsChallenge:
 | ||
|         provider: cloudflare
 | ||
|         delayBeforeCheck: 30s
 | ||
| 
 | ||
| log:
 | ||
|   level: DEBUG
 | ||
| EOF
 | ||
|         destination = "local/traefik.yml"
 | ||
|       }
 | ||
| 
 | ||
|       template {
 | ||
|         data = <<EOF
 | ||
| http:
 | ||
|   serversTransports:
 | ||
|     waypoint-insecure:
 | ||
|       insecureSkipVerify: true
 | ||
|     authentik-insecure:
 | ||
|       insecureSkipVerify: true
 | ||
|   
 | ||
|   middlewares:
 | ||
|     consul-stripprefix:
 | ||
|       stripPrefix:
 | ||
|         prefixes:
 | ||
|           - "/consul"
 | ||
|     waypoint-auth:
 | ||
|       replacePathRegex:
 | ||
|         regex: "^/auth/token(.*)$"
 | ||
|         replacement: "/auth/token$1"
 | ||
| 
 | ||
|   services:
 | ||
|     consul-cluster:
 | ||
|       loadBalancer:
 | ||
|         servers:
 | ||
|           - url: "http://ch4.tailnet-68f9.ts.net:8500"     # 韩国,Leader
 | ||
|           - url: "http://warden.tailnet-68f9.ts.net:8500"  # 北京,Follower
 | ||
|           - url: "http://ash3c.tailnet-68f9.ts.net:8500"   # 美国,Follower
 | ||
|         healthCheck:
 | ||
|           path: "/v1/status/leader"
 | ||
|           interval: "30s"
 | ||
|           timeout: "15s"
 | ||
| 
 | ||
|     nomad-cluster:
 | ||
|       loadBalancer:
 | ||
|         servers:
 | ||
|           - url: "http://ch2.tailnet-68f9.ts.net:4646"     # 韩国,Leader
 | ||
|           - url: "http://ash3c.tailnet-68f9.ts.net:4646"   # 美国,Follower
 | ||
|         healthCheck:
 | ||
|           path: "/v1/status/leader"
 | ||
|           interval: "30s"
 | ||
|           timeout: "15s"
 | ||
| 
 | ||
|     waypoint-cluster:
 | ||
|       loadBalancer:
 | ||
|         servers:
 | ||
|           - url: "https://hcp1.tailnet-68f9.ts.net:9701"  # hcp1 节点 HTTPS API
 | ||
|         serversTransport: waypoint-insecure
 | ||
| 
 | ||
|     vault-cluster:
 | ||
|       loadBalancer:
 | ||
|         servers:
 | ||
|           - url: "http://warden.tailnet-68f9.ts.net:8200"  # 北京,单节点
 | ||
|         healthCheck:
 | ||
|           path: "/ui/"
 | ||
|           interval: "30s"
 | ||
|           timeout: "15s"
 | ||
| 
 | ||
|     authentik-cluster:
 | ||
|       loadBalancer:
 | ||
|         servers:
 | ||
|           - url: "https://authentik.tailnet-68f9.ts.net:9443"  # Authentik容器HTTPS端口
 | ||
|         serversTransport: authentik-insecure
 | ||
|         healthCheck:
 | ||
|           path: "/flows/-/default/authentication/"
 | ||
|           interval: "30s"
 | ||
|           timeout: "15s"
 | ||
| 
 | ||
|   routers:
 | ||
|     consul-api:
 | ||
|       rule: "Host(`consul.git-4ta.live`)"
 | ||
|       service: consul-cluster
 | ||
|       middlewares:
 | ||
|         - consul-stripprefix
 | ||
|       entryPoints:
 | ||
|         - websecure
 | ||
|       tls:
 | ||
|         certResolver: cloudflare
 | ||
|     
 | ||
|     traefik-dashboard:
 | ||
|       rule: "Host(`traefik.git-4ta.live`)"
 | ||
|       service: dashboard@internal
 | ||
|       middlewares:
 | ||
|         - dashboard_redirect@internal
 | ||
|         - dashboard_stripprefix@internal
 | ||
|       entryPoints:
 | ||
|         - websecure
 | ||
|       tls:
 | ||
|         certResolver: cloudflare
 | ||
| 
 | ||
|     traefik-api:
 | ||
|       rule: "Host(`traefik.git-4ta.live`) && PathPrefix(`/api`)"
 | ||
|       service: api@internal
 | ||
|       entryPoints:
 | ||
|         - websecure
 | ||
|       tls:
 | ||
|         certResolver: cloudflare
 | ||
| 
 | ||
|     nomad-ui:
 | ||
|       rule: "Host(`nomad.git-4ta.live`)"
 | ||
|       service: nomad-cluster
 | ||
|       entryPoints:
 | ||
|         - websecure
 | ||
|       tls:
 | ||
|         certResolver: cloudflare
 | ||
| 
 | ||
|     waypoint-ui:
 | ||
|       rule: "Host(`waypoint.git-4ta.live`)"
 | ||
|       service: waypoint-cluster
 | ||
|       entryPoints:
 | ||
|         - websecure
 | ||
|       tls:
 | ||
|         certResolver: cloudflare
 | ||
| 
 | ||
|     vault-ui:
 | ||
|       rule: "Host(`vault.git-4ta.live`)"
 | ||
|       service: vault-cluster
 | ||
|       entryPoints:
 | ||
|         - websecure
 | ||
|       tls:
 | ||
|         certResolver: cloudflare
 | ||
| 
 | ||
|     authentik-ui:
 | ||
|       rule: "Host(`authentik1.git-4ta.live`)"
 | ||
|       service: authentik-cluster
 | ||
|       entryPoints:
 | ||
|         - websecure
 | ||
|       tls:
 | ||
|         certResolver: cloudflare
 | ||
| EOF
 | ||
|         destination = "local/dynamic.yml"
 | ||
|       }
 | ||
| 
 | ||
|       template {
 | ||
|         data = <<EOF
 | ||
| CLOUDFLARE_EMAIL=locksmithknight@gmail.com
 | ||
| CLOUDFLARE_DNS_API_TOKEN=0aPWoLaQ59l0nyL1jIVzZaEx2e41Gjgcfhn3ztJr
 | ||
| CLOUDFLARE_ZONE_API_TOKEN=0aPWoLaQ59l0nyL1jIVzZaEx2e41Gjgcfhn3ztJr
 | ||
| EOF
 | ||
|         destination = "local/cloudflare.env"
 | ||
|         env = true
 | ||
|       }
 | ||
| 
 | ||
|       resources {
 | ||
|         cpu    = 500
 | ||
|         memory = 512
 | ||
|       }
 | ||
|     }
 | ||
|   }
 | ||
| }
 |