✕ סגור 
צור קשר
תודה על ההתעניינות .

Thank you! Your submission has been received!

Oops! Something went wrong while submitting the form

מפיתוח לייצור - WordPress כשירות עם Azure Devops

עומר יפהר
|
Mar 7, 2019
alt="blogs"
Events
alt="blogs"
title="Google"
alt="blogs"
Event

יצא לנו לאחרונה להחליף אתר CMS Umbraco ישן באתר WordPress חדש.

מכיוון שהאתר הישן רכב על תשתיות Azure App Service, היה זה טבעי שאת האתר החדש גם כן נקים על אותן תשתיות ב Azure.

את הפרוייקט הובילו צוותי הפיתוח ואני נדרשתי לתת את דעתי לפני ה- go live, להעיף מבט של ארכיטקט. סך הכל פרויקט יחסית קטן של WordPress. לא רצו להטריד יותר מדי את מנוחתו השלווה של הארכיטקט בזוטות.

תשובתי היתה קצרה ותמציתית – אם ב- WordPress מדובר, אנא תדאגו שהנ"ל ירכב על תשתית Linux ולא Windows. ויתירה מכך, אם כבר מדובר ב Linux ע"ג תשתיות App Service, אנא תדאגו לארח על תשתיות Azure App service for containers.

הסיבה לכך פשוטה:

• פיתוח ע"ג טכנולוגיית Docker Containers, כך שמחזור הפיתוח יהיה זריז וזהה בכל רמות ה- life cycle.

• שימוש ביתרונות של Azure App Service עבור אירוח אתרים. מדובר לדעתי בשירות מצויין ומאובטח אשר מוריד באופן דראסטי את האופרציה וניהול התשתיות. למשל שימוש ב deployment slots למעבר חלק ושקוף של האתר מסביבת פיתוח לסביבת ייצור.

• שימוש בשירות Azure Devops (git) לאירוח של הקוד ויצירת pipeline (CI / CD)

• אגב, Azure App Service for containers, אחד מהייתרונות של שירות זה שהוא מעלה את האפליקציה לעבודה על הדיסק המקומי של Azure App Service, ולא משתמש ב Azure Files (ניתן לבחירה).

חזרו אלי מהפיתוח ותשובתם הייתה – תמצא לנו דרך להעלות את הקוד אל תוך ה- container image ותסביר לנו איך לנהל את כל האופרציה הזו, כולל עדכונים בקוד ועל כך נדבר כאן.

הנחת העבודה שלי הייתה:

• למצוא Docker Image ב- Docker HUB עבור WordPress שכולל את ה- Dockerfile.

• להעלות את פרויקט הDocker- WordPress ואת פרויקט ה WordPress של הפיתוח לתוך GIT (Azure Devops)

• עמדת פיתוח עם Docker Containers. להתקין עליה git. לבצע git clone מתוך ה Azure Devops שיהיה ניתן לפתח מקומית (לא חובה, ניתן לעבוד ישירות מול azure app service slot של פיתוח)

• ACR (Azure Container Registry) עבור Registry פרטי.

• Azure App Service אשר יארח את האתר (יקושר ל ACR)

• Azure Devops. ישמש כ GIT ויבצע את כל ה Pipeline.

וכך תיראה האופרציה של הסביבה:

Azure Devops -הקמת הפרויקט ב

ע"מ למצוא את ה Docker Image project המתאים, כולל ה- Dockerfile, הקמתי ישירות מתוך Azure Marketplace את ה Wordpress on Azure App Services. בצורה זו ניתן לדעת בדיוק את הנתיב ל Dockerfile ואת ה variables  שנצטרך להשתמש בשלב יותר מאוחר ב application settings.

האמת שלא אהבתי את ה שימוש ב- alpine אז לקחתי את הגרסה של PHP ישירות מתוך Docker HUB.

שימו לב שה Docker HUB נותן לינק ישירות ל Git HUB, היכן שפרויקט ה- Dockerfile נמצא.

ה- Dockerfile הינו המתכון אשר ממנו נבנה ה image של docker container.

http://bit.ly/docker_wordpress


