WIUNIX ACADEMY
آموزش راهاندازی Traefik با Let’s Encrypt و HTTP/3 در اوبونتو و دبیان
با Traefik یک ورودی HTTPS با بکاند محلی و داشبورد خصوصی بسازید؛ staging و production را جدا کنید، HTTP/3 را واقعاً بررسی کنید و وضعیت گواهی را قابل بازیابی نگه دارید.
محیطت را انتخاب کنآموزش متناسب با محیط تو
کجا اجرا میکنی؟
سیستمعامل و نسخه را انتخاب کن تا مراحل، دستورها و راهحلها برای همان محیط نمایش داده شوند.
آموزش متناسب با مقادیر تو
تنظیمات این آموزش
مقادیر نمونه را برای محیط خودت تنظیم کن؛ متن و دستورهای مرتبط با هم تغییر میکنند. رمز، کلید خصوصی و توکن وارد نکن. مقادیر فقط در همین زبانه نگهداری میشوند و به سرور یا لینک اشتراکگذاری فرستاده نمیشوند. پیش از اجرا، DNS، گواهیها و سیاست شبکهٔ واقعی را بررسی کن.
ویرایش 11 مقدار این آموزش
از اینجا شروع کن
در پایان چه چیزی خواهی داشت؟
لبهٔ TLS معتبر با HTTP/3، مدیریت خصوصی و وضعیت ACME قابل بازیابی.
سیستمعاملها و نسخههای پوششدادهشده
پنج مسیر سیستمعامل با مستندات بررسی شدهاند و آزمون نصب کامل نیستند. صدور و تمدید ACME عمومی، مالکیت DNS، QUIC اینترنتی و هویت SSH باید در محیط خواننده بررسی شوند؛ شواهد اجرای ایزوله جدا ثبت میشود. مقادیر شخصی ورودی آزمودهنشدهاند. تصاویر DEMO شاهد کارمند، تأسیسات یا نتیجهٔ آزمون نیستند.
قبل از شروع
- سرور لینوکسی اختصاصی و تازه با معماری amd64 یا arm64، sudo و کنسول یا SSH مستقل.
- دامنهٔ تحت اختیار و IPv4 عمومی مستقیم؛ بدون پروکسی رقیب و AAAA ناخواسته.
- مجوز ورودی TCP80 و TCP443 و UDP443، DNS و HTTPS خروجی و بررسی شرایط CA.
- کلاینت مستقل سازگار با TLS و HTTP3 و محل رمزگذاریشدهٔ بازیابی.
از درخواست اینترنتی تا بکاند محلی
در پایان، درخواست دامنهٔ app.example.com از Traefik عبور میکند و پاسخ مشخص بکاند را میگیرد؛ گواهی با ACME مدیریت میشود و کنار HTTP/1.1 و HTTP/2، مسیر HTTP/3 هم آماده است. مخاطب، مدیر سروری است که با DNS، SSH و systemd آشناست. حدود ۶۵ دقیقه، جدا از زمان انتشار DNS و صدور گواهی، در نظر بگیرید. بکاند این تمرین فقط یک فایل آزمایشی بیخطر است؛ راهاندازی اپلیکیشن واقعی به بررسی امنیت و نیازهای همان برنامه احتیاج دارد.
مرز دسترسیها را از ابتدا مشخص کنید
از یک سرور تازه و اختصاصی با IPv4 عمومی و قابل دسترس 203.0.113.10 استفاده کنید که وبسرور دیگری روی آن فعال نباشد. پورت عمومی TCP/80 برای HTTP-01 و TCP/443 و UDP/443 برای HTTPS و HTTP/3 ثابتاند؛ تغییر دلخواه آنها به تنظیم DNS و دسترسی کلاینت هم وابسته است و در این سناریو ارائه نمیشود. بکاند و پنل مدیریت فقط به 127.0.0.1 متصل میشوند. این معماری تکسرور است و افزونگی ندارد. CDN، تبدیل پورت با NAT، گواهی wildcard و انتشار IPv6 در محدودهٔ تمرین نیست؛ تا وقتی مسیر IPv6 را جداگانه کامل نکردهاید، رکورد AAAA نسازید.
پیش از کپی، مثالها را با محیط خود هماهنگ کنید
دامنهٔ تازه، IP عمومی، پورتهای آزاد و متفاوت بکاند و مدیریت و پوشههای اختصاصی را همین ابتدا انتخاب کنید. مسیر پوشه باید با / شروع شود و داخل پوشهٔ دیگرِ این تمرین نباشد؛ بررسی مرحلهٔ بعد این رابطه را پیش از ساخت فایل کنترل میکند. مسیر فایل آزمایشی میتواند چند سطح داشته باشد. کاربر و پورت SSH مربوط به دسترسی مجاز فعلی شماست و حساب جدیدی ایجاد نمیکند. تنظیمات اعمالشده و پیشرفت حالت شخصی در sessionStorage همین تب، زبان، مقاله و محیط میمانند؛ پیشرفت مثال پیشفرض در localStorage است. این مقادیر به لینک اشتراک یا تنظیمات سرور فرستاده نمیشوند و به معنی آزمودهشدن محیط شما نیستند. رمز، کلید خصوصی و توکن را در این بخش ننویسید.
قدم بعدی
سرور و مسیرهای انتخابشده را بررسی کنید
کنسول یا راه دسترسی مستقلی نگه دارید. اگر Traefik، یکی از دو سرویس نامبرده، فایل اجرایی مقصد یا پوشههای انتخابی متعلق به کار دیگری است، ادامه ندهید. سیستمعامل، معماری، ساعت و پورتهای در حال استفاده را ببینید. این راهنما فقط amd64 و arm64 لینوکس را پوشش میدهد. پیام نبودن پوشه در سرور تازه طبیعی است؛ چیزی را برای خالیکردن مسیر حذف نکنید.
سرور لینوکسی اختصاصی
cat /etc/os-release
dpkg --print-architecture
timedatectl status
systemctl list-unit-files 'traefik*' 'academy-traefik-origin*'
sudo ss -lntup
ls -l /usr/local/bin/traefik
sudo ls -ld '/etc/traefik-academy' '/var/lib/traefik-academy' '/srv/traefik-academy-origin' '/var/backups/traefik-academy'
سیستم و معماری و ساعت درست است؛ پورت یا فایل متعلق به سرویس دیگری تداخل ندارد.
قدم بعدی
پوشهٔ موجود یا تودرتو را رد کنید
این بررسی چیزی نمیسازد و مسیر ریشه، میانبر خانه، پوشهٔ موجود و مسیرهای تودرتو را رد میکند. مالکیت و لینکهای نمادین پوشههای والد را هم بررسی کنید؛ ظاهر مسیر، مالکیت واقعی فایلسیستم را ثابت نمیکند. برای عبور از خطا، پوشهٔ موجود را پاک نکنید.
سرور لینوکسی اختصاصی
sudo bash -eu <<'CHECK'
paths=('/etc/traefik-academy' '/var/lib/traefik-academy' '/srv/traefik-academy-origin' '/var/backups/traefik-academy')
for a in "${paths[@]}"; do
[[ "$a" = /* && "$a" != / && ! -e "$a" && ! -L "$a" ]]
for b in "${paths[@]}"; do
[[ "$a" = "$b" ]] && continue
case "$a/" in "$b/"*) printf 'Nested directory rejected\n' >&2; exit 1;; esac
done
done
printf 'Directory preflight passed\n'
CHECK
پیام موفقیت بررسی پوشهها دیده میشود؛ خروج ناموفق یعنی توقف.
قدم بعدی
DNS و فایروال را بدون قطع SSH آماده کنید
در ارائهدهندهٔ DNS، رکورد A دامنهٔ app.example.com را روی 203.0.113.10 بگذارید؛ مسیر مستقیم و بدون پروکسی CDN باشد. رکورد AAAA ناخواسته را از روند عادی تغییرات خود اصلاح کنید. از دستگاهی خارج از سرور، رکوردهای A، AAAA و CAA را بررسی کنید؛ اگر CAA دارید، باید letsencrypt.org را مجاز کند. در فایروال ارائهدهنده و فایروال فعلی میزبان، ورودی TCP/80، TCP/443 و UDP/443 را مجاز کنید و دسترسی مدیریت و SSH را نگه دارید. DNS به resolver مجاز و HTTPS خروجی برای دریافت فایل و ACME هم لازم است. قوانین را خالی نکنید و فایروال تازهای را کورکورانه فعال نکنید. پورتهای 8081 و 8080 عمومی نمیشوند. شنوندهٔ محلی، دسترسی از اینترنت را ثابت نمیکند.
کلاینت مستقل و پنل DNS و فایروال
dig +short A app.example.com
dig +short AAAA app.example.com
dig CAA app.example.com
رکورد A برابر 203.0.113.10 است؛ AAAA ناخواسته و مانع CAA وجود ندارد و سه مجوز عمومی بررسی شدهاند.
قدم بعدی
پیشنیازهای معمول را نصب کنید
بستهها را از مخزن امضاشدهٔ توزیع انتخابی بگیرید. ابزارهای دریافت 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 با معماری درست است.