summaryrefslogtreecommitdiff
path: root/jobs/nginx.nomad.hcl
blob: 2ed377f79b4d37616fc394b67191294617a5ccab (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
job "virtual-hosting" {
  group "nginx" {
    count = 1

    network {
      port "http" {
        static = 80
      }
      port "https" {
        static = 443
      }
    }

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

    task "nginx" {
      driver = "docker"

      resources {
        cpu    = 50
        memory = 20
      }

      volume_mount {
        volume      = "certs"
        destination = "/var/local/certs"
      }

      config {
        image = "nginx:1.25-alpine"
        ports = ["http", "https"]

        volumes = [
          "local:/etc/nginx/conf.d",
        ]
      }

      template {
        data = <<EOF
{{- range nomadServices -}}
  {{- $hostname := "" -}}
  {{- $certname := "" -}}
  {{- $default := "" -}}
  {{- range $tag := .Tags -}}
    {{- if $tag | regexMatch "nginx.hostname=" -}}
      {{- $hostname = $tag | replaceAll "nginx.hostname=" "" -}}
    {{- end -}}
    {{- if $tag | regexMatch "nginx.certname=" -}}
      {{- $certname = $tag | replaceAll "nginx.certname=" "" -}}
    {{- end -}}
    {{- if $tag | regexMatch "nginx.default_server" -}}
      {{- $default = "default_server" -}}
    {{- end -}}
  {{- end -}}
  {{- if eq $hostname "" -}}
    {{- continue -}}
  {{- end -}}

  {{- $upstream := .Name | toLower | regexReplaceAll "[^a-z0-9\\-._]" "" -}}

################################################
upstream {{ $upstream }} {
  {{- range nomadService .Name }}
  server {{ .Address }}:{{ .Port }};
  {{- end }}
}

server {
  listen 80 {{ $default }};
  listen [::]:80 {{ $default }};
  http2 on;
  server_name {{ $hostname }};

  location / {
    proxy_pass http://{{ $upstream }};

    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Port $server_port;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_set_header Upgrade $http_upgrade;
  }
}

{{ if ne $certname "" -}}
server {
  listen 443 ssl {{ $default }};
  listen [::]:443 ssl {{ $default }};
  http2 on;
  server_name {{ $hostname }};

  ssl_certificate /var/local/certs/certificates/{{ $certname }}.crt;
  ssl_certificate_key /var/local/certs/certificates/{{ $certname }}.key;
  ssl_trusted_certificate /var/local/certs/certificates/{{ $certname }}.issuer.crt;

  location / {
    proxy_pass http://{{ $upstream }};

    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Port $server_port;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_set_header Upgrade $http_upgrade;
  }
}
{{ end -}}

{{ end -}}
EOF

        destination   = "local/virtual-hosting.conf"
        change_mode   = "signal"
        change_signal = "SIGHUP"
      }
    }
  }
}