לחיצה על הלינק של Dockerfile תביא אותכם ישירות ל- Dockerfile. יש ללכת לתיקיית האב של הפרויקט על מנת שנוכל להעתיק את כולו לתוך ה- Azure Devops. נלחץ על Clone ונעתיק את הלינק.

http://bit.ly/docker-library-wordpress

Azure Devops

לאחר שהעתקנו את הלינק, נוכל לגשת ל Azure Devops ולהקים את הפרויקט.

http://bit.ly/services-devops

נלחץ על Create project. לאחר שהפרויקט מוקם, נבצע ייבוא מתוך ה Git HUB על ידי repos > files > import > paste the cloned url

בשלב זה יש לנו פרויקט WordPress נקי אשר מאוחסן ב- git פרטי (Azure Devops). כעת ניתן לבנות קונטיינר של WordPress דרך Dockerfile. זהו אתר WordPress אבל אתר בתולי. אנחנו עדיין בבעיה איך "לדחוף" את הקוד של הפיתוח לתוך הקונטיינר הנקי.

ישנן מספר אופציות לבצע זאת. יש כאלו שיקימו git בתוך הקונטיינר. אני הלכתי על פתרון פשוט יותר. להעתיק את הקוד (ספריות) כתת תיקייה בתוך הproject (שהקמנו עבור wordpress). להגדיר ב Dockerfile את השורה הבאה COPY Myproject /var/www/html

בתצורה הזו אני דואג למעשה גם ל pipeline. כל פעם שמפתח ישנה את הקוד ויבצע git commit, יתבצע תהליך של docker build. בכל תהליך docker build יועתק הקוד החדש ל -docker image על ידי ה Dockerfile.

משהו נוסף.

מכיוון שאנו עובדים בשכפול סביבות, פיתוח, ייצור וכו', אנו צריכים לדאוג להוציא את כל הסיסמאות והמשתנים מחוץ לקוד (database name, password). מכיוון שהנ"ל מוגדר בתוך תיקיית wp-config.php בהרצה הראשונה, ערכתי את קובץ ה wp-config.php והכנסתי לא שימוש במשתנים. הנ"ל ישמשו אותי בהגדרות של Azure app service app settings, או בהכנסת -e בהרצת docker run מתחנת Docker מקומית.

עכשיו נוכל להשתמש באותו הקוד בסביבות שונות, אשר כל סביבה תהיה מקושרת לבסיס הנתונים שלה (בסיס נתונים נפרד לפיתוח ובסיס נתונים נפרד לייצור).

מזל טוב. הקוד מוגדר בפרויקט, אפשר להריץ את האתר ולבנות את ה pipeline ב Azure Devops.

השלב הבא הוא להקים Azure Container Registry (ACR), לבנות Docker image, לפרסם אותו ב ACR, להריץ Docker image שהורדנו דרך ה ACR. אני השתמשתי בתחנת dockerמקומית, אבל לפשט את העניין אני אריץ הכל דרך Azure App Service for containers.

ACR

את Azure Container Registry ניתן להקים למטרות בדיקה על ה sku הנמוך basic אשר מאפשר עד שני webhook, קישור מתוך ה app service.

http://bit.ly/Create-private-container

MYSQL

נצטרך לספק בסיס נתונים לאתר ה WordPress

http://bit.ly/Create-Azure-Database

אלו הפקודות שהשתמשתי בהן להריץ את ה Docker image מתחנת docker  מקומית:

• Install azure cli on linux

• az acr login --name omerregistry

• docker pull omerregistry.azurecr.io/wordpressapp

• docker run -d -e DATABASE_HOST=omery.mysql.database.azure.com -e DATABASE_NAME=wp -e DATABASE_PASSWORD=**** -e DATABASE_USERNAME=omery@omery --name myimage -p 8080:80 omerregistry.azurecr.io/wordpressapp

• docker exec -it myimage /bin/bash

• cat wp-config.php

כעת נדגיר build pipeline אשר יבנה את ה Docker image ויפרסם אותו ב- ACR. ז"א שבכל פעם שהמפתח יבצע git commit יבוצע תהליך של בניית ה image ופרסומו לתוך ה ACR.

