diff --git a/hosts/ps08rp/traefik/.env b/hosts/ps08rp/traefik/.env new file mode 100644 index 000000000..528a16379 --- /dev/null +++ b/hosts/ps08rp/traefik/.env @@ -0,0 +1,3 @@ +CF_API_EMAIL=alexanderlebens@gmail.com +CF_API_KEY="" +PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin diff --git a/hosts/ps08rp/traefik/docker-compose.yml b/hosts/ps08rp/traefik/docker-compose.yml new file mode 100644 index 000000000..fe8400d7f --- /dev/null +++ b/hosts/ps08rp/traefik/docker-compose.yml @@ -0,0 +1,29 @@ +services: + traefik: + command: traefik + container_name: traefik + env_file: + - .env + image: docker.io/traefik:v3.2 + labels: + traefik.docker.network: traefik + traefik.enable: true + traefik.http.routers.dashboard.entrypoints: websecure + traefik.http.routers.dashboard.rule: (Host(`traefik-ps08rp.alexlebens.net`) && (PathPrefix(`/api/`) || PathPrefix(`/dashboard/`))) + traefik.http.routers.dashboard.service: api@internal + traefik.http.routers.dashboard.tls: true + traefik.http.routers.dashboard.tls.certresolver: cloudflare + networks: + internal: null + ports: + - 80:80 + - 443:443 + privileged: true + restart: always + volumes: + - ./traefik_config:/etc/traefik + - /var/run/docker.sock:/var/run/docker.sock:ro + +networks: + internal: + name: internal diff --git a/hosts/ps08rp/traefik/traefik_config/conf/iplocal.yml b/hosts/ps08rp/traefik/traefik_config/conf/iplocal.yml new file mode 100644 index 000000000..a70c101bd --- /dev/null +++ b/hosts/ps08rp/traefik/traefik_config/conf/iplocal.yml @@ -0,0 +1,15 @@ +http: + middlewares: + ip-local: + IPAllowList: + sourceRange: + - "192.168.1.1/16" + - "172.27.0.0/16" + +tcp: + middlewares: + ip-local: + IPAllowList: + sourceRange: + - "192.168.1.1/16" + - "172.27.0.0/16" diff --git a/hosts/ps08rp/traefik/traefik_config/conf/metrics.yml b/hosts/ps08rp/traefik/traefik_config/conf/metrics.yml new file mode 100644 index 000000000..3b02e5a23 --- /dev/null +++ b/hosts/ps08rp/traefik/traefik_config/conf/metrics.yml @@ -0,0 +1,8 @@ +http: + routers: + prometheus: + rule: "(Host(`traefik-ps10rp.alexlebens.net`) && Path(`/metrics`))" + entryPoints: websecure + service: prometheus@internal + middlewares: + - "ip-local@file" diff --git a/hosts/ps08rp/traefik/traefik_config/traefik.yml b/hosts/ps08rp/traefik/traefik_config/traefik.yml new file mode 100644 index 000000000..bf702d183 --- /dev/null +++ b/hosts/ps08rp/traefik/traefik_config/traefik.yml @@ -0,0 +1,113 @@ +################################################################ +# Global +################################################################ + +global: + checkNewVersion: false + sendAnonymousUsage: false + +################################################################ +# EntryPoints +################################################################ + +entryPoints: + web: + address: :80 + http: + redirections: + entryPoint: + to: websecure + scheme: https + + websecure: + address: :443 + forwardedHeaders: + trustedIPs: + - "192.168.1.1/16" + proxyProtocol: + trustedIPs: + - "192.168.1.1/16" + http: + tls: + options: default + certResolver: cloudflare + domains: + - main: "*.alexlebens.net" + sans: + - "alexlebens.net" + middlewares: + - ip-local@file + +################################################################ +# Certificate Resolvers +################################################################ + +certificatesResolvers: + cloudflare: + acme: + email: alexanderlebens@gmail.com + storage: /etc/traefik/acme/acme.json + preferredChain: "ISRG Root X1" + dnsChallenge: + provider: cloudflare + delayBeforeCheck: "3" + resolvers: + - "1.1.1.1" + - "1.0.0.1" + +################################################################ +# Traefik logs +################################################################ + +log: + level: INFO + +################################################################ +# Access logs +################################################################ + +accessLog: {} + +################################################################ +# API and Dashboard +################################################################ + +api: + insecure: false + dashboard: true + +################################################################ +# Ping +################################################################ + +# ping: + +################################################################ +# Metrics +################################################################ + +metrics: + prometheus: + addEntryPointsLabels: true + addRoutersLabels: true + addServicesLabels: true + buckets: + - 0.1 + - 0.3 + - 1.2 + - 5.0 + entryPoint: websecure + manualRouting: true + +################################################################ +# Providers +################################################################ + +providers: + docker: + endpoint: "unix:///var/run/docker.sock" + exposedByDefault: false + + file: + directory: "/etc/traefik/conf" + watch: true