Initial Commit
This commit is contained in:
		
							
								
								
									
										21
									
								
								traefik/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								traefik/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
# Traefik
 | 
			
		||||
 | 
			
		||||
This job file is for the [Traefik](https://github.com/traefik/traefik) reverse proxy, which serves as the entry point for all requests to the cluster, and is the only way to access any services on it from outside the local network.
 | 
			
		||||
 | 
			
		||||
This nomad job file also contains Traefik's own config embedded within it as part of a template stanza.
 | 
			
		||||
 | 
			
		||||
In Traefik's config file is a variable called `email`. Set this to your email for Let's Encrypt to use when creating new TLS certificates for your domain. In the `tags` variable, there is a URL. In it, replace `<authelia address>` with the address of your Authelia server if you're running one.
 | 
			
		||||
 | 
			
		||||
If you would like to constrain the reverse proxy to only run on a specific node in order to ensure that its IP stays constant, you can place the following inside of `task "traefik"`:
 | 
			
		||||
 | 
			
		||||
```hcl
 | 
			
		||||
constraint {
 | 
			
		||||
    attribute = "${attr.unique.hostname}"
 | 
			
		||||
    operator  = "=="
 | 
			
		||||
    value     = "<hostname>"
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
replacing `<hostname>` with the hostname of the node you want this to run on.
 | 
			
		||||
 | 
			
		||||
In the `service` stanza, there is a `tags` variable. Inside it, there is a section configuring Authelia. If not using Authelia, remove this section and the one under it. There should be comments above them stating the same thing.
 | 
			
		||||
							
								
								
									
										109
									
								
								traefik/traefik.nomad
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										109
									
								
								traefik/traefik.nomad
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,109 @@
 | 
			
		||||
job "traefik" {
 | 
			
		||||
  region      = "global"
 | 
			
		||||
  datacenters = ["dc1"]
 | 
			
		||||
  type        = "service"
 | 
			
		||||
 | 
			
		||||
  group "traefik" {
 | 
			
		||||
    count = 1
 | 
			
		||||
 | 
			
		||||
    network {
 | 
			
		||||
      port "http" {
 | 
			
		||||
        static = 80
 | 
			
		||||
      }
 | 
			
		||||
      
 | 
			
		||||
      port "https" {
 | 
			
		||||
        static = 443
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      port "api" {
 | 
			
		||||
        static = 8081
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    service {
 | 
			
		||||
      name = "traefik"
 | 
			
		||||
      port = "api"
 | 
			
		||||
 | 
			
		||||
      check {
 | 
			
		||||
        name     = "alive"
 | 
			
		||||
        type     = "tcp"
 | 
			
		||||
        port     = "http"
 | 
			
		||||
        interval = "10s"
 | 
			
		||||
        timeout  = "2s"
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      tags = [
 | 
			
		||||
      	"traefik.enable=true",
 | 
			
		||||
 | 
			
		||||
      	// Redirect all http requests to HTTPS
 | 
			
		||||
      	"traefik.http.middlewares.https-redirect.redirectscheme.permanent=true",
 | 
			
		||||
      	"traefik.http.middlewares.https-redirect.redirectscheme.scheme=https",
 | 
			
		||||
      	"traefik.http.routers.http-catchall.entrypoints=http",
 | 
			
		||||
      	"traefik.http.routers.http-catchall.rule=HostRegexp(`{any:.+}`)",
 | 
			
		||||
      	"traefik.http.routers.http-catchall.middlewares=https-redirect",
 | 
			
		||||
 | 
			
		||||
      	// Forward requests to protected services to Authelia. Remove this if not running Authelia.
 | 
			
		||||
      	"traefik.http.middlewares.authelia.forwardauth.address=http://<authelia address>/api/verify?rd=https://auth.arsenm.dev/",
 | 
			
		||||
      	"traefik.http.middlewares.authelia.forwardauth.trustforwardheader=true",
 | 
			
		||||
      	"traefik.http.middlewares.authelia.forwardauth.authresponseheaders=Remote-User, Remote-Groups",
 | 
			
		||||
 | 
			
		||||
      	// Expose Traefik API with authentication. Remove this if not running Authelia.
 | 
			
		||||
      	"traefik.http.routers.traefik.rule=Host(`traefik.arsenm.dev`)",
 | 
			
		||||
      	"traefik.http.routers.traefik.tls.certResolver=letsencrypt",
 | 
			
		||||
      	"traefik.http.routers.traefik.middlewares=authelia",
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    task "traefik" {
 | 
			
		||||
      driver = "docker"
 | 
			
		||||
 | 
			
		||||
      config {
 | 
			
		||||
        image        = "traefik:v2.2"
 | 
			
		||||
        network_mode = "host"
 | 
			
		||||
 | 
			
		||||
        volumes = [
 | 
			
		||||
          "/opt/traefik/acme.json:/acme.json",
 | 
			
		||||
          "local/traefik.toml:/etc/traefik/traefik.toml",
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      template {
 | 
			
		||||
        data = <<EOF
 | 
			
		||||
[entryPoints]
 | 
			
		||||
    [entryPoints.http]
 | 
			
		||||
    address = ":80"
 | 
			
		||||
    [entryPoints.https]
 | 
			
		||||
    address = ":443"
 | 
			
		||||
    [entryPoints.traefik]
 | 
			
		||||
    address = ":8081"
 | 
			
		||||
        
 | 
			
		||||
[certificatesResolvers.letsencrypt.acme]
 | 
			
		||||
  email = "you@example.com"
 | 
			
		||||
  storage = "acme.json"
 | 
			
		||||
  [certificatesResolvers.letsencrypt.acme.httpChallenge]
 | 
			
		||||
    entryPoint = "http"
 | 
			
		||||
 | 
			
		||||
[api]
 | 
			
		||||
    dashboard = true
 | 
			
		||||
    insecure  = true
 | 
			
		||||
 | 
			
		||||
# Enable Consul Catalog configuration backend.
 | 
			
		||||
[providers.consulCatalog]
 | 
			
		||||
    prefix           = "traefik"
 | 
			
		||||
    exposedByDefault = false
 | 
			
		||||
 | 
			
		||||
    [providers.consulCatalog.endpoint]
 | 
			
		||||
      address = "127.0.0.1:8500"
 | 
			
		||||
      scheme  = "http"
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
        destination = "local/traefik.toml"
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      resources {
 | 
			
		||||
        cpu    = 100
 | 
			
		||||
        memory = 128
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user