נחזור ל- Azure Devops.

מתוך פורטל ה- Azure Devops ניגש לתפריט מצד שמאל pipelines > builds.

עבור תהליך ה build נשתמש בשני tasks. ה task הראשון יבנה את ה Docker image:

• יש לבחור בתפריט ה- command באופציה build.

• נצטרך לבחור את ה- azure subscription שה- ACR מותקן וכן את הנתיב ל Dockerfile.

• בכדי לפשט את הנושא, אני מגדיר latest tag > $(Build.Repository.Name):latest.

ה- task השני ייקח את ה Docker image ויעלה אותו ל ACR. כאן נבחר בתפריט ה command את האופציה push.

לסיום, יש להגדיר continues integration בtrigger menu.

לאחר שמירה,

נבצע הפעלה ידנית של תהליך build שבסופו נקבל image בתוך ה ACR.

חזרה לתפריט ה builds, נוכל ללחוץ על ה build שהרצנו ולראות את התהליך בזמן אמת ואת השגיאות במידה וישנן. להפעלה ידנית של ה build יש ללחוץ על Queue.

השלב הבא הוא ליצור את השירות Azure App service ולמשוך את ה Container image מתוך ה- ACR. מטעמי נוחיות, אני עושה את תהליך ההקמה (app service) ישירות מתוך ה ACR, ולאחר מכן עושה שינויים נדרשים.

נחזור לפורטל Azure > ACR.

ב- repository menu נגיע עד ל- tags וממנו נבחר deploy to web app. הנ"ל יבנה לנו Azure app service עם קישור ל-ACR.

לאחר ששירות ה azure app service הוקם, יש להעתיק את הסיסמא של ה- ACR. היא מוגדרת כמשתנה  DOCKER_REGISTRY_SERVER_PASSWORD ב app setting

זה הזמן לחזור ל Azure Devops ולבנות את ה Release pipeline.

ב Release pipeline נגדיר את ה ACR בתור artifact. ז"א שבכל פעם שמבוצע תהליך build שבסיומו נכנס image חדש לACR, יבוצע תהליך של הרצת image חדש של WordPress. במידה והגדרתי Deployment slots אז אצור תהליך מלא של:

• upon new image on the ACR > deploy to staging slot

• upon approval, do swap from stage to prod (manual approval)

ה pipeline שלי יראה בצורה הנ"ל

עבור ה- artifact, אצטרך להגדיר ACR

לאחר הגדרת ה ACR בתור artifact יש להגדיר את ה pipeline עצמו. ז"א להריץ את ה docker image ע"ג ה Azure App Service עם ההגדרות הנכונות  (הקמה ל app service staging slots או ישר לייצור במידה ולא הגדרתי deployment slots).

יש לבחור את ה template של App Service Deployment.

במידה והגדרתי deploymentslots אז אצור pipeline נוסף עם swap slot template.

חשוב מאוד לזכור להגדיר ב app settings את המשתנים:

DATABASE_HOST

DATABASE_NAME

DATABASE_PASSWORD

DATABASE_USERNAME

DOCKER_ENABLE_CI > true

WEBSITE_TIME_ZONE > "Israel Standard Time"

DOCKER_REGISTRY_SERVER_URL

DOCKER_REGISTRY_SERVER_USERNAME

WEBSITES_ENABLE_APP_SERVICE_STORAGE > false

בגדול סיימנו. מומלץ להריץ את תהליך ה- ci/cd על ידי הפעלה ידנית של ה- build ולוודא שכל ה- pipeline רץ תקין.

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

שימוש מושכל ברכיבי Microsoft Azure כדוגמת AzureApp Service, Azure Devops מאפשריםלהרים פרויקט איכותי בזמן שיא תוך דגש מקסימאלי למחזור חיי האפליקציה.

 

DB Best Technologies מאת: עומר יפהר, ארכיטקט בחברת

?Azure רוצים להתעדכן בתכנים נוספים בנושאי

הירשמו עכשיו לניוזלטר שלנו ותמיד תישארו בעניינים > להרשמה

