WIUNIX ACADEMY
آموزش راهاندازی Traefik با Let’s Encrypt و HTTP/3 در اوبونتو و دبیان
صفحهٔ 2 از 6؛ مراحل قبلی و پیشنیازها را پیش از ادامه مرور کن.
آموزش متناسب با محیط تو
کجا اجرا میکنی؟
سیستمعامل و نسخه را انتخاب کن تا مراحل، دستورها و راهحلها برای همان محیط نمایش داده شوند.
آموزش متناسب با مقادیر تو
تنظیمات این آموزش
مقادیر نمونه را برای محیط خودت تنظیم کن؛ متن و دستورهای مرتبط با هم تغییر میکنند. رمز، کلید خصوصی و توکن وارد نکن. مقادیر فقط در همین زبانه نگهداری میشوند و به سرور یا لینک اشتراکگذاری فرستاده نمیشوند. پیش از اجرا، DNS، گواهیها و سیاست شبکهٔ واقعی را بررسی کن.
آیپی، دامنه یا پورت مثالها با محیط تو فرق دارد؟ دکمهٔ زیر را باز کن، مقادیر را تغییر بده و «اعمال در آموزش» را بزن؛ سپس دستورهای بهروزشده را کپی کن.
تنظیم مقادیر برای محیط من11 مقدار قابلتغییر
قدم بعدی
پیشنیازهای معمول را نصب کنید
بستهها را از مخزن امضاشدهٔ توزیع انتخابی بگیرید. ابزارهای دریافت HTTPS، بررسی هش، آرشیو، عیبیابی و سرویس فایل آزمایشی Python از همین بستهها تأمین میشوند. این مرحله ارتقای کامل سیستمعامل نیست. پیشفرض بررسیشده Ubuntu 26.10 است؛ گزینههای LTS و Debian هم از همان فایل اجرایی رسمی Traefik استفاده میکنند. پشتیبانی سیستمعامل با نگهداری نسخهٔ Traefik دو مسئولیت جداست.
سرور لینوکسی اختصاصی
sudo apt-get update
sudo apt-get install --no-install-recommends ca-certificates curl tar coreutils python3 dnsutils openssl iproute2
APT بدون خطای امضا یا مخزن تمام میشود.
قدم بعدی
نسخهٔ رسمی مشخص را بررسی و نصب کنید
در بررسی ۲۰ اکتبر ۲۰۲۶، نسخهٔ پایدار جاری 3.7.15 است و اصلاحات امنیتی دارد. نسخه را مشخص کردهایم تا دریافت قابل تکرار باشد؛ برای بهروزرسانی بعدی، هشدارهای امنیتی و راهنمای مهاجرت را دوباره بخوانید. دریافت با کاربر عادی انجام میشود، هش همان آرشیو با فایل رسمی مقایسه میشود و فقط فایل اجرایی نصب میشود. چون آرشیو و هش از یک release با HTTPS میآیند، این کنترل خرابی فایل است و جای تأیید مستقل امضا را نمیگیرد. اگر سازمان شما تأیید جداگانهٔ بسته میخواهد، همان روند را انجام دهید. خروجی دانلود را مستقیم به شل root ندهید.
سرور لینوکسی اختصاصی
bash -eu <<'DOWNLOAD'
version=3.7.15
case "$(dpkg --print-architecture)" in
amd64) arch=amd64;; arm64) arch=arm64;; *) echo 'Unsupported architecture' >&2; exit 1;;
esac
work=$(mktemp -d)
cd "$work"
archive="traefik_v${version}_linux_${arch}.tar.gz"
base="https://github.com/traefik/traefik/releases/download/v${version}"
curl --fail --location --proto '=https' --tlsv1.2 -o "$archive" "$base/$archive"
curl --fail --location --proto '=https' --tlsv1.2 -o checksums.txt "$base/traefik_v${version}_checksums.txt"
awk -v name="$archive" '$2 == name {print}' checksums.txt > selected.sha256
test "$(wc -l < selected.sha256)" -eq 1
sha256sum --check selected.sha256
tar -xzf "$archive" traefik
test ! -e /usr/local/bin/traefik
sudo install -o root -g root -m 0755 traefik /usr/local/bin/traefik
/usr/local/bin/traefik version
printf 'Retained download directory: %s\n' "$work"
DOWNLOAD
دقیقاً یک هش تأیید میشود و نسخهٔ نصبشده 3.7.15 با معماری درست است.
قدم بعدی
کاربر سرویس و محل نگهداری را جدا کنید
فقط روی میزبان تازه و پس از اطمینان از آزادبودن نام کاربر، حساب بدون ورود بسازید. تنظیمات متعلق به root میماند و Traefik فقط در پوشهٔ وضعیت ACME حق نوشتن دارد. بکاند Python با حساب جدا و کماختیار www-data اجرا میشود. هیچ سرویس به گروه Docker یا سوکت آن دسترسی نمیگیرد. دو فایل خالی ACME فقط بار اول با دسترسی 0600 ساخته میشوند؛ اجرای دوباره نباید محتویات آنها را خالی کند.
سرور لینوکسی اختصاصی
sudo bash -eu <<'SETUP'
! getent passwd traefik-academy
test ! -e '/etc/traefik-academy'
test ! -e '/var/lib/traefik-academy'
test ! -e '/srv/traefik-academy-origin'
useradd --system --user-group --no-create-home --home-dir /nonexistent --shell /usr/sbin/nologin traefik-academy
getent passwd www-data >/dev/null
install -d -o root -g traefik-academy -m 0750 '/etc/traefik-academy' '/etc/traefik-academy/dynamic'
install -d -o traefik-academy -g traefik-academy -m 0700 '/var/lib/traefik-academy'
install -o traefik-academy -g traefik-academy -m 0600 /dev/null '/var/lib/traefik-academy/acme-staging.json'
install -o traefik-academy -g traefik-academy -m 0600 /dev/null '/var/lib/traefik-academy/acme-production.json'
install -d -m 0755 '/srv/traefik-academy-origin'
install -d -m 0755 "$(dirname '/srv/traefik-academy-origin/health.txt')"
printf '%s\n' 'academy-traefik-origin-ok' > '/srv/traefik-academy-origin/health.txt'
chmod 0644 '/srv/traefik-academy-origin/health.txt'
SETUP
حساب و پوشههای اختصاصی ساخته شدهاند؛ پوشهٔ وضعیت 0700، فایلهای ACME برابر 0600 و فایل آزمایشی فاقد اطلاعات محرمانه است.
قدم بعدی
فایل سرویس بکاند آزمایشی را باز کنید
وبسرور Python فقط برای دیدن نتیجهٔ این تمرین است و سرور اپلیکیشن production محسوب نمیشود. ریشهٔ آن فقط فایل آزمایشی را دارد؛ کد پروژه، خانهٔ کاربر، کلید و بکاپ را در آن نگذارید. تنها فایل سرویس جدید زیر را بسازید.
سرور لینوکسی اختصاصی
test ! -e /etc/systemd/system/academy-traefik-origin.service &&
sudoedit /etc/systemd/system/academy-traefik-origin.service
ویرایشگر فایل سرویس تازه باز است.
محتوای فایل سرویس بکاند
محتوای فایل: این متن را در ویرایشگر ذخیره کنید؛ دستور شل نیست. اتصال به 127.0.0.1 مرز ثابت دسترسی است و عمومی نمیشود.
[Unit]
Description=Academy Traefik loopback marker
After=network.target
[Service]
Type=simple
User=www-data
Group=www-data
ExecStart=/usr/bin/python3 -m http.server 8081 --bind 127.0.0.1 --directory /srv/traefik-academy-origin
Restart=on-failure
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
[Install]
WantedBy=multi-user.target
قدم بعدی
تنظیمات آزمایشی Traefik را باز کنید
ابتدا از staging لتسانکریپت با حساب و فایل وضعیت جدا استفاده کنید. گزینهٔ api.insecure خاموش است و روت عمومی برای داشبورد نداریم. ریدایرکت HTTP در این مرحله موقت است تا مرورگر تغییرات آزمایشی را دائمی ذخیره نکند؛ HTTP-01 با ریدایرکت entrypoint سازگار است. گواهی، رمز و کلید خصوصی را در فرم تنظیمات عمومی وارد نکنید.
سرور لینوکسی اختصاصی
sudoedit '/etc/traefik-academy/traefik.yml'
ویرایشگر برای YAML کامل مرحلهٔ بعد آماده است.
فایل ثابت Traefik؛ ابتدا staging
محتوای فایل: فعالکردن HTTP/3 روی entrypoint امن TCP، شنوندهٔ UDP/443 را هم ایجاد میکند؛ در این نسخه پرچم experimental لازم نیست. فقط روتهای TLS از آن استفاده میکنند. ایمیل تماس ACME در این مثال اختیاری است؛ اگر سیاست حساب شما آن را لازم میداند، email را زیر acme در همین ویرایشگر تحت کنترل root اضافه کنید. HTTP-01 به توکن DNS احتیاج ندارد. access log فعال نشده، اما لاگ عملیاتی همچنان میتواند دامنه و خطا را ثبت کند و باید نگهداری کنترلشده داشته باشد.
global:
checkNewVersion: false
sendAnonymousUsage: false
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
permanent: false
websecure:
address: ":443"
http3: {}
admin:
address: "127.0.0.1:8080"
api:
dashboard: true
insecure: false
debug: false
providers:
file:
directory: "/etc/traefik-academy/dynamic"
watch: true
certificatesResolvers:
le:
acme:
caServer: "https://acme-staging-v02.api.letsencrypt.org/directory"
storage: "/var/lib/traefik-academy/acme-staging.json"
httpChallenge:
entryPoint: web
log:
level: INFO