Setup Traefik step by step with Cloudflare and Let's Encrtypt

Traefik is a modern HTTP reverse proxy and load balancer - Techblog.co.il

Traefik הנה מערכת reverse proxy / load balancer המבוססת קוד פתוח אשר הולכת ותופסת תאוצה היות והיא קלה להתקנה ומתממשקת ל Docker Comtainers ול Let's Encrypt בקלות ובפשטות.
במדריך זה אסביר כיצד להתקין ולהגדיר את המערכת.

לפני שנתחיל, אנא וודאו שהתקנתם docker וכן docker-compose על פי המדריך הבא.

שלב א' – התקנת traefik באמצעות docker-compose

תחילה, עלינו ליצור רשת חדשה אשר תשמש לחיבור בין ה Traefik למיקרו סרביסים שלנו, לשם כך כתבו את הפקודה הבאה:

כעת ערכו את קובץ ההגדרות של docker-compose אשר יצרתם במדריך ההתקנה של הדוקר על ידי הפקודה הבאה:

והוסיפו פנימה את הטקסט הבא:

ושמרו את הקובץ על ידי לחיצה על ctrl+x ולאחריו y ואנטר.
כעת צרו תיקיה בשם traefik תחת התיקיה של ה docker על ידי הפקודה הבאה:

כעת צרו בתוך התיקיה קובץ ריק בשם acme.json אשר ישמש לאחסון המידע אודות תעודות ה ssl ותנו לו
את ההרשאות המתאימות:

הסיבה לכך היא שאם ניתן הרשאות גבוהות יותר, המערכת תציג שגיאת אבטחה ותמנע את התקנת תעודות ה SSL.

כעת ניצור את קובץ ההגדרות הראשי של Traefik, לצורך כך צרו קובץ חדש על ידי הפקודה הבאה:

והדביקו פנימה את הטקסט הבא:

Let’s Encrypt

Traefik מכילה בתוכה אינטגרציה של ACME מה שאומר בעצם שניתן לבקש באמצעותה תעודות SSL עבור השרותים מבוססי ה docker שלנו. על מנת להנפיק תעודת SSL עליך להיות בעל דומיין משלך או להשתמש בשרות כמו Duck DNS למשל.
Let's Encrypt מאפשרת הנפקת תעודת SSL בשני דרכים:
– HTTP-01
– DNS-01

בקטע הקוד הנ"ל אני מדגים שימוש בדומיין המתארח ב Cloudflare, תוך שימוש ב dnsChallenge. לצורך כך יש להוסיף לקובץ ה docker-compose.yaml את החלק הבא:

וכן להוסיף רשומה עם * אשר תפנה אל ה IP שלכם בבית (אחרת תצטרכו להוסיף a record עבור כל דומיין).
ניתן להשתמש במגוון רחב של ספקיות DNS, את הרשימה המלאה ניתן למצוא כאן.
כעת, הריצו את הפקודה הבאה על מנת להתקין את הקונטיינר של Traefik. לצורך כך הריצו את הפקודות הבאות:

פתחו את הדפדפן והקישו את כתובת השרת בצירוף פורט 8080, במידה ועשיתם הכל כראוי אתם אמורים לראות מסך שנראה כך:

Traefik Empty Dashboard - Techblog.co.il

כעת, נוסיף מספר שורות (תגיות) לקובץ ה docker-compose.yaml על מנת להוסיף את traefik כדומיין עם reverse proxy. לצורך כך פתחו שוב את קובץ ה docker-compose לעריכה והוסיפו את התגיות תחת הקונטיינר של traefik:

כאשר:
* החליפו את domain.com בזה שלכם.
* פורט 8080 הוא הפורט שהוגדר עבור ה dashboard של traefik.

כעת הריצו את הפקודה הבאה על מנת לבנות מחדש את הקונטיינר עם ההגדרות החדשות:

כעת תוכלו לגשת ל dashboard של traefik באמצעות הדומיין שהגדרתם. לדוגמא traefik,domain.com.
שימו לב שכעת ניתן לגשת לממשק בצורה חופשית וללא צורך בהקשם שם משתמש וסיסמה. מומלץ מאוד להגדיר שם משתמש וסיסמה על מנת לאבטח את הגישה לממשק. על מנת לעשות זאת ערכו את קובץ ה traefik.toml והחליפו את הקוד הבא:

בזה:

כאשר את שם המשתמש והסיסמה החליפו בשלכם. יש ליצור סיסמת htpasswd. על מנת לצור אותה גשו לכתובת הבאה וחוללו על פי ההוראות. את הפלט שנראה כך: user:$apr1$e9tBwTJv$WU3uZgCkey13JQ/RS3lWt0

הדביקו במקום user:pass ושמרו את הקובץ.
אתחלו את traefik ותוכלו לראות שכעת תתבקשו להקליד שם משתמש וסיסמה בכניסה.

שלב ב' – הגדרת reverse proxy עבור קונטיינרים נוספים

כפי שציינתי בתחילת המדריך, traefik מאזין לכלי הניהול בו אתם משתמשים ובאמצעות הוספת מספר תגיות לקונטיינרים שלכם, traefik תיצור את קבצי ההגדרות בצורה אוטומטית. בחלק זה של המדריך אפרט על הוספת התגיות השונות.

בחלק זה של המדריך נעשה שימוש בקונטיינר שנקרא whoami שכל תפקידו להציג דרך דפדפן מידע אודות הקונטיינר (כתובת IP, שם ועוד):

Whoami docker image
מתוך הבלוג של תומר קליין

לצורך כך, הוסיפו את השורות הבאות לקובץ ה docker-compose.yaml:

  • "traefik.enable=true" – מורה ל Traefik לחשוף דרכו את whoami.
  • traefik.frontend.rule – מגדיר את הדומיין לשימוש עבור השירות.

ועדכנו את הקונטיינר על ידי הפקודה הבאה:

אם כעת תגשו לממשק ה Dashboard של Traefik תוכלו לראות שנוספו שם הגדרות של ForntEnd וכן של Backend:

דשבורד של traefik ובו מידע אודות ה Front ו- back ends של whoami

File

דרך נוספת להגדיר שירותים מאחורי Traefik הוא שימוש בכללים אותם ניתן להוסיף לקובץ traefik.toml. בכללים אלה נשתמש בדרך כלל על מנת להחתין שירותים שאינם מבוססי Docker. בקוד הבא תוכלו לראות שימוש בכלל לצורך החצנת שירות pihole למשל:

בהצלחה!

Be the first to comment

Leave a Reply

כתובת האימייל שלך לא תפורסם


*