Berapa kali kamu harus ubah config Nginx manual dan restart service cuma gara-gara nambah satu container baru? Kalau jumlah aplikasi di VPS kamu udah lebih dari 3-4 buah, cara manual kayak gitu lama-lama jadi beban tersendiri. Di artikel ini kita bakal setup Traefik sebagai reverse proxy buat semua container Docker kamu, lengkap sama SSL otomatis dari Let’s Encrypt, tanpa perlu sentuh config manual tiap kali deploy service baru.
Apa Bedanya Traefik Dibanding Reverse Proxy Manual
Traefik adalah reverse proxy modern yang didesain khusus buat lingkungan container. Bedanya sama Nginx konvensional, Traefik “mendengarkan” Docker socket secara langsung dan otomatis update rule routing begitu ada container baru yang jalan atau mati, tanpa perlu restart service apa pun. Semua konfigurasi routing cukup ditulis lewat label di file docker-compose.yml masing-masing service, jadi nggak ada file config terpisah yang harus disinkronkan manual.
Kalau kamu sebelumnya pernah pakai Nginx UI buat kelola reverse proxy lewat dashboard, Traefik ini pendekatannya beda: semuanya declarative lewat label, cocok banget buat yang stack-nya udah penuh docker-compose dan sering nambah-bongkar container.
Persiapan Sebelum Setup Traefik
Sebelum mulai, pastikan beberapa hal ini udah siap di VPS kamu. Sebagian poin ini kelihatan sepele, tapi paling sering jadi penyebab instalasi gagal di percobaan pertama, terutama soal port yang masih dipakai service lama.
- Docker dan Docker Compose plugin udah terinstall dan jalan normal.
- Domain yang A record-nya udah diarahkan ke IP VPS, minimal satu subdomain buat dashboard Traefik sendiri.
- Port 80 dan 443 nggak lagi dipakai service lain (matikan dulu Nginx atau Apache bawaan kalau ada).
- Email valid buat didaftarkan ke Let’s Encrypt, dipakai buat notifikasi perpanjangan sertifikat.
Langkah Setup Traefik dengan Docker Compose
Bikin direktori kerja terpisah dulu, biar volume dan config Traefik nggak campur sama project lain.
mkdir -p ~/traefik && cd ~/traefik
touch acme.json && chmod 600 acme.json
File acme.json ini yang bakal nyimpen sertifikat Let’s Encrypt, jadi permission-nya wajib 600 biar nggak ada proses lain yang bisa baca isinya. Setelah itu, bikin docker-compose.yml dengan isi berikut:
services:
traefik:
image: traefik:v3.2
command:
- "--api.dashboard=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.myresolver.acme.email=kamu@domainmu.com"
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
- "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./acme.json:/letsencrypt/acme.json
restart: unless-stopped
Baris exposedbydefault=false penting banget: ini mastiin cuma container yang secara eksplisit dikasih label traefik.enable=true yang bakal ke-expose lewat Traefik, jadi container lain yang nggak perlu diakses publik tetap aman tersembunyi.
Jalankan stack-nya dengan:
docker compose up -d
Menghubungkan Aplikasi ke Traefik Lewat Label
Setelah Traefik jalan, kamu tinggal tambahin label di service lain yang mau diarahkan lewat reverse proxy ini. Misalnya ada aplikasi web sederhana yang mau diakses lewat app.domainmu.com:
services:
myapp:
image: myapp:latest
labels:
- "traefik.enable=true"
- "traefik.http.routers.myapp.rule=Host(`app.domainmu.com`)"
- "traefik.http.routers.myapp.entrypoints=websecure"
- "traefik.http.routers.myapp.tls.certresolver=myresolver"
restart: unless-stopped
Pastikan container ini terhubung ke network yang sama dengan Traefik supaya bisa saling ngobrol. Begitu container jalan, Traefik otomatis deteksi label ini, bikin rule routing baru, lalu minta sertifikat SSL ke Let’s Encrypt tanpa kamu perlu restart Traefik sama sekali.
Amankan Dashboard Setelah Setup Traefik
Dashboard bawaan Traefik enak buat lihat status routing, tapi jangan sampai lupa diamankan kalau mau diakses dari internet. Cara paling gampang, tambahkan middleware Basic Auth khusus buat router dashboard, dan jangan biarkan port dashboard (biasanya 8080) kebuka bebas ke publik tanpa proteksi tambahan. Kalau memang cuma kamu sendiri yang perlu akses, lebih aman lagi kalau dashboard ini cuma bisa diakses lewat VPN atau IP tertentu, mirip prinsip yang sama kayak amankan port administratif lainnya di server.
Troubleshooting Umum Setelah Setup Traefik
Kalau sertifikat SSL nggak mau keluar, cek dulu apakah domain udah benar-benar resolve ke IP VPS. Let’s Encrypt bakal gagal validasi HTTP challenge kalau DNS belum propagasi sempurna, atau kalau port 80 kebetulan masih diblok firewall. Cek log Traefik dengan docker compose logs -f traefik buat lihat detail error ACME-nya.
Kalau service nggak muncul di dashboard padahal sudah dikasih label, biasanya penyebabnya dua: container belum satu network dengan Traefik, atau label traefik.enable=true kelewat ditulis. Cek juga permission file acme.json, karena kalau permission-nya lebih longgar dari 600, Traefik bakal menolak nulis sertifikat ke file itu demi keamanan. Satu lagi yang sering kelewat: pastikan aturan Host di label routing memakai backtick, bukan tanda kutip biasa, karena format inilah yang dikenali Traefik sebagai ekspresi matching domain.
Sampai sini, kamu udah selesai setup Traefik sebagai reverse proxy otomatis buat semua container Docker di VPS, lengkap dengan SSL yang perpanjang sendiri tanpa campur tangan manual. Kalau kamu sebelumnya udah terlanjur pakai reverse proxy berbasis dashboard seperti di panduan install Nginx UI lewat Docker Compose, nggak masalah kok tetap pakai itu untuk stack yang lebih sederhana, dan pindah ke Traefik pas jumlah container kamu mulai banyak dan sering gonta-ganti. Buat opsi konfigurasi yang lebih lengkap seperti metrics Prometheus atau middleware lanjutan, langsung aja cek dokumentasi resmi Traefik untuk Docker.
























