summaryrefslogtreecommitdiff
path: root/jobs/traefik.nomad.hcl
blob: 8de6233f4784cb20498e1283eddb14812d84a7e0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
job "traefik" {
  type = "service"

  group "traefik" {
    count = 1

    network {
      port "http" {
        static = 80
      }

      port "https" {
        static = 443
      }
    }

    volume "certs" {
      type   = "host"
      source = "ca-certificates"
    }

    task "traefik" {
      driver = "docker"

      config {
        image        = "traefik:v3.0"
        network_mode = "host"

        volumes = [
          "local/traefik.toml:/etc/traefik/traefik.toml",
          "local/nomad-agent-ca.pem:/etc/traefik/nomad-agent-ca.pem",
          "local/dynamic-conf.yaml:/etc/traefik/dynamic-conf.yaml"
        ]
      }

      volume_mount {
        volume = "certs"
        destination = "/certificates"
      }

      template {
        data = <<EOF
-----BEGIN CERTIFICATE-----
MIIDDTCCArKgAwIBAgIRAIYjjhWbJ80SG4cXZF6bGVIwCgYIKoZIzj0EAwIwgcgx
CzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj
bzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw
FQYDVQQKEw5IYXNoaUNvcnAgSW5jLjEOMAwGA1UECxMFTm9tYWQxPzA9BgNVBAMT
Nk5vbWFkIEFnZW50IENBIDE3ODMwMTE2MzYzOTIwMDg3MDMyMTI4NzQyMTA5ODEy
MTE3MzMzMDAeFw0yMzA4MjAyMDE0MzdaFw0yODA4MTgyMDE0MzdaMIHIMQswCQYD
VQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xGjAY
BgNVBAkTETEwMSBTZWNvbmQgU3RyZWV0MQ4wDAYDVQQREwU5NDEwNTEXMBUGA1UE
ChMOSGFzaGlDb3JwIEluYy4xDjAMBgNVBAsTBU5vbWFkMT8wPQYDVQQDEzZOb21h
ZCBBZ2VudCBDQSAxNzgzMDExNjM2MzkyMDA4NzAzMjEyODc0MjEwOTgxMjExNzMz
MzAwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQnSx/6sQkxGuL9kaDAyUGoqWYJ
bAzrBrhyNLMkjjYXQ7QrzSOIzGfUGj2A4AzpHbU0t9k+JKaVHaKevcPVFyLMo3sw
eTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgqgrh
OUp/Z5bL0pf20U6mGO57+PdAU88f3U6MbvYPaqMwKwYDVR0jBCQwIoAgqgrhOUp/
Z5bL0pf20U6mGO57+PdAU88f3U6MbvYPaqMwCgYIKoZIzj0EAwIDSQAwRgIhAOuN
l6lMSJW7er6SN22jKxR+oxrk9755eKm0b4GCDscCAiEAjlyxJnwTSF1v23cCS4c+
V435uuYooblwdUaga7fTDkE=
-----END CERTIFICATE-----
EOF
        destination = "local/nomad-agent-ca.pem"
      }

      template {
        data = <<EOF
[entryPoints]
    [entryPoints.http]
        address = ":80"
        [entryPoints.http.http.redirections.entryPoint]
            to = "https"
            scheme = "https"
            permanent = "true"
    [entryPoints.https]
        address = ":443"

[accessLog]
[log]
    level = "INFO"

[api]
    dashboard = true

[certificatesResolvers.default.acme]
    email = "mathias+certs@magnusson.space"
    storage = "/certificates/acme.json"
    [certificatesResolvers.default.acme.httpChallenge]
        entryPoint = "http"

# Enable Consul Catalog configuration backend.
[providers.nomad]
    prefix           = "traefik"
    exposedByDefault = false

    [providers.nomad.endpoint]
        address = "https://127.0.0.1:4646"
        token = "{{ with nomadVar "nomad/jobs/traefik" }}{{ .nomad_token }}{{ end }}"
        [providers.nomad.endpoint.tls]
            ca = "/etc/traefik/nomad-agent-ca.pem"
[providers.file]
    filename = "/etc/traefik/dynamic-conf.yaml"
EOF

        destination = "local/traefik.toml"
      }

      template {
        data = <<YAML
http:
  routers:
    api:
      rule: Host(`traefik.magnusson.space`)
      service: api@internal
      middlewares:
        - auth
      tls:
        certResolver: default
      entrypoints: https
  middlewares:
    auth:
      basicAuth:
        users:
          - mathias:$2y$05$NvMwyf/U2jh9TCYdxj8JbeDhFMGPBDid2IypQPebx4rk5WLOwR1M2
YAML
        destination = "local/dynamic-conf.yaml"
      }

      resources {
        cpu    = 100
        memory = 128
      }
    }
  }
}