1. Home
  2. Docs
  3. Self-hosted Server
  4. Traefik: Reverse Proxy &#...
  5. Install dan Konfigurasi Reverse Proxy dengan Traefik

Install dan Konfigurasi Reverse Proxy dengan Traefik

Untuk yang menggunakan docker-compose untuk install Traefik di Docker Container, install & renew sertifikat SSL/TLS dengan Let’s Encrypt secara otomatis tanpa expose port 80/443 ke public internet. Hanya ingin “Everything use VALID HTTPS” untuk aplikasi-aplikasi di docker container lokal kita.

Buat Directory dan File Konfigurasi

Buat struktur file dan folder untuk mapping:

./traefik
├── config
│   ├── traefik.yaml
│   ├── conf.d
|   |   └── externalservice.yaml
├── data
│   ├── cert
│   |   └── cloudflare-acme.json
└── docker-compose.yml

Sebelum deploy Traefik buat terlebih dahulu file config traefik.yaml.

Static Configuration

Yang dimaksud statik disini adalah jika kita melakukan perubahan parameter di file ini, kita harus restart traefik untuk menerapkan perubahan konfigurasi yang baru.

traefik.yaml

global:
  checkNewVersion: false
  sendAnonymousUsage: false

# --> (Optional) Change log level and format here ...
#     - level: [TRACE, DEBUG, INFO, WARN, ERROR, FATAL]
log:
 level: ERROR
# <--

# --> (Optional) Enable accesslog here ...
# accesslog: {}
# <--

# --> (Optional) Enable API and Dashboard here, don't do in production
api:
   dashboard: true
   insecure: true
# <--

# -- EntryPoints...
entryPoints:
  web:
    address: :80
    # --> (Optional) Redirect all HTTP to HTTPS
    http:
      redirections:
        entryPoint:
          to: websecure
          scheme: https
    # <--
  websecure:
    address: :443

# -- CertificateResolver...
certificatesResolvers:
  cloudflare:
    acme:
      email: [email protected]  # <-- Change this to your email
      storage: /var/traefik/certs/cloudflare-acme.json
      # caServer: https://acme-v02.api.letsencrypt.org/directory # production (default)
      caServer: https://acme-staging-v02.api.letsencrypt.org/directory # staging
      dnsChallenge:
        provider: cloudflare 
        resolvers:
          - "1.1.1.1:53"
          - "1.0.0.1:53"

# --> (Optional) Disable TLS Cert verification check
serversTransport:
  insecureSkipVerify: true
# <--

providers:
  docker:
    exposedByDefault: false 
  file:
    directory: /etc/traefik
    watch: true

Di contoh ini saya menggunakan provider Cloudflare untuk generate Trusted SSL/TLS certificates menggunakan DNS-Challenge.

Dynamic Configuration

Kalo file ini jika menerapkan perubahan konfigurasi yang baru, kita ga perlu restart traefik. File ini kita buat untuk setting routing service host manual, misalnya saya ingin mengarahkan domain “proxmox.homelab.modalsemangat.com” ke https://10.67.78.100:8006.

externalservice.yaml

http:
  # -- Router Configuration...
  routers:
    proxmox:
      rule: "Host(`proxmox.homelab.modalsemangat.com`)"
      tls:
        certResolver: cloudflare 
      service: proxmox
      entryPoints:
        - websecure

  # -- Service Configuration...
  services:
    proxmox: 
      loadBalancer:
        servers:
          - url: "https://10.67.78.100:8006" 

Kita tinggal sesuaikan dengan infrastruktur micro-services apps yang ada.

File Storage SSL/TLS Certificates

Traefik membutuhkan file bernama cloudflare-acme.json untuk menyimpan informasi SSL certificate. Jadi, kita buat file ini dan ganti permission yang sesuai.

touch /mnt/docker/traefik/data/certs/cloudflare-acme.json; chmod 600 /mnt/docker/traefik/data/certs/cloudflare-acme.json

DNS API Token Cloudflare

Untuk mendapatkan token DNS API Cloudflare, Anda bisa lihat di contoh artikel Cara Mendapatkan DNS API Token Cloudflare.

Docker Compose

Sekarang kita buat file docker-compose.yml menggunakan editor favorit. Jika lebih suka membuat docker stack, bisa dengan portainer atau dockge.

---
services:
  proxy:
    image: traefik:v3.2.1
    container_name: traefik
    ports:
      - 80:80
      - 443:443
      # - 8080:8080 # --> (Optional) Enable Dashboard
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /mnt/docker/traefik/config/traefik.yaml:/etc/traefik/traefik.yaml:ro
      - /mnt/docker/traefik/data/certs/:/var/traefik/certs/:rw
      - /mnt/docker/traefik/config/conf.d/:/etc/traefik/conf.d/:ro
    environment:
      - TZ=Asia/Jakarta
      - CF_DNS_API_TOKEN=${CF_DNS_API} # <-- Cloudflare DNS API Token
    networks:
      - backend
    restart: unless-stopped
    labels:
        - traefik.enable=true 
        - traefik.http.routers.dashboard.rule=Host(`traefik.homelab.modalsemangat.com`) 
        - traefik.http.routers.dashboard.entryPoints=websecure 
        - traefik.http.routers.dashboard.tls=true
        - traefik.http.routers.dashboard.tls.certresolver=cloudflare
        - traefik.http.routers.dashboard.service=api@internal
          
networks:
  backend:
    external: true

Setelah kita sudah mempersiapkan file-file konfigurasi, jalankan perintah:

docker-compose up -d

Deploy Contoh Container

---
services:
  whoami:
    image: traefik/whoami
    networks:
      - backend
    labels:
      - traefik.enable=true 
      - traefik.http.routers.whoami.rule=Host(`whoami.homelab.modalsemangat.com`) 
      - traefik.http.routers.whoami.entryPoints=websecure
      - traefik.http.routers.whoami.tls=true
      - traefik.http.routers.whoami.tls.certresolver=cloudflare
      - traefik.http.services.whoami.loadbalancer.server.port=80
      
networks:
  backend:
    external: true
Tags ,

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *