Docker می تواند روشی کارآمد برای اجرای برنامه های وب در حال تولید باشد ، اما ممکن است بخواهید چندین برنامه را در یک هاست Docker اجرا کنید. در این شرایط ، باید پروکسی معکوس تنظیم کنید زیرا فقط می خواهید پورت 80 و 443 را در معرض دید قرار دهید.
Traefik یک پروکسی معکوس آگاه از Docker است که شامل داشبورد نظارت خود میباشد. در این آموزش ، از Traefik برای مسیر یابی درخواست ها به دو کانتینر مختلف برنامه وب استفاده می کنید: یک کانتینر وردپرس و یک کانتینر Adminer که هر کدام با یک پایگاه داده MySQL در ارتباط هستند. با استفاده از Let’s Encrypt ، Traefik را پیکربندی می کنید تا همه چیز را از طریق HTTPS ارائه دهد.
پیش نیازها
برای دنبال کردن این آموزش ، به موارد زیر نیاز دارید:
- یک سرور مجازی Ubuntu 18.04 با پیروی از راهنمای ستاپ اولیه سرور مجازی Ubuntu 18.04 ، از جمله کاربر غیر ریشه sudo و فایروال ، راه اندازی شده.
- Docker روی سرور مجازی شما نصب شده باشد ، که می توانید با دنبال کردن نحوه نصب و استفاده از Docker در Ubuntu 18.04 این کار را انجام دهید.
- Docker Compose با دستورالعمل نحوه نصب Docker Compose در Ubuntu 18.04 نصب شده باشد.
- یک دامنه و سه رکورد A ، db-admin ، blog و monitor. هر کدام باید به آدرس IP سرور مجازی شما اشاره کنند. در طول این آموزش ، دامنه خود را به جای your_domain در فایلهای پیکربندی و مثالها جایگزین کنید.
مرحله 1 – پیکربندی و اجرای Traefik
پروژه Traefik دارای یک تصویر Docker رسمی است ، بنابراین ما برای اجرای Traefik در یک کانتینر Docker از آن استفاده خواهیم کرد.
اما قبل از راه اندازی کانتینر Traefik ، باید یک فایل پیکربندی ایجاد کرده و یک پسورد رمزگذاری شده تنظیم کنیم تا بتوانیم به داشبورد نظارت دسترسی پیدا کنیم.
برای ایجاد این گذرواژه رمزگذاری شده از ابزار htpasswd استفاده خواهیم کرد. ابتدا برنامه کمکی را نصب کنید که در بسته apache2-utils وجود دارد:
· $ sudo apt-get install apache2-utils·
سپس رمز عبور را با htpasswd تولید کنید. secure_password را با رمز عبوری که می خواهید برای کاربر مدیر Traefik استفاده کنید جایگزین کنید:
· $ htpasswd -nb admin secure_password·
خروجی برنامه به صورت زیر خواهد بود:
Output
admin:$apr1$ruca84Hq$mbjdMZBAG.KWn7vfN/SNK/
برای تنظیم احراز هویت پایه HTTP برای داشبورد بررسی و نظارت بر سلامت Traefik ، از خروجی منحصر به فرد خود در فایل پیکربندی Traefik استفاده خواهید کرد. تمام خط خروجی خود را کپی کنید تا بعداً بتوانید آن را جایگذاری کنید. از خروجی مثال استفاده نکنید.
برای پیکربندی سرور مجازی Traefik ، با استفاده از قالب TOML ، یک فایل پیکربندی جدید به نام traefik.toml ایجاد خواهیم کرد. TOML یک زبان پیکربندی شبیه به فایل های INI اما استاندارد است. این فایل به ما اجازه می دهد تا سرور مجازی Traefik و ادغام های مختلف یا providers را که می خواهیم استفاده کنیم پیکربندی کنیم. در این آموزش ، ما از سه ارائه دهنده موجود Traefik استفاده خواهیم کرد: api ، docker و acme. آخرین مورد ، acme با استفاده از Let’s Encrypt از گواهینامه های TLS پشتیبانی می کند.
فایل جدید خود را در nano یا ویرایشگر متن مورد علاقه خود باز کنید:
· $ nano traefik.toml·
ابتدا دو نقطه ورودی به نام http و https اضافه کنید که به طور پیش فرض همه backends به آنها دسترسی خواهند داشت:
traefik.toml
defaultEntryPoints = [“http”, “https”]
بعداً در این فایل نقاط ورودی http و https را پیکربندی خواهیم کرد.
در مرحله بعد ، ارائه دهنده api را پیکربندی کنید ، که به شما امکان دسترسی به رابط داشبورد را می دهد. اینجاست که می توانید خروجی را از دستور htpasswd پیست کنید:
traefik.toml
…
[entryPoints]
[entryPoints.dashboard]
address = “:8080”
[entryPoints.dashboard.auth]
[entryPoints.dashboard.auth.basic]
users = [“admin:your_encrypted_password”]
[api]
entrypoint=”dashboard”
داشبورد یک برنامه وب جداگانه است که در کانتینر Traefik اجرا می شود. ما داشبورد را تنظیم می کنیم تا روی پورت 8080 کار کند.
بخش entrypoints.dashboard نحوه ارتباط ما با ارائه دهنده api را تنظیم می کند و بخش entrypoints.dashboard.auth.basic تأیید اعتبار اصلی HTTP را برای داشبورد پیکربندی می کند. برای مقدار ورودی کاربران از خروجی دستور htpasswd استفاده کنید. می توانید ورودهای اضافی را با جدا کردن آنها با ویرگول مشخص کنید.
ما اولین ورودی خود را تعریف کرده ایم ، اما باید سایر موارد را برای ارتباطات استاندارد HTTP و HTTPS که به سمت ارائه دهنده api نیست ، تعریف کنیم. بخش entryPoints آدرس هایی را که Traefik و کانتینرهای پروکسی می توانند به آن گوش دهند پیکربندی می کند. این خطوط را به فایل زیر عنوان entryPoints اضافه کنید:
traefik.toml
…
[entryPoints.http]
address = “:80”
[entryPoints.http.redirect]
entryPoint = “https”
[entryPoints.https]
address = “:443”
[entryPoints.https.tls]
…
نقطه ورود http پورت 80 را کنترل می کند ، در حالی که نقطه ورود https از پورت 443 برای TLS / SSL استفاده می کند. ما به طور خودکار تمام ترافیک موجود در پورت 80 را به نقطه ورود https هدایت می کنیم تا اتصالات ایمن را برای همه درخواست ها تضمین کنیم.
در مرحله بعد ، این بخش را برای پیکربندی Let’s Encrypt پشتیبانی از گواهی Traefik اضافه کنید:
traefik.toml
…
[acme]
email = “your_email@your_domain”
storage = “acme.json”
entryPoint = “https”
onHostRule = true
[acme.httpChallenge]
entryPoint = “http”
این بخش acme نامیده می شود زیرا ACME نام پروتكلی است كه برای ارتباط با Let’s Encrypt برای مدیریت گواهینامه ها استفاده می شود. سرویس Let’s Encrypt نیاز به ثبت نام با یک آدرس ایمیل معتبر دارد ، بنابراین برای اینکه Traefik برای هاست های ما گواهی تولید کند ، کلید ایمیل را روی آدرس ایمیل خود تنظیم کنید. سپس مشخص می کنیم که اطلاعاتی که از Let’s Encrypt دریافت خواهیم کرد را در یک فایل JSON به نام acme.json ذخیره خواهیم کرد. کلید entryPoint باید به نقطه ورودی پورت 443 اشاره کند ، که در مورد ما نقطه ورود https است.
کلید onHostRule نحوه عملکرد Traefik برای تولید گواهینامه ها را تعیین می کند. ما می خواهیم گواهینامه خود را به محض ایجاد کانتینرها با نام هاست های مشخص دریافت کنیم ، و این همان کاری است که تنظیم onHostRule انجام می دهد.
بخش acme.httpChallenge به ما اجازه می دهد تا تعیین کنیم چگونه Let’s Encrypt بتواند تأیید کند که گواهی تولید شده است. ما در حال پیکربندی آن هستیم تا به عنوان بخشی از چالش از طریق نقطه ورود http ، یک فایل را ارائه دهد.
در آخر ، بیایید با اضافه کردن این خطوط به فایل ، ارائه دهنده docker را پیکربندی کنیم:
traefik.toml
…
[docker]
domain = “your_domain”
watch = true
network = “web”
ارائه دهنده docker ، Traefik را قادر می سازد به عنوان یک پروکسی در مقابل کانتینرهای Docker عمل کند. ما ارائه دهنده را پیکربندی کرده ایم تا کانتینرهای جدیدی را در شبکه وب مشاهده کند که به زودی ایجاد خواهیم کرد و آنها را به عنوان زیر دامنه های your_domain نمایش می دهد.
در این مرحله ، traefik.toml باید دارای محتوای زیر باشد:
traefik.toml
defaultEntryPoints = [“http”, “https”]
[entryPoints]
[entryPoints.dashboard]
address = “:8080”
[entryPoints.dashboard.auth]
[entryPoints.dashboard.auth.basic]
users = [“admin:your_encrypted_password”]
[entryPoints.http]
address = “:80”
[entryPoints.http.redirect]
entryPoint = “https”
[entryPoints.https]
address = “:443″
[entryPoints.https.tls]
[api]
entrypoint=”dashboard”
[acme]
email = “your_email@your_domain”
storage = “acme.json”
entryPoint = “https”
onHostRule = true
[acme.httpChallenge]
entryPoint = “http”
[docker]
domain = “your_domain”
watch = true
network = “web”
Copy
فایل را ذخیره کرده و از ویرایشگر خارج شوید. با استفاده از این پیکربندی ها ، می توانیم Traefik را مقداردهی اولیه کنیم.
مرحله 2 – اجرای کانتینر Traefik
سپس ، یک شبکه Docker برای پروکسی ایجاد کنید تا با کانتینرها به اشتراک گذاشته شود. شبکه Docker لازم است تا بتوانیم از آن در برنامه هایی که با استفاده از Docker Compose اجرا می شوند استفاده کنیم. بیایید با این شبکه وب تماس بگیریم:
- $ docker network create web
وقتی کانتینر Traefik شروع به کار کرد ، ما آن را به این شبکه اضافه خواهیم کرد. سپس می توانیم کانتینرهای دیگری را برای پروکسی Trafik به این شبکه اضافه کنیم.
سپس ، یک فایل خالی ایجاد کنید که اطلاعات Let’s Encrypt ما را در خود نگه دارد. ما این را در کانتینر به اشتراک خواهیم گذاشت تا Traefik بتواند از آن استفاده کند:
- $ touch acme.json
Traefik فقط درصورتی امکان استفاده از این فایل را خواهد داشت که کاربر ریشه داخل کانتینر دسترسی خواندن و نوشتن منحصر به فرد به آن داشته باشد. برای انجام این کار ، مجوزهای acme.json را قفل کنید تا فقط صاحب فایل اجازه خواندن و نوشتن را داشته باشد:
- $ chmod 600 acme.json
هنگامی که فایل به Docker منتقل شد ، مالک به طور خودکار به کاربر اصلی داخل کانتینر تغییر می کند.
در آخر ، با استفاده از این دستور کانتینر Traefik را ایجاد کنید:
- docker run -d \
- -v /var/run/docker.sock:/var/run/docker.sock \
- -v $PWD/traefik.toml:/traefik.toml \
- -v $PWD/acme.json:/acme.json \
- -p 80:80 \
- -p 443:443 \
- -l traefik.frontend.rule=Host:monitor.your_domain \
- -l traefik.port=8080 \
- –network web \
- –name traefik \
- traefik:1.7-alpine
دستور کمی طولانی است ، بنابراین اجازه دهید آن را تجزیه کنیم.
ما از پرچم -d برای اجرای کانتینر در پس زمینه به عنوان یک دمون استفاده می کنیم. سپس فایل docker.sock خود را در کانتینر به اشتراک می گذاریم تا روند Traefik بتواند تغییرات در کانتینرها را گوش دهد. همچنین فایل پیکربندی traefik.toml و فایل acme.json را که ایجاد کردیم در کانتینر به اشتراک می گذاریم.
سپس ، از پورت های 80 و: 443 هاست Docker خود به همان پورت های موجود در کانتینر Traefik ترسیم می کنیم تا Traefik تمام ترافیک HTTP و HTTPS را به سرور مجازی دریافت کند.
سپس دو برچسب Docker تنظیم می کنیم که به Traefik می گوید که باید ترافیک را به سمت نام هاست monitor.your_domain به :8080 درون کانتینر Traefik هدایت کند، که داشبورد نظارت را نشان می دهد.
شبکه کانتینر را روی وب تنظیم می کنیم و کانتینر را traefik نامگذاری می گذاریم.
سرانجام ، از تصویر traefik: 1.7-alpine برای این کانتینر استفاده می کنیم ، زیرا کوچک است.
یک ENTRYPOINT تصویر Docker فرمانی است که همیشه هنگام ایجاد کانتینر از تصویر اجرا می شود. در این حالت ، دستور باینری traefik درون کانتینر است. هنگام راه اندازی کانتینر می توانید آرگومان های دیگری را به آن دستور منتقل کنید ، اما همه تنظیمات خود را در فایل traefik.toml پیکربندی کرده ایم.
با راه اندازی کانتینر ، اکنون داشبوردی دارید که می توانید برای مشاهده سلامت کانتینرهای خود به آن دسترسی داشته باشید. همچنین می توانید از این داشبورد برای تجسم frontends و backends که Traefik ثبت کرده استفاده کنید. با رفتن به ادرس https: //monitor.your_domain در مرورگر خود به داشبورد نظارت دسترسی پیدا کنید. نام کاربری و گذرواژه ادمین و رمز عبوری که در مرحله 1 پیکربندی کرده اید ، از شما خواسته می شود.
پس از ورود به سیستم ، رابط کاربری مشابه این را مشاهده خواهید کرد:
چیز چندانی برای مشاهده وجود ندارد ، اما این پنجره را باز بگذارید ، و با افزودن کانتینرهایی برای مدیریت Traefik ، تغییر محتوا را مشاهده خواهید کرد.
اکنون پروکسی Traefik در حال اجرا ، پیکربندی شده برای کار با Docker و آماده نظارت بر سایر کانتینرها Docker است. بیایید چند کانتینر برای Traefik به پروکسی اضافه کنیم.
مرحله 3 – ثبت کانتینرها با Traefik
با استفاده از کانتینر Traefik ، آماده اجرای برنامه هایی در ورای آن هستید. اجازه دهید کانتینرهای زیر را تحت Traefik راه اندازی کنیم:
1- وبلاگی با استفاده از تصویر رسمی وردپرس.
2- یک سرور مجازی مدیریت پایگاه داده با استفاده از تصویر رسمی Adminer.
ما با استفاده از یک فایل docker-compose.yml هر دو این برنامه ها را با Docker Compose مدیریت خواهیم کرد.
فایل docker-compose.yml را در ویرایشگر خود ایجاد و باز کنید:
- $ nano docker-compose.yml
خطوط زیر را به فایل اضافه کنید تا نسخه و شبکه هایی را که استفاده خواهیم کرد مشخص کنید:
docker-compose.yml
version: “3”
networks:
web:
external: true
internal:
external: false
ما از Docker Compose نسخه 3 استفاده می کنیم زیرا جدیدترین نسخه اصلی قالب فایل Compose است.
برای اینکه Traefik برنامه های ما را بشناسد ، آنها باید بخشی از یک شبکه باشند و از آنجا که ما شبکه را به صورت دستی ایجاد کرده ایم ، با تعیین نام شبکه وب و تنظیم external روی true ، آن را به داخل می کشیم. سپس یک شبکه دیگر تعریف می کنیم تا بتوانیم کانتینرهای در معرض دید خود را به یک کانتینر پایگاه داده متصل کنیم که از طریق Traefik در معرض آن قرار نمی گیریم. ما این شبکه را internalمی نامیم.
در مرحله بعدی ، هر یک از سرویس های خود را یک به یک تعریف خواهیم کرد. بیایید با محتوای وبلاگ شروع کنیم ، که پایه آن را تصویر رسمی وردپرس قرار خواهیم داد. این پیکربندی را به پایین فایل خود اضافه کنید:
docker-compose.yml
version: “3”
…
services:
blog:
image: wordpress:4.9.8-apache
environment:
WORDPRESS_DB_PASSWORD:
labels:
– traefik.backend=blog
– traefik.frontend.rule=Host:blog.your_domain
– traefik.docker.network=web
– traefik.port=80
networks:
– internal
– web
depends_on:
– mysql
کلید environment به شما امکان می دهد متغیرهای محیطی را که در داخل کانتینر تنظیم می شوند ، تعیین کنید. با تعیین نکردن مقداری برای WORDPRESS_DB_PASSWORD ، به Docker Compose می گوییم که هنگام ایجاد کانتینر مقدار را از پوسته ما گرفته و آن را عبور دهد. قبل از شروع کانتینرها ، این متغیر محیط را در پوسته خود تعریف خواهیم کرد. به این ترتیب گذرواژه های محکم کد گذاری شده را در فایل پیکربندی وارد نمی کنیم.
قسمت labels جایی است که شما مقادیر پیکربندی Traefik را تعیین می کنید. برچسب های Docker به تنهایی کاری انجام نمی دهند ، اما Traefik این موارد را می خواند تا بداند چگونه با کانتینرها رفتار کند. آنچه در هر یک از این برچسب ها انجام می شود به این شرح است:
- backend نام سرویس backend را در Traefik مشخص می کند (که به کانتینر واقعی blog اشاره دارد).
- frontend.rule=Host:blog.your_domain به Traefik می گوید که میزبان درخواستی را بررسی کند و اگر با الگوی blog.your_domain مطابقت دارد باید ترافیک را به کانتینر blog هدایت کند.
- docker.network=web مشخص می کند برای یافتن IP داخلی این کانتینر در کدام شبکه به دنبال Traefik بگردید. از آنجا که کانتینر Traefik ما به تمام اطلاعات Docker دسترسی دارد ، اگر این مورد را مشخص نکنیم ، احتمالاً IP را برای شبکه داخلی می گیرد.
- port پورت در معرض مشخصی را مشخص می کند که Traefik باید از آن برای مسیر یابی به این کانتینر استفاده کند.
با استفاده از این پیکربندی ، تمام ترافیک ارسال شده به پورت 80 میزبان Docker ما به کانتینر blog هدایت می شود.
ما این کانتینر را به دو شبکه مختلف اختصاص می دهیم تا Traefik بتواند آن را از طریق شبکه وب پیدا کند و بتواند از طریق شبکه داخلی با کانتینر پایگاه داده ارتباط برقرار کند.
سرانجام ، کلید depend_on به Docker Compose می گوید که این کانتینر پس از اجرای متعلقات باید شروع شود. از آنجا که وردپرس برای اجرا به یک پایگاه داده احتیاج دارد ، ما باید قبل از شروع محتوای وبلاگ خود ، محتوای mysql خود را اجرا کنیم.
سپس ، با اضافه کردن این پیکربندی به پایین فایل ، سرویس MySQL را پیکربندی کنید:
docker-compose.yml
services:
…
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD:
networks:
– internal
labels:
– traefik.enable=false
ما برای این کانتینر از تصویر رسمی MySQL 5.7 استفاده می کنیم. مشاهده خواهید کرد که بار دیگر از یک آیتم environment بدون مقدار استفاده می کنیم. متغیرهای MYSQL_ROOT_PASSWORD و WORDPRESS_DB_PASSWORD باید در همان مقدار تنظیم شوند تا اطمینان حاصل شود که کانتینر وردپرس ما می تواند با MySQL ارتباط برقرار کند. ما نمی خواهیم کانتینر mysql را در معرض Traefik یا جهان خارج قرار دهیم ، بنابراین فقط این کانتینر را به شبکه داخلی اختصاص می دهیم. از آنجا که Traefik به سوکت Docker دسترسی دارد ، این فرایند همچنان پیش فرض یک کانتینر mysql را نشان می دهد ، بنابراین ما برچسب traefik.enable = false را اضافه می کنیم تا مشخص کنیم Traefik نباید این کانتینر را نشان دهد.
سرانجام ، این پیکربندی را به قسمت پایین فایل خود اضافه کنید تا کانتینر Adminer را تعریف کنید:
docker-compose.yml
services:
…
adminer:
image: adminer:4.6.3-standalone
labels:
– traefik.backend=adminer
– traefik.frontend.rule=Host:db-admin.your_domain
– traefik.docker.network=web
– traefik.port=8080
networks:
– internal
– web
depends_on:
– mysql
این کانتینر بر اساس تصویر رسمی ادمین است. پیکربندی network و depends_on برای این کانتینر دقیقاً با آنچه برای کانتینر blog استفاده می کنیم مطابقت دارد.
با این حال ، از آنجا که همه ترافیک را به پورت 80 هاست Docker خود مستقیماً به کانتینر blog هدایت می کنیم ، باید این کانتینر را به گونه دیگری پیکربندی کنیم تا ترافیک به کانتینر ادمین ما برسد. traefik.frontend.rule=Host:db-admin.your_domain به Traefik می گوید هاست درخواستی را بررسی کند. اگر با الگوی db-admin.your_domain مطابقت داشته باشد ، Traefik ترافیک را به سمت کانتینر مدیر هدایت می کند.
در این مرحله ، docker-compose.yml باید دارای محتوای زیر باشد:
docker-compose.yml
version: “3”
networks:
web:
external: true
internal:
external: false
services:
blog:
image: wordpress:4.9.8-apache
environment:
WORDPRESS_DB_PASSWORD:
labels:
– traefik.backend=blog
– traefik.frontend.rule=Host:blog.your_domain
– traefik.docker.network=web
– traefik.port=80
networks:
– internal
– web
depends_on:
– mysql
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD:
networks:
– internal
labels:
– traefik.enable=false
adminer:
image: adminer:4.6.3-standalone
labels:
– traefik.backend=adminer
– traefik.frontend.rule=Host:db-admin.your_domain
– traefik.docker.network=web
– traefik.port=8080
networks:
– internal
– web
depends_on:
– mysql
فایل را ذخیره کرده و از ویرایشگر متن خارج شوید.
سپس ، مقادیر را برای پوسته خود برای متغیرهای WORDPRESS_DB_PASSWORD و MYSQL_ROOT_PASSWORD قبل از شروع کانتینرها خود تنظیم کنید:
- $ export WORDPRESS_DB_PASSWORD=secure_database_password
- $ export MYSQL_ROOT_PASSWORD=secure_database_password
secure_database_password را با گذرواژه پایگاه داده مورد نظر خود جایگزین کنید. فراموش نکنید که برای هر دو WORDPRESS_DB_PASSWORD و MYSQL_ROOT_PASSWORD از رمز عبور یکسانی استفاده کنید.
با تنظیم این متغیرها ، کانتینرها را با استفاده از docker-compose اجرا کنید:
- $ docker-compose up -d
اکنون نگاهی دوباره به داشبورد مدیریت Traefik بیندازید. خواهید دید که اکنون یک backend و frontend برای دو سرور مجازی وجود دارد:
به blog.your_domain خود بروید. به یک اتصال TLS هدایت خواهید شد و اکنون می توانید تنظیمات WordPress را انجام دهید:
اکنون با مراجعه به db-admin.your_domain در مرورگر خود ، به Adminer دسترسی پیدا کنید و your_domain را دوباره با دامنه خود جایگزین کنید. کانتینر mysql در معرض دنیای خارج نیست ، اما کانتینر adminer از طریق شبکه داخلی Docker که با استفاده از نام کانتینر mysql به عنوان نام هاست به آن استفاده میکنند ، دسترسی دارد.
در صفحه ورود به سیستم Adminer ، از ROOT به عنوان نام کاربری، MySQL برای سرور مجازی استفاده کنید. و مقداری را که برای MYSQL_ROOT_PASSWORD تعیین کرده اید برای رمز عبور وارد کنید. پس از ورود به سیستم ، رابط کاربری Adminer را مشاهده خواهید کرد:
هر دو سایت اکنون کار می کنند و شما می توانید از داشبورد موجود در monitor.your_domain استفاده کنید تا برنامه های خود را تحت نظر داشته باشید.
نتیجه
در این آموزش ، Traefik را به درخواست پروکسی از برنامه های دیگر در کانتینرهای Docker پیکربندی کرده اید.
پیکربندی اعلانی Traefik در سطح کانتینر برنامه ، پیکربندی سرویس های بیشتر را آسان می کند و هنگام افزودن برنامه های جدید به ترافیک پروکسی ، نیازی به راه اندازی مجدد کانتینر traefik نیست زیرا Traefik بلافاصله از طریق فایل سوکت Docker که در حال کنترل است، متوجه تغییر می شود.
برای کسب اطلاعات بیشتر در مورد آنچه می توانید با Traefik انجام دهید ، به مطالب رسمی Traefik مراجعه کنید.
نحوه استفاده از Traefik به عنوان پروکسی معکوس برای کانتینرهای Docker در اوبونتو 20.04
نحوه نصب و ایمن سازی Redis در Centos7
چگونه می توان محیط JupyterLab را در اوبونتو 18.04 تنظیم کرد
نحوه نصب Webmin در Ubuntu 20.04
نحوه بازنویسی آدرس های اینترنتی با mod_rewrite برای Apache در اوبونتو 20.04
نحوه مدیریت چندین سرور با دستورات Ad Hoc Ansible
چگونه می توان REST API را با Prisma و PostgreSQL ساخت
نحوه میزبانی وب سایت با استفاده از Cloudflare و Nginx در اوبونتو 18.04
نحوه استفاده از Traefik به عنوان پروکسی معکوس برای کانتینرهای Docker در Ubuntu 18.04
خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان –
https://vpsgol.net/product/vps-germany/
https://vpsgol.net/product/vps-usa/
https://vpsgol.net/product/vps-france/
https://vpsgol.net/product/vps-canada/
https://vpsgol.net/product/vps-poland/
https://vpsgol.net/product/vps-netherlands/
https://vpsgol.net/product/vps-england/