Update Traefik with Cloudflare credentials
This commit is contained in:
+110
-62
@@ -1,9 +1,9 @@
|
||||
# Traefik Reverse Proxy
|
||||
# Traefik Reverse Proxy for hobbs.farm
|
||||
# Deploy: nomad job run traefik.nomad.hcl
|
||||
|
||||
job "traefik" {
|
||||
datacenters = ["hf-dc1"]
|
||||
type = "system" # Runs on every client node
|
||||
type = "system"
|
||||
|
||||
group "traefik" {
|
||||
network {
|
||||
@@ -13,27 +13,28 @@ job "traefik" {
|
||||
port "https" {
|
||||
static = 443
|
||||
}
|
||||
port "dashboard" {
|
||||
static = 8080
|
||||
port "api" {
|
||||
static = 8088
|
||||
}
|
||||
}
|
||||
|
||||
volume "traefik-data" {
|
||||
type = "host"
|
||||
source = "traefik-data"
|
||||
read_only = false
|
||||
}
|
||||
|
||||
service {
|
||||
name = "traefik"
|
||||
port = "https"
|
||||
|
||||
tags = [
|
||||
"traefik.enable=true",
|
||||
"traefik.http.routers.dashboard.rule=Host(`traefik.hobbs.farm`)",
|
||||
"traefik.http.routers.dashboard.service=api@internal",
|
||||
]
|
||||
tags = ["reverse-proxy", "traefik"]
|
||||
|
||||
check {
|
||||
type = "http"
|
||||
path = "/ping"
|
||||
port = "dashboard"
|
||||
port = "api"
|
||||
interval = "10s"
|
||||
timeout = "2s"
|
||||
timeout = "3s"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,72 +44,119 @@ job "traefik" {
|
||||
config {
|
||||
image = "traefik:v3.0"
|
||||
network_mode = "host"
|
||||
|
||||
|
||||
volumes = [
|
||||
"local/traefik.yml:/etc/traefik/traefik.yml:ro",
|
||||
"local/dynamic:/etc/traefik/dynamic:ro",
|
||||
]
|
||||
}
|
||||
|
||||
volume_mount {
|
||||
volume = "traefik-data"
|
||||
destination = "/data"
|
||||
}
|
||||
|
||||
template {
|
||||
destination = "local/traefik.yml"
|
||||
data = <<-EOF
|
||||
data = <<-EOF
|
||||
api:
|
||||
dashboard: true
|
||||
insecure: true
|
||||
|
||||
ping:
|
||||
entryPoint: api
|
||||
|
||||
entryPoints:
|
||||
web:
|
||||
address: ":80"
|
||||
http:
|
||||
redirections:
|
||||
entryPoint:
|
||||
to: websecure
|
||||
scheme: https
|
||||
websecure:
|
||||
address: ":443"
|
||||
api:
|
||||
dashboard: true
|
||||
insecure: true
|
||||
|
||||
ping:
|
||||
entryPoint: dashboard
|
||||
|
||||
entryPoints:
|
||||
web:
|
||||
address: ":80"
|
||||
http:
|
||||
redirections:
|
||||
entryPoint:
|
||||
to: websecure
|
||||
scheme: https
|
||||
websecure:
|
||||
address: ":443"
|
||||
dashboard:
|
||||
address: ":8080"
|
||||
|
||||
providers:
|
||||
consulCatalog:
|
||||
prefix: traefik
|
||||
exposedByDefault: false
|
||||
endpoint:
|
||||
address: 127.0.0.1:8500
|
||||
file:
|
||||
directory: /etc/traefik/dynamic
|
||||
watch: true
|
||||
|
||||
certificatesResolvers:
|
||||
letsencrypt:
|
||||
acme:
|
||||
email: jeremydanielhobbs@gmail.com
|
||||
storage: /etc/traefik/acme.json
|
||||
dnsChallenge:
|
||||
provider: cloudflare
|
||||
resolvers:
|
||||
- "1.1.1.1:53"
|
||||
- "8.8.8.8:53"
|
||||
|
||||
log:
|
||||
level: INFO
|
||||
|
||||
accessLog: {}
|
||||
address: ":8088"
|
||||
|
||||
providers:
|
||||
consulCatalog:
|
||||
prefix: traefik
|
||||
exposedByDefault: false
|
||||
endpoint:
|
||||
address: 127.0.0.1:8500
|
||||
file:
|
||||
directory: /etc/traefik/dynamic
|
||||
watch: true
|
||||
|
||||
certificatesResolvers:
|
||||
letsencrypt:
|
||||
acme:
|
||||
email: jeremy@hobbs.farm
|
||||
storage: /data/acme.json
|
||||
dnsChallenge:
|
||||
provider: cloudflare
|
||||
resolvers:
|
||||
- "1.1.1.1:53"
|
||||
- "8.8.8.8:53"
|
||||
|
||||
log:
|
||||
level: INFO
|
||||
|
||||
accessLog: {}
|
||||
EOF
|
||||
}
|
||||
|
||||
template {
|
||||
destination = "local/dynamic/.keep"
|
||||
data = "# Dynamic config directory"
|
||||
destination = "local/dynamic/media.yml"
|
||||
data = <<-EOF
|
||||
http:
|
||||
routers:
|
||||
jellyfin:
|
||||
rule: "Host(`r2d2.hobbs.farm`)"
|
||||
entryPoints:
|
||||
- websecure
|
||||
service: jellyfin
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
|
||||
sonarr:
|
||||
rule: "Host(`sonarr.hobbs.farm`)"
|
||||
entryPoints:
|
||||
- websecure
|
||||
service: sonarr
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
|
||||
radarr:
|
||||
rule: "Host(`radarr.hobbs.farm`)"
|
||||
entryPoints:
|
||||
- websecure
|
||||
service: radarr
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
|
||||
services:
|
||||
jellyfin:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://192.168.86.192:8096"
|
||||
|
||||
sonarr:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://192.168.86.192:8989"
|
||||
|
||||
radarr:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://192.168.86.192:7878"
|
||||
EOF
|
||||
}
|
||||
|
||||
# Cloudflare credentials for Let's Encrypt DNS challenge
|
||||
env {
|
||||
CF_API_EMAIL = "" # Set via Nomad variables or Vault
|
||||
CF_API_KEY = "" # Set via Nomad variables or Vault
|
||||
CF_DNS_API_TOKEN = "PWhuBvaYrh85S-iwBqQz4HFZV4c645znc8_eG7V9"
|
||||
}
|
||||
|
||||
resources {
|
||||
|
||||
Reference in New Issue
Block a user