יצא לנו לאחרונה להחליף אתר CMS Umbraco ישן באתר WordPress חדש.

מכיוון שהאתר הישן רכב על תשתיות Azure App Service, היה זה טבעי שאת האתר החדש גם כן נקים על אותן תשתיות ב Azure.

את הפרוייקט הובילו צוותי הפיתוח ואני נדרשתי לתת את דעתי לפני ה- go live, להעיף מבט של ארכיטקט. סך הכל פרויקט יחסית קטן של WordPress. לא רצו להטריד יותר מדי את מנוחתו השלווה של הארכיטקט בזוטות.

תשובתי היתה קצרה ותמציתית – אם ב- WordPress מדובר, אנא תדאגו שהנ"ל ירכב על תשתית Linux ולא Windows. ויתירה מכך, אם כבר מדובר ב Linux ע"ג תשתיות App Service, אנא תדאגו לארח על תשתיות Azure App service for containers.

הסיבה לכך פשוטה:

• פיתוח ע"ג טכנולוגיית Docker Containers, כך שמחזור הפיתוח יהיה זריז וזהה בכל רמות ה- life cycle.

• שימוש ביתרונות של Azure App Service עבור אירוח אתרים. מדובר לדעתי בשירות מצויין ומאובטח אשר מוריד באופן דראסטי את האופרציה וניהול התשתיות. למשל שימוש ב deployment slots למעבר חלק ושקוף של האתר מסביבת פיתוח לסביבת ייצור.

• שימוש בשירות Azure Devops (git) לאירוח של הקוד ויצירת pipeline (CI / CD)

• אגב, Azure App Service for containers, אחד מהייתרונות של שירות זה שהוא מעלה את האפליקציה לעבודה על הדיסק המקומי של Azure App Service, ולא משתמש ב Azure Files (ניתן לבחירה).

חזרו אלי מהפיתוח ותשובתם הייתה – תמצא לנו דרך להעלות את הקוד אל תוך ה- container image ותסביר לנו איך לנהל את כל האופרציה הזו, כולל עדכונים בקוד ועל כך נדבר כאן.

הנחת העבודה שלי הייתה:

• למצוא Docker Image ב- Docker HUB עבור WordPress שכולל את ה- Dockerfile.

• להעלות את פרויקט הDocker- WordPress ואת פרויקט ה WordPress של הפיתוח לתוך GIT (Azure Devops)

• עמדת פיתוח עם Docker Containers. להתקין עליה git. לבצע git clone מתוך ה Azure Devops שיהיה ניתן לפתח מקומית (לא חובה, ניתן לעבוד ישירות מול azure app service slot של פיתוח)

• ACR (Azure Container Registry) עבור Registry פרטי.

• Azure App Service אשר יארח את האתר (יקושר ל ACR)

• Azure Devops. ישמש כ GIT ויבצע את כל ה Pipeline.

וכך תיראה האופרציה של הסביבה:

Azure Devops -הקמת הפרויקט ב

ע"מ למצוא את ה Docker Image project המתאים, כולל ה- Dockerfile, הקמתי ישירות מתוך Azure Marketplace את ה Wordpress on Azure App Services. בצורה זו ניתן לדעת בדיוק את הנתיב ל Dockerfile ואת ה variables  שנצטרך להשתמש בשלב יותר מאוחר ב application settings.

האמת שלא אהבתי את ה שימוש ב- alpine אז לקחתי את הגרסה של PHP ישירות מתוך Docker HUB.

שימו לב שה Docker HUB נותן לינק ישירות ל Git HUB, היכן שפרויקט ה- Dockerfile נמצא.

ה- Dockerfile הינו המתכון אשר ממנו נבנה ה image של docker container.

http://bit.ly/docker_wordpress


לחיצה על הלינק של Dockerfile תביא אותכם ישירות ל- Dockerfile. יש ללכת לתיקיית האב של הפרויקט על מנת שנוכל להעתיק את כולו לתוך ה- Azure Devops. נלחץ על Clone ונעתיק את הלינק.

http://bit.ly/docker-library-wordpress

Azure Devops

לאחר שהעתקנו את הלינק, נוכל לגשת ל Azure Devops ולהקים את הפרויקט.

