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

شب ۱۰: تغییر، ارتقا و بازیابی در Compose

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

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

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

  • تمایز تغییر زندهٔ مسیریابی از تغییر تنظیمات راه‌اندازی که به restart نیاز دارد.
  • ارتقای پراکسی تک‌میزبانه با اندازه‌گیری وقفه و بازگشت قابل‌پیش‌بینی.
  • بازیابی تنظیمات و وضعیت گواهی‌ها.

تمرین عملی: دستورالعمل تغییر

# change-record.yml
change: "Traefik patch upgrade"
prechecks:
  - configuration rendered
  - backup readable and off-host copy confirmed
  - image digest recorded and release notes reviewed
success:
  - health becomes healthy within 60s
  - synthetic HTTP redirect and HTTPS request pass
  - no new provider or ACME errors
rollback:
  - restore previous image digest and configuration commit
  - restore acme.json only if state was damaged
set -o pipefail
docker compose config --quiet
docker compose config > before-rendered.yaml
docker compose images
cp -p state/acme.json state/acme.pre-upgrade.json
sha256sum compose.yaml traefik.yml dynamic/*.yml state/acme.pre-upgrade.json
docker compose pull traefik

# In another terminal, observe availability:
while :; do curl -fsS -o /dev/null -w '%{http_code}\n' \
  --resolve whoami.example.test:443:127.0.0.1 \
  --cacert certs/lab-ca.crt https://whoami.example.test/; sleep 1; done

docker compose up -d --no-deps traefik
docker compose ps
docker compose logs --since=5m traefik

برای بازگشت، فایل یا محیط وضعیت مطلوب را به digest قبلی ثبت‌شده برگردانید و سپس وضعیت اجرا را با آن تطبیق دهید:

TRAEFIK_IMAGE='traefik@sha256:PREVIOUS_DIGEST' docker compose up -d --no-deps traefik
docker compose ps
curl --fail --cacert certs/lab-ca.crt \
  --resolve whoami.example.test:443:127.0.0.1 https://whoami.example.test/

بازخوانی زنده را جداگانه بیازمایید: X-Change-ID را به dynamic/http.yml اضافه کنید، فایل را اتمی جایگزین کنید و بدون restart کانتینر هدر را تأیید کنید. روش امن، نوشتن فایل موقت کنار فایل اصلی و انتقال آن با mv است؛ در پوشه‌های bind-mounted، رویدادهای watch از جایگزینی خود فایل mountشده قابل‌اتکاترند.

اولویت‌های بازیابی:

  1. میزبان، شبکه و Docker را بازیابی کنید.
  2. تنظیمات بازبینی‌شدهٔ Compose، راه‌اندازی و پویا را بازیابی کنید.
  3. secretها و گواهی‌ها را با مالک و مجوز درست برگردانید.
  4. ابتدا Traefik و سپس برنامه‌ها را راه‌اندازی کنید.
  5. نام‌های میزبان شناخته‌شده را اعتبارسنجی و لاگ و انقضا را پایش کنید.

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

  • کانتینر جدید سالم نمی‌شود: لاگ راه‌اندازی و تعارض منابع تنظیمات را بررسی کنید؛ پیش از عیب‌یابی بی‌پایان به نسخهٔ قبل برگردید.
  • ویرایش پویا نادیده گرفته می‌شود: نحو، پوشهٔ mountشده، رویدادهای watch و خطاهای ارائه‌دهنده را بررسی کنید.
  • ایمیج قبلی با تنظیمات جدید شکست می‌خورد: ایمیج و تنظیمات را به‌صورت مجموعه‌ای سازگار برگردانید.
  • وضعیت بازیابی‌شدهٔ ACME نادیده گرفته می‌شود: مسیر ذخیره‌سازی، مجوز، مالک یا نام resolver اشتباه است.

خودآزمایی

  1. چرا digest را ثبت می‌کنیم، نه فقط tag؟ tag می‌تواند جابه‌جا شود؛ digest محتوای دقیق را مشخص می‌کند.
  2. چه زمانی باید وضعیت ACME را بازیابی کرد؟ هنگام حذف یا خرابی آن، نه به‌عنوان روشی معمول برای لغو تغییر مسیریابی نامرتبط.
  3. محدودیت دسترس‌پذیری تک‌میزبانه چیست؟ جایگزینی کانتینر Traefik ممکن است اتصال‌ها را قطع کند؛ افزونگی بالادستی به میزبان یا نمونهٔ دیگری نیاز دارد.
  4. اثبات کنید: هدر را زنده بازخوانی کنید، ایمیج را با وضعیت مطلوب تطبیق دهید و بازگشت موفق انجام دهید.