Cara Setup Cloudflare DNS Challenge in Traefik

Cara Setup Cloudflare DNS Challenge in Traefik

Traefik adalah reverse proxy yang sangat populer di kalangan pengguna Docker. Traefik memungkinkan pengguna untuk mengatur routing dan load balancing dengan mudah di dalam lingkungan Docker. Pada artikel ini, kita akan setup Traefik di Docker dan menggunakan Cloudflare sebagai DNS challenge provider.

Install Docker

Sebelum kita memulai, pastikan kita sudah menginstal Docker terlebih dahulu. Untuk menginstal Docker pada sistem operasi Linux, kita bisa mengikuti panduan resmi dari Docker.

Menyiapkan Cloudflare

Cloudflare adalah layanan DNS yang populer dan menyediakan API untuk mengatur DNS records. Kita akan menggunakan Cloudflare sebagai provider DNS challenge untuk mengkonfigurasi LetsEncrypt. Setelah kita mendaftar ke Cloudflare, kita perlu menambahkan domain yang akan digunakan sebagai hostname pada Traefik. Kita juga perlu memperbarui NS records domain agar mengarah ke nameserver Cloudflare.

Berikut contoh konfigurasi di DNS Cloudflare:

*.example.com.      1   IN  A   ip4-server
example.com.        1   IN  A   ip4-server

Jangan lupa proxy statusnya di set ke Proxied.

Menyiapkan Konfigurasi Traefik

Setelah kita menginstal Docker, kita bisa membuat file konfigurasi Traefik. File ini akan menentukan bagaimana Traefik akan dijalankan di lingkungan Docker.

Berikut adalah contoh file konfigurasi Traefik:

# docker-compose.yml

version: "3"

services:
  traefik:
    image: traefik:v2.9
    environment:
      # email akun cloudflare anda
      - CF_API_EMAIL=your-mail@example.com
      # api key (profile->api tokens->Global API Key) di akun cloudflare anda
      - CF_API_KEY=api-key
    ports:
      - "80:80"
      - "443:443"
    volumes:      
      - "$PWD/config:/etc/traefik:rw"
      - "/var/log/traefik:/var/log/traefik/"
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    restart: unless-stopped
    networks:
      - traefik
volumes:
  certs:
networks:
  traefik:
    external: true

Setelah itu buatlah direktori dengan nama config untuk menyimpan config traefik dan dynamic confignya. Ada 2 file akan di buat di dalamnya yaitu dynamic.yml dan traefik.yml. File dynamic.yml adalah sebuah konfigurasi dinamis yang tujuannya adalah sebagai konfigurasi seperti middleware, http, tcp, tls dll. Sedangkan traefik.yml adalah konfigurasi dari traefik itu sendiri.

Berikut adalah contoh file dynamic.yml:

# config/dynamic.yml
http:
  routers:
    traefik:
      entryPoints:
        - https
      rule: Host(`traefik.ryanbekhen.dev`)
      service: api@internal
Berikut adalah contoh file traefik.yml:

# config/traefik.yml

global:
  checkNewVersion: true
  sendAnonymousUsage: true

serversTransport:
  insecureSkipVerify: true

api: {}

log:
  level: INFO
  filePath: /var/log/traefik/log.log

accessLog:
  filePath: /var/log/traefik/access.log
  bufferingSize: 100

providers:
  providersThrottleDuration: 2s
  docker:
    watch: true
    network: traefik
    exposedByDefault: false
    defaultRule: "Host(`{{ index .Labels \"com.docker.compose.service\"}}.example.com`)"
  file:
    filename: /etc/traefik/dynamic.yml
    watch: true
entryPoints:
  http:
    forwardedHeaders:
      # Range IP dari Cloudflare
      trustedIPs:
        - 173.245.48.0/20
        - 103.21.244.0/22
        - 103.22.200.0/22
        - 103.31.4.0/22
        - 141.101.64.0/18
        - 108.162.192.0/18
        - 190.93.240.0/20
        - 188.114.96.0/20
        - 197.234.240.0/22
        - 198.41.128.0/17
        - 162.158.0.0/15
        - 104.16.0.0/13
        - 104.24.0.0/14
        - 172.64.0.0/13
        - 131.0.72.0/22
        - 2400:cb00::/32
        - 2606:4700::/32
        - 2803:f800::/32
        - 2405:b500::/32
        - 2405:8100::/32
        - 2a06:98c0::/29
        - 2c0f:f248::/32
    address: ":80"
  https:
    address: ":443"
    forwardedHeaders:
      # Range IP dari Cloudflare
      trustedIPs:
        - 10.0.0.0/24
        - 173.245.48.0/20
        - 103.21.244.0/22
        - 103.22.200.0/22
        - 103.31.4.0/22
        - 141.101.64.0/18
        - 108.162.192.0/18
        - 190.93.240.0/20
        - 188.114.96.0/20
        - 197.234.240.0/22
        - 198.41.128.0/17
        - 162.158.0.0/15
        - 104.16.0.0/13
        - 104.24.0.0/14
        - 172.64.0.0/13
        - 131.0.72.0/22
        - 2400:cb00::/32
        - 2606:4700::/32
        - 2803:f800::/32
        - 2405:b500::/32
        - 2405:8100::/32
        - 2a06:98c0::/29
        - 2c0f:f248::/32
    http:
      tls:
        certResolver: cf
        domains:
          - main: example.com
            sans:
              - '*.example.com'
