213 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			HCL
		
	
	
	
			
		
		
	
	
			213 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			HCL
		
	
	
	
| job "traefik-cloudflare-v1" {
 | |
|   datacenters = ["dc1"]
 | |
|   type = "service"
 | |
| 
 | |
|   group "traefik" {
 | |
|     count = 1
 | |
| 
 | |
|     constraint {
 | |
|       attribute = "${node.unique.name}"
 | |
|       value     = "hcp1"
 | |
|     }
 | |
| 
 | |
| 
 | |
|     network {
 | |
|       mode = "host"
 | |
|       port "http" {
 | |
|         static = 80
 | |
|         host_network = "tailscale0"
 | |
|       }
 | |
|       port "https" {
 | |
|         static = 443
 | |
|         host_network = "tailscale0"
 | |
|       }
 | |
|       port "traefik" {
 | |
|         static = 8080
 | |
|         host_network = "tailscale0"
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     task "traefik" {
 | |
|       driver = "exec"
 | |
|       
 | |
|              config {
 | |
|                command = "/usr/local/bin/traefik"
 | |
|                args = [
 | |
|                  "--configfile=/local/traefik.yml"
 | |
|                ]
 | |
|              }
 | |
| 
 | |
|       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 }}.git4ta.me`)"
 | |
|   file:
 | |
|     filename: /local/dynamic.yml
 | |
|     watch: true
 | |
| 
 | |
| certificatesResolvers:
 | |
|   cloudflare:
 | |
|     acme:
 | |
|       email: houzhongxu.houzhongxu@gmail.com
 | |
|       storage: /local/acme.json
 | |
|       dnsChallenge:
 | |
|         provider: cloudflare
 | |
|         delayBeforeCheck: 30s
 | |
|         resolvers:
 | |
|           - "1.1.1.1:53"
 | |
|           - "1.0.0.1:53"
 | |
| 
 | |
| log:
 | |
|   level: DEBUG
 | |
| EOF
 | |
|         destination = "local/traefik.yml"
 | |
|       }
 | |
| 
 | |
|       template {
 | |
|         data = <<EOF
 | |
| http:
 | |
|   serversTransports:
 | |
|     waypoint-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://warden.tailnet-68f9.ts.net:8500"  # 北京,优先
 | |
|           - url: "http://ch4.tailnet-68f9.ts.net:8500"     # 韩国,备用
 | |
|           - url: "http://ash3c.tailnet-68f9.ts.net:8500"   # 美国,备用
 | |
|         healthCheck:
 | |
|           path: "/v1/status/leader"
 | |
|           interval: "30s"
 | |
|           timeout: "15s"
 | |
| 
 | |
|     nomad-cluster:
 | |
|       loadBalancer:
 | |
|         servers:
 | |
|           - url: "http://warden.tailnet-68f9.ts.net:4646"  # 北京,优先
 | |
|           - url: "http://ch4.tailnet-68f9.ts.net:4646"     # 韩国,备用
 | |
|           - url: "http://ash3c.tailnet-68f9.ts.net:4646"   # 美国,备用
 | |
|         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://ch4.tailnet-68f9.ts.net:8200"     # 韩国,活跃节点
 | |
|           - url: "http://ash3c.tailnet-68f9.ts.net:8200"   # 美国,备用节点
 | |
|           - url: "http://warden.tailnet-68f9.ts.net:8200"  # 北京,备用节点
 | |
|         healthCheck:
 | |
|           path: "/v1/sys/health"
 | |
|           interval: "30s"
 | |
|           timeout: "15s"
 | |
| 
 | |
|   routers:
 | |
|     consul-api:
 | |
|       rule: "Host(`consul.git4ta.me`)"
 | |
|       service: consul-cluster
 | |
|       middlewares:
 | |
|         - consul-stripprefix
 | |
|       entryPoints:
 | |
|         - websecure
 | |
|       tls:
 | |
|         certResolver: cloudflare
 | |
|     
 | |
|     traefik-dashboard:
 | |
|       rule: "Host(`traefik.git4ta.me`)"
 | |
|       service: dashboard@internal
 | |
|       middlewares:
 | |
|         - dashboard_redirect@internal
 | |
|         - dashboard_stripprefix@internal
 | |
|       entryPoints:
 | |
|         - websecure
 | |
|       tls:
 | |
|         certResolver: cloudflare
 | |
| 
 | |
|     nomad-ui:
 | |
|       rule: "Host(`nomad.git4ta.me`)"
 | |
|       service: nomad-cluster
 | |
|       entryPoints:
 | |
|         - websecure
 | |
|       tls:
 | |
|         certResolver: cloudflare
 | |
| 
 | |
|     waypoint-ui:
 | |
|       rule: "Host(`waypoint.git4ta.me`)"
 | |
|       service: waypoint-cluster
 | |
|       entryPoints:
 | |
|         - websecure
 | |
|       tls:
 | |
|         certResolver: cloudflare
 | |
| 
 | |
|     vault-ui:
 | |
|       rule: "Host(`vault.git4ta.me`)"
 | |
|       service: vault-cluster
 | |
|       entryPoints:
 | |
|         - websecure
 | |
|       tls:
 | |
|         certResolver: cloudflare
 | |
| EOF
 | |
|         destination = "local/dynamic.yml"
 | |
|       }
 | |
| 
 | |
|       template {
 | |
|         data = <<EOF
 | |
| CLOUDFLARE_EMAIL=houzhongxu.houzhongxu@gmail.com
 | |
| CLOUDFLARE_DNS_API_TOKEN=HYT-cfZTP_jq6Xd9g3tpFMwxopOyIrf8LZpmGAI3
 | |
| CLOUDFLARE_ZONE_API_TOKEN=HYT-cfZTP_jq6Xd9g3tpFMwxopOyIrf8LZpmGAI3
 | |
| EOF
 | |
|         destination = "local/cloudflare.env"
 | |
|         env = true
 | |
|       }
 | |
| 
 | |
|       resources {
 | |
|         cpu = 500
 | |
|         memory = 512
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| } |