Tutorial
Traefik v3: Reverse Proxy Modern untuk Docker Container
Baca juga
π Baca juga
Traefik adalah reverse proxy modern yang dirancang khusus untuk containerized environments. Fitur unggulannya: auto-discovery β Traefik otomatis mendeteksi container baru dan membuat route tanpa konfigurasi manual. Combined dengan auto-HTTPS via Let's Encrypt, Traefik menghilangkan semua manual work dari reverse proxy management.
## Mengapa Traefik?
**Auto-Discovery.** Ketika kamu startδΈδΈͺζ°ηDocker container dengan label yang benar, Traefik otomatis membuat route untuk container tersebut. Tidak perlu reload config atau restart service.
**Auto-HTTPS.** Traefik terintegrasi langsung dengan Let's Encrypt. Certificate dikeluarkan dan diperbarui otomatis untuk semua domain yang terkonfigurasi.
**Docker Provider.** Traefik berbicara langsung dengan Docker API. Label di container menjadi konfigurasi Traefik β satu sumber kebenaran.
**Dashboard Real-time.** Web dashboard yang menampilkan semua routes, services, middlewares, dan certificates secara real-time.
## Arsitektur
```
[Internet] --> [Traefik :80/:443] --> [container-app :3000]
--> [container-api :8080]
--> [container-admin :8081]
```
Traefik menangani semua traffic masuk dan routing berdasarkan rules.
## Install Traefik dengan Docker
### 1. Buat Docker Network
```bash
docker network create traefik
```
### 2. Buat docker-compose.yml
```yaml
version: "3.8"
services:
traefik:
image: traefik:v3.0
container_name: traefik
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik.yml:/etc/traefik/traefik.yml:ro
- traefik-certs:/certs
networks:
- traefik
labels:
- "traefik.enable=true"
# Dashboard
- "traefik.http.routers.traefik-dashboard.rule=Host(`traefik.yourdomain.com`)"
- "traefik.http.routers.traefik-dashboard.service=api@internal"
- "traefik.http.routers.traefik-dashboard.tls.certresolver=letsencrypt"
environment:
- TZ=Asia/Jakarta
networks:
traefik:
external: true
volumes:
traefik-certs:
```
### 3. Static Config (traefik.yml)
```yaml
# traefik.yml
api:
dashboard: true
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
websecure:
address: ":443"
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
network: traefik
certificatesResolvers:
letsencrypt:
acme:
email: [email protected]
storage: /certs/acme.json
httpChallenge:
entryPoint: web
```
### 4. Jalankan
```bash
docker compose up -d
```
## Deploy App dengan Traefik
### Contoh: Deploy Web App
```yaml
# app/docker-compose.yml
version: "3.8"
services:
webapp:
image: nginx:alpine
restart: unless-stopped
networks:
- traefik
labels:
- "traefik.enable=true"
- "traefik.http.routers.webapp.rule=Host(`app.yourdomain.com`)"
- "traefik.http.routers.webapp.tls.certresolver=letsencrypt"
- "traefik.http.services.webapp.loadbalancer.server.port=80"
# Rate limiting
- "traefik.http.middlewares.rate-limit.ratelimit.average=100"
- "traefik.http.middlewares.rate-limit.ratelimit.burst=50"
- "traefik.http.routers.webapp.middlewares=rate-limit"
networks:
traefik:
external: true
```
Cukup jalankan `docker compose up -d` dan Traefik otomatis:
1. Mendeteksi container baru
2. Membuat route untuk `app.yourdomain.com`
3. Mengeluarkan SSL certificate dari Let's Encrypt
4. Mulai menerima traffic
### Contoh: Deploy API
```yaml
api:
build: ./api
restart: unless-stopped
networks:
- traefik
labels:
- "traefik.enable=true"
- "traefik.http.routers.api.rule=Host(`api.yourdomain.com`)"
- "traefik.http.routers.api.tls.certresolver=letsencrypt"
- "traefik.http.services.api.loadbalancer.server.port=3000"
# Basic Auth
- "traefik.http.middlewares.api-auth.basicauth.users=user:password"
- "traefik.http.routers.api.middlewares=api-auth"
```
## Middlewares
Traefik mendukung berbagai middleware untuk memodifikasi traffic:
### Rate Limiting
```yaml
labels:
- "traefik.http.middlewares.my-ratelimit.ratelimit.average=100"
- "traefik.http.middlewares.my-ratelimit.ratelimit.burst=50"
- "traefik.http.middlewares.my-ratelimit.ratelimit.period=1s"
```
### Headers
```yaml
labels:
- "traefik.http.middlewares.my-headers.headers.stsSeconds=31536000"
- "traefik.http.middlewares.my-headers.headers.stsIncludeSubdomains=true"
- "traefik.http.middlewares.my-headers.headers.forceSTSHeader=true"
- "traefik.http.middlewares.my-headers.headers.browserXssFilter=true"
- "traefik.http.middlewares.my-headers.headers.contentTypeNosniff=true"
```
### IP Whitelist
```yaml
labels:
- "traefik.http.middlewares.admin-ip.ipwhitelist.sourcerange=192.168.1.0/24"
- "traefik.http.routers.admin.middlewares=admin-ip"
```
### Redirect
```yaml
labels:
- "traefik.http.middlewares.redirect-www.redirectRegex.regex=^https://www\.(.*)"
- "traefik.http.middlewares.redirect-www.redirectRegex.replacement=https://$$1"
- "traefik.http.middlewares.redirect-www.redirectRegex.permanent=true"
```
## Traefik vs Caddy vs Nginx
| Fitur | Traefik | Caddy | Nginx |
|-------|---------|-------|-------|
| Auto-Discovery | β
Native | β Manual | β Manual |
| Auto-HTTPS | β
| β
| β (certbot) |
| Docker Integration | β
Native | β | β (swag/nginx-proxy) |
| Dashboard | β
| β | β (3rd party) |
| Config Style | Labels | Caddyfile | nginx.conf |
| Performance | Excellent | Excellent | Excellent |
| Learning Curve | Medium | Low | High |
## Monitoring
Traefik menyediakan metrics untuk Prometheus:
```yaml
# traefik.yml
metrics:
prometheus:
addEntryPointsLabels: true
addRoutersLabels: true
addServicesLabels: true
buckets:
- 0.1
- 0.3
- 1.2
- 5.0
```
## Troubleshooting
**Container tidak ter-deteksi?**
- Cek label: `traefik.enable=true`
- Cek network: container harus di network yang sama dengan Traefik
- Cek logs: `docker logs traefik`
**HTTPS tidak jalan?**
- Pastikan port 80 dan 443 terbuka
- Pastikan DNS sudah pointing ke IP server
- Cek Let's Encrypt logs di dashboard
**502 Bad Gateway?**
- Cek port container yang benar di label
- Cek apakah container running: `docker ps`
- Cek Traefik logs untuk detail error
Traefik adalah pilihan terbaik untuk Docker-based infrastructure. Auto-discovery dan auto-HTTPS menghilangkan semua manual work dari reverse proxy management.