http://bit.ly/services-devops

נלחץ על Create project. לאחר שהפרויקט מוקם, נבצע ייבוא מתוך ה Git HUB על ידי repos > files > import > paste the cloned url

בשלב זה יש לנו פרויקט WordPress נקי אשר מאוחסן ב- git פרטי (Azure Devops). כעת ניתן לבנות קונטיינר של WordPress דרך Dockerfile. זהו אתר WordPress אבל אתר בתולי. אנחנו עדיין בבעיה איך "לדחוף" את הקוד של הפיתוח לתוך הקונטיינר הנקי.

ישנן מספר אופציות לבצע זאת. יש כאלו שיקימו git בתוך הקונטיינר. אני הלכתי על פתרון פשוט יותר. להעתיק את הקוד (ספריות) כתת תיקייה בתוך הproject (שהקמנו עבור wordpress). להגדיר ב Dockerfile את השורה הבאה COPY Myproject /var/www/html

בתצורה הזו אני דואג למעשה גם ל pipeline. כל פעם שמפתח ישנה את הקוד ויבצע git commit, יתבצע תהליך של docker build. בכל תהליך docker build יועתק הקוד החדש ל -docker image על ידי ה Dockerfile.

משהו נוסף.

מכיוון שאנו עובדים בשכפול סביבות, פיתוח, ייצור וכו', אנו צריכים לדאוג להוציא את כל הסיסמאות והמשתנים מחוץ לקוד (database name, password). מכיוון שהנ"ל מוגדר בתוך תיקיית wp-config.php בהרצה הראשונה, ערכתי את קובץ ה wp-config.php והכנסתי לא שימוש במשתנים. הנ"ל ישמשו אותי בהגדרות של Azure app service app settings, או בהכנסת -e בהרצת docker run מתחנת Docker מקומית.

עכשיו נוכל להשתמש באותו הקוד בסביבות שונות, אשר כל סביבה תהיה מקושרת לבסיס הנתונים שלה (בסיס נתונים נפרד לפיתוח ובסיס נתונים נפרד לייצור).

מזל טוב. הקוד מוגדר בפרויקט, אפשר להריץ את האתר ולבנות את ה pipeline ב Azure Devops.

השלב הבא הוא להקים Azure Container Registry (ACR), לבנות Docker image, לפרסם אותו ב ACR, להריץ Docker image שהורדנו דרך ה ACR. אני השתמשתי בתחנת dockerמקומית, אבל לפשט את העניין אני אריץ הכל דרך Azure App Service for containers.

ACR

את Azure Container Registry ניתן להקים למטרות בדיקה על ה sku הנמוך basic אשר מאפשר עד שני webhook, קישור מתוך ה app service.

http://bit.ly/Create-private-container

MYSQL

נצטרך לספק בסיס נתונים לאתר ה WordPress

http://bit.ly/Create-Azure-Database

אלו הפקודות שהשתמשתי בהן להריץ את ה Docker image מתחנת docker  מקומית:

• Install azure cli on linux

• az acr login --name omerregistry

• docker pull omerregistry.azurecr.io/wordpressapp

• docker run -d -e DATABASE_HOST=omery.mysql.database.azure.com -e DATABASE_NAME=wp -e DATABASE_PASSWORD=**** -e DATABASE_USERNAME=omery@omery --name myimage -p 8080:80 omerregistry.azurecr.io/wordpressapp

• docker exec -it myimage /bin/bash

• cat wp-config.php

כעת נדגיר build pipeline אשר יבנה את ה Docker image ויפרסם אותו ב- ACR. ז"א שבכל פעם שהמפתח יבצע git commit יבוצע תהליך של בניית ה image ופרסומו לתוך ה ACR.

נחזור ל- Azure Devops.

מתוך פורטל ה- Azure Devops ניגש לתפריט מצד שמאל pipelines > builds.

עבור תהליך ה build נשתמש בשני tasks. ה task הראשון יבנה את ה Docker image:

• יש לבחור בתפריט ה- command באופציה build.

• נצטרך לבחור את ה- azure subscription שה- ACR מותקן וכן את הנתיב ל Dockerfile.

