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 network create proxy

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

sudo nano ~/docker/docker-compose.yml

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

version: "3.6"
services:
  traefik:
    image: traefik:latest
    restart: always
    domainname: domain.com
    ports:
      - 80:80
      - 443:443
      - 8080:8080
    networks:
      - proxy
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ~/docker/traefik/traefik.toml:/traefik.toml
      - ~/docker/traefik/rules.toml:/etc/traefik/rules.toml
      - ~/docker/traefik/acme.json:/C
    container_name: traefik

networks:
  proxy:
    external: true

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

mkdir ~/docker/traefik

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

touch ~/docker/traefik/acme.json
chmod 600 ~/docker/traefik/acme.json

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

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

nano ~/docker/traefik/traefik.toml

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

logLevel = "WARN" #DEBUG, INFO, WARN, ERROR, FATAL, PANIC
#the next line will cause traefik to use http as default then https
defaultEntryPoints = ["http", "https"]

# WEB interface of Traefik - it will show web page with overview of frontend and backend configurations 

# Force HTTPS - force redirect all http to https
[entryPoints]
  [entryPoints.http]
  address = ":80"
    [entryPoints.http.redirect]
    entryPoint = "https"
  [entryPoints.https]
  address = ":443"
    [entryPoints.https.tls]

#Traefik Dashboard settings  
[entryPoints.traefik]
   address=":8080"
 
	
[api]
  entryPoint = "traefik"
  dashboard = true
  address = ":8080"
	
# Let's encrypt configuration
[acme]
entryPoint = "https"
storage = "/acme.json"
caServer = "https://acme-v02.api.letsencrypt.org/directory"
  [acme.dnsChallenge] 
  provider = "cloudflare"
  delayBeforeCheck = 0
  [[acme.domains]]
  main = "*.domain.com"

# Connection to docker host system (docker.sock)
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "domain.com"
watch = true
# This will hide all docker containers that don't have explicitly  
# set label to "enable"
exposedbydefault = false

Let’s Encrypt

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

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

    environment:
      - CF_API_EMAIL=[Cloudflare Login Email]
      - CF_API_KEY=[Cloudflare API Key]

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

cd ~/docker
docker-compose up -d

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

Traefik Empty Dashboard - Techblog.co.il

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

  traefik:
    image: traefik:latest
    restart: always
    domainname: ${DOMAINNAME}
    ports:
      - 80:80
      - 443:443
      - 8080:8080
    networks:
      - proxy
    labels:
      - "traefik.frontend.rule=Host:domain.com"
      - "traefik.port=8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ~/docker/traefik/traefik.toml:/traefik.toml
      - ~/docker/traefik/rules.toml:/etc/traefik/rules.toml
      - ~/docker/traefik/acme.json:/C
    container_name: traefik

networks:
  proxy:
    external: true

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

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

sudo docker-compose up -d

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

  [entryPoints.traefik]
   address=":8080"

בזה:


  [entryPoints.traefik]
   address=":8080"
   [entryPoints.traefik.auth]
     [entryPoints.traefik.auth.basic]
       users = [
         "user:pass"
       ]

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

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

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

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

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

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

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

  whoami:
    image: emilevauge/whoami
    labels:
      - "traefik.enable=true"
      - "traefik.frontend.rule=Host:whoami.domain.com"
  • "traefik.enable=true" – מורה ל Traefik לחשוף דרכו את whoami.
  • traefik.frontend.rule – מגדיר את הדומיין לשימוש עבור השירות.

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

cd ~/docker
docker-compose up -d

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

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

File

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

[file]

[backends]
  [backends.nsx]
    [backends.nsx.servers.server1]
       url = "http://192.168.0.253:81/admin"


  [frontends.nsx]
      backend = "nsx"
      passHostHeader = true
      [frontends.nsx.routes.example]
          rule = "Host:nsx.domain.com"
	
	

בהצלחה!

Be the first to comment

Leave a Reply

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


*