certificatesResolvers:
  cf:
    acme:
      email: your-mail@example.com
      storage: /etc/traefik/certs/acme.json
      dnsChallenge:
        provider: cloudflare
        resolvers:
          - "1.1.1.1:53"
          - "1.0.0.1:53"

Sebenarnya dengan konfigurasi di atas kita tidak perlu ribet untuk mengubah banyak, jadi bisa langsung menggunakannya.

Sebelum lanjut ke langkah selanjutnya silahkan ubah di file-file konfigurasi tersebut seperti your-mail@example.com dan example.com kemudian untuk environment CF_API_EMAIL dan CF_API_KEY pada docker-compose.yml sesuai dengan email, domain dan akun Cloudflare anda.

Menjalankan Traefik

Sebelum menjalankannya jalankan perintah berikut jika di docker anda belum memiliki network traefik buat dengan perintah berikut:

docker network create traefik

Setelah konfigurasi Traefik dan membuat network traefik sudah selesai, selanjutnya kita bisa menjalankan Traefik di dalam lingkungan Docker. Untuk menjalankan Traefik, kita cukup menggunakan perintah docker-compose up -d pada direktori yang berisi file docker-compose.yml.

Setelah Traefik berhasil dijalankan, kita bisa mengakses panel dashboard Traefik melalui browser dengan membuka alamat https://traefik.example.com. Pada panel dashboard Traefik, kita bisa melihat konfigurasi router dan service yang sudah diatur oleh Traefik.

Menyiapkan Konfigurasi Pertama Untuk Aplikasi

Berikut adalah beberapa contoh untuk konfigurasi docker-compose.yml jika aplikasi anda ingin berjalan di balik Traefik:

# docker-compose.yml
version: "3"

services:
  whoami:
    image: traefik/whoami
    labels:
      - traefik.enable=true
      # nama-router di ganti dengan nama service jika ingin lebih mudah
      - traefik.http.routers.nama-router.entryPoints=https
    networks:
      - traefik
networks:
  traefik:
    external: true

Konfigurasi di atas saat di jalankan, Traefik secara otomatis membuat subdomain dengan nama servicenya, karena disini nama servicenya adalah whoami maka alamatnya akan menjadi https://whoami.example.com. Kita tidak perlu mendifinisikan port pada docker-compose.yml karena Traefik akan secara otomatis membaca port yang di expose yang penting aplikasi kita dalam satu network dengan Traefik.

Konfigurasi di atas secara otomatis membuat subdomain, bagaimana jika ingin membuatnya sendiri? Berikut adalah contoh konfigurasinya:

# docker-compose.yml
version: "3"

services:
  whoami:
    image: traefik/whoami
    labels:
      - traefik.enable=true
      - traefik.http.routers.nama-router.rule=Host(`example.com`) || Host(`www.example.com`)
      - traefik.http.routers.nama-router.entryPoints=https
      # nama-service samakan saja dengan nama router jika ingin lebih mudah dan
      # atur portnya ke port container yang ingin di expose ke public
      - traefik.http.services.nama-service.loadbalancer.server.port=80
    networks:
      - traefik
networks:
  traefik:
    external: true

Setelah itu, cukup dengan menjalankan perintah docker-compose up -d untuk menjalankannya dan silahkan buka whoami.example.com atau sesuai dengan domain yang anda inginkan, dengan catatan domain anda sudah didaftarkan ke cloudflare. Untuk melihat Grade dari domain anda klik disini, jika anda mendapatkan Grade B atau C dan ingin meningkatkannya ke A atau A+, anda bisa melakukannya di Cloudflare anda sendiri seperti di SSL/TLS, Security, Network dll.

Kesimpulan

Dengan menggunakan Traefik dan Cloudflare, pengguna dapat mengatur routing, load balancing dengan mudah di lingkungan Docker serta memastikan situs terlindungi dengan sertifikat SSL yang valid dan IP Server anda bisa akan tersembunyi karena berjalan di balik Traefik. Artikel ini diharapkan dapat membantu anda dalam konfigurasi Traefik di lingkungan Docker.


Jangan lupa di share dan silahkan mencobanya yah!! Terima kasih.