Panduan Lengkap Deploy Traefik + Nginx dengan HTTPS dan Redirect pada Domain
Bagi DevOps engineer atau sysadmin yang ingin membangun infrastruktur web modern, Traefik adalah salah satu solusi reverse proxy terbaik. Traefik menawarkan fitur otomatisasi SSL dari Letβs Encrypt, routing berbasis label, serta dukungan middleware untuk redirect, autentikasi, dan monitoring. πβ‘
Dalam artikel ini, kita akan membuat setup lengkap: Traefik + Nginx + domain syslab.my.id, dengan fitur:
- β HTTPS otomatis dengan sertifikat Letβs Encrypt
- π Redirect dari HTTP β HTTPS
- π Redirect dari non-www (
syslab.my.id) β www (www.syslab.my.id) - π Dashboard Traefik dengan proteksi BasicAuth
- π Struktur folder rapi, mudah dikelola
1. Persiapan Awal βοΈ
Sebelum mulai, pastikan:
- Server (VPS / bare-metal) dengan Docker + Docker Compose sudah terinstall.
- Domain
syslab.my.idsudah diarahkan ke IP server (via DNS A record). - Firewall sudah membuka port 80 (HTTP) dan 443 (HTTPS).
Jika menggunakan Red Hat / CentOS / AlmaLinux, aktifkan port dengan:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
2. Struktur Folder π
Agar terstruktur rapi, kita buat folder terpisah untuk Traefik dan aplikasi Nginx.
mkdir -p /home/andika/traefik/log
mkdir -p /home/andika/traefik/letsencrypt
mkdir -p /home/andika/nginx-app/html
Tambahkan file HTML sederhana:
echo "<h1>Halo, ini Nginx di belakang Traefik!</h1>" > /home/andika/nginx-app/html/index.html
3. Konfigurasi Traefik π‘οΈ
Masuk ke folder Traefik:
cd /home/andika/traefik
Buat file .htpasswd untuk BasicAuth (username masdika, password Masdika11):
htpasswd -nb masdika Masdika11 > .htpasswd
Buat file docker-compose.yml:
services:
traefik:
image: traefik:v3.1
container_name: traefik
command:
- "--api.dashboard=true"
- "--api.insecure=false"
- "--providers.docker=true"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.myresolver.acme.httpchallenge=true"
- "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
- "--certificatesresolvers.myresolver.acme.email=me@syslab.my.id"
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
# Logging & Monitoring
- "--log.level=INFO"
- "--accesslog=true"
- "--accesslog.filePath=/var/log/traefik/access.log"
- "--metrics.prometheus=true"
ports:
- "80:80"
- "443:443"
volumes:
- "./letsencrypt:/letsencrypt"
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./.htpasswd:/etc/traefik/.htpasswd:ro"
- "./log:/var/log/traefik"
labels:
- "traefik.enable=true"
- "traefik.http.routers.dashboard.rule=Host(`traefik.syslab.my.id`)"
- "traefik.http.routers.dashboard.entrypoints=websecure"
- "traefik.http.routers.dashboard.tls.certresolver=myresolver"
- "traefik.http.routers.dashboard.service=api@internal"
- "traefik.http.middlewares.auth.basicauth.usersfile=/etc/traefik/.htpasswd"
- "traefik.http.routers.dashboard.middlewares=auth"
networks:
- web
restart: always
networks:
web:
external: true
4. Konfigurasi Nginx π
Masuk ke folder Nginx:
cd /home/andika/nginx-app
Buat file docker-compose.yml:
services:
nginx:
image: nginx:alpine
container_name: nginx-app
volumes:
- ./html:/usr/share/nginx/html:ro
labels:
- "traefik.enable=true"
# Router utama untuk www.syslab.my.id
- "traefik.http.routers.nginx.rule=Host(`www.syslab.my.id`)"
- "traefik.http.routers.nginx.entrypoints=websecure"
- "traefik.http.routers.nginx.tls.certresolver=myresolver"
# Redirect non-www ke www
- "traefik.http.routers.redirect.rule=Host(`syslab.my.id`)">
- "traefik.http.routers.redirect.entrypoints=websecure"
- "traefik.http.routers.redirect.tls.certresolver=myresolver"
- "traefik.http.routers.redirect.middlewares=to-www"
# Middleware redirect non-www β www
- "traefik.http.middlewares.to-www.redirectregex.regex=^https://syslab\\.my\\.id/(.*)"
- "traefik.http.middlewares.to-www.redirectregex.replacement=https://www.syslab.my.id/$$1"
- "traefik.http.middlewares.to-www.redirectregex.permanent=true"
# Redirect HTTP β HTTPS
- "traefik.http.middlewares.https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.nginx-http.rule=Host(`www.syslab.my.id`)"
- "traefik.http.routers.nginx-http.entrypoints=web"
- "traefik.http.routers.nginx-http.middlewares=https-redirect"
- "traefik.http.routers.redirect-http.rule=Host(`syslab.my.id`)"
- "traefik.http.routers.redirect-http.entrypoints=web"
- "traefik.http.routers.redirect-http.middlewares=https-redirect"
networks:
- web
restart: always
networks:
web:
external: true
5. Deploy Aplikasi π
Buat network web:
docker network create web
Jalankan Traefik:
cd /home/andika/traefik
docker compose up -d
Jalankan Nginx:
cd /home/andika/nginx-app
docker compose up -d
6. Uji Hasil π
http://syslab.my.idβ redirect βhttps://www.syslab.my.idhttp://www.syslab.my.idβ redirect βhttps://www.syslab.my.idhttps://syslab.my.idβ redirect βhttps://www.syslab.my.idhttps://www.syslab.my.idβ tampil konten HTML π

Untuk dashboard:
https://traefik.syslab.my.idβ login dengan masdika / Masdika11 π

Kesimpulan π
Dengan konfigurasi ini, kita sudah berhasil:
- Men deploy Traefik sebagai reverse proxy π
- Menjalankan Nginx sebagai aplikasi backend π
- Mengaktifkan SSL otomatis dari Letβs Encrypt π
- Melakukan redirect HTTP β HTTPS π
- Mengarahkan trafik non-www β www π
- Mengamankan dashboard dengan BasicAuth π
Konsep ini sangat fleksibel. Nanti, kamu bisa menambahkan service lain (WordPress, Flask API, Node.js, dsb.) dengan mudah hanya dengan menambah label domain di docker-compose.yml. Traefik akan otomatis mengurus routing dan SSL, sehingga manajemen aplikasi jadi lebih sederhana dan aman. ππ₯
Panduan ini menjelaskan instalasi Jenkins production menggunakan Docker + Traefik (SSL otomatis via DNS Challenge Cloudflare), dengan fokus utama pada…
Dalam dunia Cloud Computing dan DevOps, tiga istilah yang paling sering kita dengar adalah Virtual Machine (VM), Container, dan Pod….