مقدمه
وقتی تعداد کانتینرهای Docker در یک سرور بیشتر میشود، مدیریت دسترسی به آنها از طریق دامنهها و پورتهای مختلف میتواند پیچیده شود. در چنین شرایطی استفاده از یک Reverse Proxy راهکار بسیار مناسبی است.
Traefik یکی از محبوبترین Reverse Proxyهای مدرن محسوب میشود که بهصورت خودکار سرویسهای Docker را شناسایی میکند و بدون نیاز به تنظیمات پیچیده، درخواستها را به کانتینر مناسب هدایت میکند.
در این آموزش یاد میگیرید چگونه Traefik v1 را روی Ubuntu 20.04 راهاندازی کنید تا بهعنوان Reverse Proxy برای کانتینرهای Docker عمل کند.
Traefik چیست؟
Traefik یک Load Balancer و Reverse Proxy متنباز است که برای محیطهای مدرن مانند:
- Docker
- Kubernetes
- Swarm
- Mesos
طراحی شده است.
برخلاف Nginx یا Apache، نیازی نیست هر بار که سرویس جدیدی اضافه میکنید فایلهای کانفیگ را دستی ویرایش کنید. Traefik سرویسهای جدید را بهصورت خودکار شناسایی میکند.
پیشنیازها
قبل از شروع به موارد زیر نیاز دارید:
- یک سرور Ubuntu 20.04
- دسترسی کاربر دارای sudo
- نصب Docker
- نصب Docker Compose
- یک دامنه معتبر که به IP سرور اشاره کند
مرحله اول: ساخت شبکه Docker
ابتدا یک شبکه اختصاصی برای Traefik و سرویسهای وب ایجاد کنید:
docker network create web
این شبکه باعث میشود Traefik بتواند با سایر کانتینرها ارتباط برقرار کند.
مرحله دوم: ساخت پوشه پروژه
یک پوشه برای تنظیمات Traefik ایجاد کنید:
mkdir ~/traefik
cd ~/traefik
مرحله سوم: ایجاد فایل docker-compose
فایل زیر را ایجاد کنید:
nano docker-compose.yml
سپس محتوای زیر را داخل آن قرار دهید:
version: "3"
services:
traefik:
image: traefik:v1.7
container_name: traefik
restart: always
command:
- --docker
- --docker.domain=example.com
- --docker.watch
- --web
ports:
- "80:80"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
networks:
- web
networks:
web:
external: true
توضیح تنظیمات
فعالسازی Docker Provider
- --docker
این گزینه باعث میشود Traefik کانتینرهای Docker را مانیتور کند.
مانیتور کردن تغییرات
- --docker.watch
هر زمان کانتینر جدیدی ایجاد یا حذف شود، Traefik بهصورت خودکار تنظیمات را بهروزرسانی میکند.
تنظیم دامنه پیشفرض
- --docker.domain=example.com
دامنه اصلی پروژه را مشخص میکند.
داشبورد مدیریتی
- --web
داشبورد Traefik را فعال میکند.
پس از اجرا از طریق آدرس زیر قابل مشاهده خواهد بود:
http://SERVER-IP:8080
مرحله چهارم: اجرای Traefik
کانتینر را اجرا کنید:
docker-compose up -d
بررسی وضعیت:
docker ps
باید کانتینر Traefik در لیست مشاهده شود.
مرحله پنجم: اجرای یک سرویس نمونه
برای تست، یک کانتینر Nginx اجرا میکنیم.
فایل جدیدی ایجاد کنید:
mkdir ~/nginx-test
cd ~/nginx-test
سپس:
nano docker-compose.yml
محتوا:
version: "3"
services:
nginx:
image: nginx
labels:
- "traefik.frontend.rule=Host:test.example.com"
- "traefik.port=80"
networks:
- web
networks:
web:
external: true
توضیح Labelها
تعریف دامنه
traefik.frontend.rule=Host:test.example.com
هر درخواست به این دامنه به کانتینر Nginx هدایت میشود.
پورت داخلی کانتینر
traefik.port=80
مشخص میکند Traefik باید درخواستها را به پورت 80 کانتینر ارسال کند.
اجرای سرویس
docker-compose up -d
مرحله ششم: تنظیم DNS
در پنل مدیریت دامنه یک رکورد A بسازید:
test.example.com -> SERVER_IP
پس از انتشار DNS، با باز کردن آدرس زیر باید صفحه پیشفرض Nginx را ببینید:
http://test.example.com
مشاهده داشبورد Traefik
به آدرس زیر بروید:
http://SERVER-IP:8080
در داشبورد میتوانید موارد زیر را مشاهده کنید:
- Frontends
- Backends
- Routes
- Health Status
اضافه کردن چندین سرویس
یکی از مزیتهای اصلی Traefik این است که برای هر سرویس فقط کافی است Labelهای مناسب را اضافه کنید.
مثال:
labels:
- "traefik.frontend.rule=Host:api.example.com"
- "traefik.port=3000"
یا:
labels:
- "traefik.frontend.rule=Host:blog.example.com"
- "traefik.port=8080"
Traefik بهصورت خودکار ترافیک هر دامنه را به سرویس مربوطه هدایت میکند.
مزایای استفاده از Traefik
- پیکربندی خودکار سرویسها
- یکپارچگی عالی با Docker
- داشبورد مدیریتی داخلی
- پشتیبانی از Load Balancing
- قابلیت استفاده از SSL و Let’s Encrypt
- حذف نیاز به تنظیم دستی Virtual Hostها
جمعبندی
Traefik v1 یک Reverse Proxy قدرتمند برای محیطهای Docker است که مدیریت سرویسها را بسیار ساده میکند. با اتصال Traefik به Docker، هر کانتینر جدید بهصورت خودکار شناسایی میشود و تنها با چند Label میتوانید دامنههای مختلف را به سرویسهای خود متصل کنید.
از همراهی شما با پارمین کلود سپاسگزاریم.
نظرات کاربران