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
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
} |