• בכדי לפשט את הנושא, אני מגדיר latest tag > $(Build.Repository.Name):latest.

ה- task השני ייקח את ה Docker image ויעלה אותו ל ACR. כאן נבחר בתפריט ה command את האופציה push.

לסיום, יש להגדיר continues integration בtrigger menu.

לאחר שמירה,

נבצע הפעלה ידנית של תהליך build שבסופו נקבל image בתוך ה ACR.

חזרה לתפריט ה builds, נוכל ללחוץ על ה build שהרצנו ולראות את התהליך בזמן אמת ואת השגיאות במידה וישנן. להפעלה ידנית של ה build יש ללחוץ על Queue.

השלב הבא הוא ליצור את השירות Azure App service ולמשוך את ה Container image מתוך ה- ACR. מטעמי נוחיות, אני עושה את תהליך ההקמה (app service) ישירות מתוך ה ACR, ולאחר מכן עושה שינויים נדרשים.

נחזור לפורטל Azure > ACR.

ב- repository menu נגיע עד ל- tags וממנו נבחר deploy to web app. הנ"ל יבנה לנו Azure app service עם קישור ל-ACR.

לאחר ששירות ה azure app service הוקם, יש להעתיק את הסיסמא של ה- ACR. היא מוגדרת כמשתנה  DOCKER_REGISTRY_SERVER_PASSWORD ב app setting

זה הזמן לחזור ל Azure Devops ולבנות את ה Release pipeline.

ב Release pipeline נגדיר את ה ACR בתור artifact. ז"א שבכל פעם שמבוצע תהליך build שבסיומו נכנס image חדש לACR, יבוצע תהליך של הרצת image חדש של WordPress. במידה והגדרתי Deployment slots אז אצור תהליך מלא של:

• upon new image on the ACR > deploy to staging slot

• upon approval, do swap from stage to prod (manual approval)

ה pipeline שלי יראה בצורה הנ"ל

עבור ה- artifact, אצטרך להגדיר ACR

לאחר הגדרת ה ACR בתור artifact יש להגדיר את ה pipeline עצמו. ז"א להריץ את ה docker image ע"ג ה Azure App Service עם ההגדרות הנכונות  (הקמה ל app service staging slots או ישר לייצור במידה ולא הגדרתי deployment slots).

יש לבחור את ה template של App Service Deployment.

במידה והגדרתי deploymentslots אז אצור pipeline נוסף עם swap slot template.

חשוב מאוד לזכור להגדיר ב app settings את המשתנים:

DATABASE_HOST

DATABASE_NAME

DATABASE_PASSWORD

DATABASE_USERNAME

DOCKER_ENABLE_CI > true

WEBSITE_TIME_ZONE > "Israel Standard Time"

DOCKER_REGISTRY_SERVER_URL

DOCKER_REGISTRY_SERVER_USERNAME

WEBSITES_ENABLE_APP_SERVICE_STORAGE > false

בגדול סיימנו. מומלץ להריץ את תהליך ה- ci/cd על ידי הפעלה ידנית של ה- build ולוודא שכל ה- pipeline רץ תקין.

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

שימוש מושכל ברכיבי Microsoft Azure כדוגמת AzureApp Service, Azure Devops מאפשריםלהרים פרויקט איכותי בזמן שיא תוך דגש מקסימאלי למחזור חיי האפליקציה.

 

DB Best Technologies מאת: עומר יפהר, ארכיטקט בחברת

?Azure רוצים להתעדכן בתכנים נוספים בנושאי

הירשמו עכשיו לניוזלטר שלנו ותמיד תישארו בעניינים > להרשמה

לפרטים נוספים ויצירת קשר עם נציג אורקל

תודה הודעתך התקבלה

הודעתך לא התקבלה - נסה שוב מאוחר יותר

עומר יפהר

הירשם לרשימת הדיוור של IsraelClouds

Thank you! Your submission has been received!

Oops! Something went wrong while submitting the form

מילון מונחיםהשירותים שלנו תנאי שימושהרשמה לניוזלטרמדיניות פרטיות