Traefik คือ Reverse Proxy ที่ออกแบบมาเพื่อ Docker โดยเฉพาะ จุดเด่นคือการตรวจจับ Container อัตโนมัติผ่าน Docker Labels ไม่ต้องเข้าหน้าเว็บ UI เลย เมื่อ Deploy Container ใหม่ Traefik จะตรวจพบและตั้งค่า Routing อัตโนมัติทันที
Traefik vs Nginx Proxy Manager
| เปรียบเทียบ | Traefik | Nginx Proxy Manager |
|---|---|---|
| การตั้งค่า | Docker Labels | Web UI |
| Auto-detect Container | ✓ อัตโนมัติ | ✗ ตั้งเอง |
| SSL | Let’s Encrypt อัตโนมัติ | Let’s Encrypt ผ่าน UI |
| ความยาก | สูงกว่า | ง่าย |
| Dashboard | มี รองรับ Read-only | มี แก้ไขได้ |
| เหมาะสำหรับ | DevOps, Microservices | ผู้เริ่มต้น, VPS |
ติดตั้ง Traefik ด้วย Docker Compose
สร้างไฟล์ docker-compose.yml สำหรับ Traefik:
version: '3.8'
services:
traefik:
image: traefik:v3.0
container_name: traefik
restart: unless-stopped
command:
- "--api.insecure=true" # Dashboard (dev only)
- "--providers.docker=true" # ตรวจจับ Docker
- "--providers.docker.exposedbydefault=false" # ไม่ Expose อัตโนมัติ
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "[email protected]"
- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
- "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
ports:
- "80:80"
- "443:443"
- "8080:8080" # Traefik Dashboard
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- traefik_letsencrypt:/letsencrypt
networks:
- proxy_network
volumes:
traefik_letsencrypt:
networks:
proxy_network:
external: true
ตั้งค่า Container ด้วย Labels
วิธีเชื่อมต่อ Traefik กับ Application Container คือการใส่ Labels ใน docker-compose.yml:
services:
wordpress:
image: wordpress:latest
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.wordpress.rule=Host(`blog.example.com`)"
- "traefik.http.routers.wordpress.entrypoints=websecure"
- "traefik.http.routers.wordpress.tls.certresolver=letsencrypt"
- "traefik.http.services.wordpress.loadbalancer.server.port=80"
networks:
- proxy_network
- internal_network
networks:
proxy_network:
external: true
internal_network:
อธิบาย Labels แต่ละอัน
| Label | ความหมาย |
|---|---|
traefik.enable=true |
สั่งให้ Traefik ตรวจจับ Container นี้ |
routers.wordpress.rule=Host(...) |
กำหนด Domain ที่ผูกกับ Container |
routers.wordpress.entrypoints=websecure |
ใช้ HTTPS Entry Point |
tls.certresolver=letsencrypt |
ขอ SSL จาก Let’s Encrypt |
loadbalancer.server.port=80 |
Port ภายใน Container |
บังคับ HTTP เป็น HTTPS
labels:
- "traefik.enable=true"
# HTTPS Router
- "traefik.http.routers.wordpress.rule=Host(`blog.example.com`)"
- "traefik.http.routers.wordpress.entrypoints=websecure"
- "traefik.http.routers.wordpress.tls.certresolver=letsencrypt"
# HTTP to HTTPS Redirect
- "traefik.http.routers.wordpress-http.rule=Host(`blog.example.com`)"
- "traefik.http.routers.wordpress-http.entrypoints=web"
- "traefik.http.routers.wordpress-http.middlewares=redirect-to-https"
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
Traefik Dashboard
เข้าถึง Traefik Dashboard ได้ที่ http://server-ip:8080 เพื่อดูสถานะ Router, Service และ Middleware ทั้งหมด หมายเหตุ: ใน Production ควรปิด Dashboard หรือใส่ Authentication
สรุป
| คุณสมบัติ | รายละเอียด |
|---|---|
| Auto-discovery | ตรวจจับ Container อัตโนมัติผ่าน Docker Socket |
| Labels Config | ตั้งค่า Routing ใน docker-compose.yml |
| SSL Auto | ขอ Let’s Encrypt อัตโนมัติ เมื่อ Deploy Container |
| Dashboard | ดูสถานะ Real-time |
บทความสุดท้ายของชุด Reverse Proxy & SSL จะเป็นเรื่อง SSL Certificate ด้วย Certbot ซึ่งเป็นวิธีผลิต SSL แบบดั้งเดิม ใช้ได้เมื่อต้องการผลิต Certificate เองเพื่อใช้กับ Nginx โดยตรงหรือระบบอื่นๆ

