Traefik
Install (static binary) + systemd
# get latest version URL from https://github.com/traefik/traefik/releases
export VER=v3.5.2
curl -L "https://github.com/traefik/traefik/releases/download/${VER}/traefik_${VER#v}_linux_amd64.tar.gz" \
  -o /tmp/traefik.tgz
sudo tar -C /usr/local/bin -xzf /tmp/traefik.tgz traefik
sudo useradd -r -s /usr/sbin/nologin traefik || true
sudo mkdir -p /etc/traefik /var/lib/traefik
sudo chown -R traefik:traefik /etc/traefik /var/lib/traefik
Create /etc/systemd/system/traefik.service:
[Unit]
Description=Traefik Proxy
After=network-online.target
Wants=network-online.target
[Service]
User=traefik
Group=traefik
ExecStart=/usr/local/bin/traefik --configFile=/etc/traefik/traefik.yml
Restart=always
AmbientCapabilities=CAP_NET_BIND_SERVICE
LimitNOFILE=1048576
[Install]
WantedBy=multi-user.target
Enable it:
sudo systemctl daemon-reload
sudo systemctl enable --now traefik
(You can also install via packages/Helm/K8s; we’re using a local binary here.)
Static config: entrypoints + ACME
Create /etc/traefik/traefik.yml:
entryPoints:
  web:
    address: ":80"
  websecure:
    address: ":443"
certificatesResolvers:
  letsencrypt:
    acme:
      email: admin@example.com
      storage: /var/lib/traefik/acme.json
      httpChallenge:
        entryPoint: web
providers:
  file:
    filename: /etc/traefik/dynamic.yml
    watch: true
log:
  level: INFO
entryPoints define the ports Traefik listens on; ACME config enables Let’s Encrypt with HTTP-01 and persists certs to acme.json (create it as an empty file with chmod 600).
sudo touch /var/lib/traefik/acme.json
sudo chown traefik:traefik /var/lib/traefik/acme.json
sudo chmod 600 /var/lib/traefik/acme.json
Dynamic config: router + HTTPS redirect + service
Create /etc/traefik/dynamic.yml:
http:
  routers:
    to-myapp:
      rule: Host(`example.com`)
      entryPoints: ["websecure"]
      service: myapp
      tls:
        certResolver: letsencrypt
    redirect-web-to-websecure:
      entryPoints: ["web"]
      rule: Host(`example.com`)
      middlewares: ["https-redirect"]
      service: noop@internal
  middlewares:
    https-redirect:
      redirectScheme:
        scheme: https
        permanent: true
  services:
    myapp:
      loadBalancer:
        servers:
          - url: "http://127.0.0.1:3000"
Reload:
sudo systemctl restart traefik
journalctl -u traefik -n 100 --no-pager
Notes
- Configuration overview.
- ACME (Let’s Encrypt) configuration.