Traefik¶
Traefik is used as my reverse proxy.
Installation¶
Default Port: 80
Config¶
All internal URLs use an l sub domain so that only one certificate is needed from letsencrypt. E.g. https://app.l.nicholaswilde.io/
Note
Paths in config file should be absolute.
App¶
Tip
Use the staging value of caServer during testing.
homelab/pve/traefik/traefik.yaml
|
homelab/pve/traefik/conf.d/config.yaml
---
http:
routers:
traefik:
entrypoints:
- web
rule: Host(`traefik.l.nicholaswilde.io`)
middlewares: traefik-https-redirect
service: api@internal
traefik-secure:
entrypoints:
- websecure
rule: Host(`traefik.l.nicholaswilde.io`)
# middlewares: traefik-auth
tls:
certresolver: cloudflare
domains:
- main: l.nicholaswilde.io
sans:
- '*.l.nicholaswilde.io'
service: api@internal
middlewares:
# traefik-auth:
# basicAuth:
# users: ${TRAEFIK_DASHBOARD_CREDENTIALS}
traefik-https-redirect:
redirectScheme:
scheme: https
sslheader:
headers:
customRequestHeaders:
X-Forwarded-Proto: https
Service¶
Update EnvironmentFile and ExecStart to point to your homelab directories.
/etc/systemd/system/traefik.service
cat > /etc/systemd/system/traefik.service <<EOF
[Unit]
Description=Traefik is an open-source Edge Router that makes publishing your services a fun and easy experience
[Service]
Type=notify
EnvironmentFile=/root/git/nicholaswilde/homelab/pve/traefik/.env
ExecStart=/usr/local/bin/traefik --configFile=/root/git/nicholaswilde/homelab/pve/traefik/traefik.yaml
Restart=on-failure
ExecReload=/bin/kill -USR1 $MAINPID
[Install]
WantedBy=multi-user.target
EOF
[Unit]
Description=Traefik is an open-source Edge Router that makes publishing your services a fun and easy experience
[Service]
Type=notify
EnvironmentFile=/root/git/nicholaswilde/homelab/pve/traefik/.env
ExecStart=/usr/local/bin/traefik --configFile=/root/git/nicholaswilde/homelab/pve/traefik/traefik.yaml
Restart=on-failure
ExecReload=/bin/kill -USR1 $MAINPID
[Install]
WantedBy=multi-user.target
Enable service
Usage¶
-
Create new config for app
-
Edit config file.
Update
http.routers.<app_name>.ruleandservices.<app_name>.loadBalancer.servers.url[0]homelab/pve/traefik/conf.d/mcp-server.yaml
--- http: #region routers routers: mcp-server: entryPoints: - "websecure" rule: "Host(`mcp-server.l.nicholaswilde.io`)" middlewares: - default-headers@file - https-redirectscheme@file tls: {} service: mcp-server #endregion #region services services: mcp-server: loadBalancer: servers: - url: "http://192.168.2.177:8080" passHostHeader: true #endregion middlewares: https-redirectscheme: redirectScheme: scheme: https permanent: true default-headers: headers: frameDeny: true browserXssFilter: true contentTypeNosniff: true forceSTSHeader: true stsIncludeSubdomains: true stsPreload: true stsSeconds: 15552000 customFrameOptionsValue: SAMEORIGIN customRequestHeaders: X-Forwarded-Proto: https default-whitelist: ipAllowList: sourceRange: - "10.0.0.0/8" - "192.168.0.0/16" - "172.16.0.0/12" secured: chain: middlewares: - default-whitelist - default-headers -
Restart traefik
- Test URL in browser.
-
Comment out middleware in config file.
homelab/pve/traefik/conf.d/mcp-server.yaml
--- http: #region routers routers: mcp-server: entryPoints: - "websecure" rule: "Host(`mcp-server.l.nicholaswilde.io`)" middlewares: - default-headers@file - https-redirectscheme@file tls: {} service: mcp-server #endregion #region services services: mcp-server: loadBalancer: servers: - url: "http://192.168.2.177:8080" passHostHeader: true #endregion # middlewares: # https-redirectscheme: # redirectScheme: # scheme: https # permanent: true # default-headers: # headers: # frameDeny: true # browserXssFilter: true # contentTypeNosniff: true # forceSTSHeader: true # stsIncludeSubdomains: true # stsPreload: true # stsSeconds: 15552000 # customFrameOptionsValue: SAMEORIGIN # customRequestHeaders: # X-Forwarded-Proto: https # # default-whitelist: # ipAllowList: # sourceRange: # - "10.0.0.0/8" # - "192.168.0.0/16" # - "172.16.0.0/12" # # secured: # chain: # middlewares: # - default-whitelist # - default-headers -
Restart traefik
-
Test URL
-
Remove middleware or uncomment middleware
homelab/pve/traefik/conf.d/mcp-server.yaml
--- http: #region routers routers: mcp-server: entryPoints: - "websecure" rule: "Host(`mcp-server.l.nicholaswilde.io`)" middlewares: - default-headers@file - https-redirectscheme@file tls: {} service: mcp-server #endregion #region services services: mcp-server: loadBalancer: servers: - url: "http://192.168.2.177:8080" passHostHeader: true #endregion -
Restart traefik
Logs¶
Follow¶
Task List¶
task: Available tasks for this project:
* decrypt: Decrypt sensitive configuration files using SOPS.
* encrypt: Encrypt sensitive configuration files using SOPS.
* export: Export the task list
* new: Create a new config file
* restart: Restart Traefik
* status: View the Traefik service status
* stop: Stop the Traefik service
* update: Update running containers
* watch: Watch the log file