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.