پرش به محتویات

شب ۰۷: نصب Traefik روی Docker Compose

بخش ۰۷ از مجموعهٔ آموزش Traefik در ۳۰ شب؛ هر جلسه برای ۶۰ تا ۹۰ دقیقه مطالعه، تمرین عملی، بررسی نتیجه و تمرین رفع خرابی طراحی شده است. مثال‌ها مطابق منبع با Traefik Proxy v3.7 نوشته شده‌اند؛ برای محیط عملیاتی نسخهٔ اصلاحی آزموده‌شده یا digest مشخصی را ثابت کنید. تمرین‌ها را روی میزبان یا کلاستر آزمایشگاهی اجرا کنید.

فهرست کامل دورهٔ ترافیک در ۳۰ شب

هدف‌های یادگیری

  • نصب Traefik با تنظیمات راه‌اندازی مختصر.
  • مسیریابی یک سرویس خصوصی Compose با برچسب‌ها و انتخاب شبکهٔ صریح.
  • بررسی تنظیمات مؤثر، سلامت و ترافیک.

تمرین عملی

# traefik.yml
entryPoints:
  web: {address: ":80"}
  websecure: {address: ":443"}
providers:
  docker:
    endpoint: unix:///var/run/docker.sock
    exposedByDefault: false
    network: proxy
  file:
    directory: /etc/traefik/dynamic
    watch: true
api: {dashboard: true}
ping: {}
log: {level: INFO}
accessLog: {format: json}
# compose.yaml
services:
  traefik:
    image: traefik:v3.7
    restart: unless-stopped
    ports: ["80:80", "443:443"]
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./traefik.yml:/etc/traefik/traefik.yml:ro
      - ./dynamic:/etc/traefik/dynamic:ro
    networks: [proxy]
    healthcheck:
      test: [CMD, traefik, healthcheck, --ping]
      interval: 10s
      timeout: 2s
      retries: 3
  whoami:
    image: traefik/whoami:v1.11
    networks: [proxy]
    labels:
      traefik.enable: "true"
      traefik.docker.network: proxy
      traefik.http.routers.whoami.entrypoints: web
      traefik.http.routers.whoami.rule: "Host(`whoami.example.test`)"
      traefik.http.services.whoami.loadbalancer.server.port: "80"
networks:
  proxy: {name: proxy}
mkdir -p dynamic
docker compose config --quiet
docker compose pull
docker compose up -d
docker compose ps
docker compose logs --since=5m traefik
curl -fsS --resolve whoami.example.test:80:127.0.0.1 http://whoami.example.test/
docker network inspect proxy
docker compose exec traefik traefik version

فرض نکنید ایمیج کم‌حجم Traefik ابزارهای تعاملی عیب‌یابی دارد. برای دسترسی به API یا داشبورد، مسیریاب محافظت‌شدهٔ شب ۰۸ به api@internal را تعریف کنید؛ پورت ۸۰۸۰ را عمومی نکنید و api.insecure را فعال نکنید.

فهرست اعتبارسنجی

  • دستور docker compose config --quiet موفق است و مدل تولیدشده mountها و برچسب‌های مورد انتظار را دارد.
  • فقط Traefik پورت میزبان منتشر می‌کند.
  • Traefik سالم می‌شود و خطای ارائه‌دهنده در لاگ ندارد.
  • سرویس Whoami به proxy متصل است و پورتش صریحاً مشخص شده است.
  • Host درست پاسخ 200 می‌دهد و Host ناشناخته پاسخ 404 از Traefik می‌گیرد.
  • نسخه یا digest در حال اجرا ثبت شده است.

نکته‌های عیب‌یابی

  • خطای network proxy not found: شبکه را از طریق پروژه بسازید یا نام صریح شبکه را هماهنگ کنید.
  • مسیریاب وجود دارد اما پاسخ 502 است: عضویت شبکه و برچسب پورت سرور را بررسی کنید.
  • مسیریاب وجود ندارد: مقادیر برچسب دارای backtick یا ویرگول را داخل کوتیشن بگذارید و مدل نهایی Compose را بررسی کنید.
  • پورت قبلاً تخصیص یافته است: با ss -lntp فرایند شنونده را شناسایی کنید؛ فرایند ناشناختهٔ عملیاتی را متوقف نکنید.

خودآزمایی

  1. چرا whoami پورت منتشر نمی‌کند؟ Traefik از شبکهٔ خصوصی Docker به آن دسترسی دارد.
  2. چرا برچسب پورت پشت‌صحنه را تعیین می‌کنیم؟ از تشخیص خودکار مبهم یا اشتباه پورت جلوگیری می‌کند.
  3. پاسخ 404 برای میزبان ناشناخته چه چیزی نشان می‌دهد؟ Traefik در دسترس است، اما هیچ قاعدهٔ مسیریابی منطبق نیست.
  4. اثبات کنید: انتشار فقط پورت‌های ۸۰ و ۴۴۳ و موفقیت درخواست میزبان مجازی را نشان دهید.