רן בר-זיק     לפני 6 שנים     כ- 5 דקות קריאה  

וורדפרס על docker | אינטרנט ישראל

תוכנה

בוני אתרי וורדפרס? נסו את העולם המופלא של docker כדי להרים מיידית וורדפרס על כל מחשב ומחשב. היתרונות הם עצומים: אפשר להרים לא מעט סביבות תוך שניות עם גרסאות PHP שונות וגרסאות מסד נתונים שונות. הסביבה התקלקלה? משהו התחרבש? מורידים ומעלים שוב.

במאמר הקודם למדנו על docker compose לעבודה עם סביבות מורכבות. במקרה הזה וורדפרס היא סביבה מורכבת. מקום אחד שבו אנו מריצים את ה-PHP ומקום שני שבו אנו מריצים את ה-MySQL. בדוגמה במאמר הקודם אנו בנינו PHPMyAdmin ובדוגמה כאן אנו נבנה וורדפרס. העקרון הוא אותו עקרון. קובץ compose שבו מוגדרות שתי הסביבות.

יוצרים תיקיה במחשב ומכניסים לתוכה קובץ בשם docker-compose.yml. ניגשים לחלק של וורדפרס באתר של docker ומאתרים את קובץ ה-compose שמתאים לנו. 

version: '3.1'

services:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
      MYSQL_RANDOM_ROOT_PASSWORD: '1'

מה שמעניין פה יותר מהכל הוא משתני הסביבה שמפורטים ב-environment. אני חושב שאין צורך להסביר עליהם יותר מדי. רק חשוב להזהיר שאם הדוקר שלכם יושב על סביבה חיצונית (לא סביבת פיתוח) אז זה רעיון ממש ממש רע להשתמש בססמה נוסח "examplepass" בסביבת פרודקשן.

מה הבעיה עם הקובץ הזה? שהוא יעבוד מעולה, אבל יהיה לנו קשה לגשת אל קבצי הוורדפרס כדי להוסיף/לערוך/לשנות אותם. בסופו של דבר אנחנו צריכים לעבוד על תבניות או תוספים. איך עושים את זה? תוספת קטנה שקושרת בין הקבצים של המכונות השונות לדיסק הקשיח שלנו. איך עושים את זה? עם תוספת קטנה לקובץ ה-compose המקורי:

version: '3.1'

services:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb
    # Keep your data
    volumes: 
      - ./site:/var/www/html/

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    # Keep your data
    volumes: 
      - ./db:/var/lib/mysql

בגדול, תחת ה-volumes יש את ההגדרה. ראשית התיקיה המקומית (יחסית לקובץ ה-compose) ושנית ההגדרה בתוך המכונה. כך למשל:

./site:/var/www/html/

אומר שהתיקיה site שתהיה בתיקיה שבה יש את קובץ ה-compose במחשב שלנו, תהיה בעצם תיקית ה-var/www/html של המכונה שמחזיקה את קבצי הוורדפרס. הכי קל בעולם. כשנריץ את קובץ ה-compose הוא יצור את התיקיה וגם יאכלס אותה בקבצי הוורדפרס שאותם הוא יוריד.

זה גם נותן לנו persistence.  כלומר גם אם נכבה את דוקר ואת המחשב ואחר כך נרים את הכל מחדש – הקבצים יישארו והמידע יישאר. 

Picture of רן בר-זיק

רן בר-זיק

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

11 תגובות

  1. תיקון קטן:
    כל הקוד של וורדפרס נמצא כבר בתוך ה-docker image, כך שטעינת התיקייה site לתוך /var/www/html מונע אפשרות לשדרג בהמשך או כרגע אם המטרה היא לצרכי בדיקות.

    מה שעדיף לעשות, הוא רק למפות את ./site-content:/var/www/html/wp-content, זה יאפשר להתעסק רק עם התוכן המשתנה של וורדפרס מבלי לטעון לתיקייה הנוכחית את כל קוד המקור של וורדפרס.

    ועוד משהו קטן, כדאי תמיד לציין tag, כך שאם אתה רוצה לעבוד על גרסה כלשהי של וורדפרס 4.9 שים wordpress:4.9, כמובן שאפשר להיות ספציפיים יותר, אבל גם אם הכוונה היא לעבוד על ה-latest, כדאי לציין גם את זה.

  2. כמה זה בטוח להרים db כמו כאן על דוקר? ראיתי בהרבה מקומות הסתייגויות… נדמה לי שגם בעושים תוכנה דיברו על זה.

    אתה בעצם שומר על הדיסק את התוכן של הdb ככה שאם הקונטיינר יפול תוכל לשחזר אותו?
    אני מתייחס לשורה של – ./db:/var/lib/mysql

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

  3. היי
    תותחים..ממש עניני ומופרט…
    שאלה קטנה..מה ההבדל בין שמירה שביצעתם ל pvc..?
    תודה

  4. שאלה – נניח שעד עכשיו השתמשתי ב-xampp ויש לי התקנת וורדפרס בתיקיית ה-htdocs עם DB בתיקיה הרלוונטית של xampp והכל.

    האם אני יכול ליצור קובץ docker-compose.yml עם הנתונים התואמים להתקנה הקיימת והוא יריץ לי אותה בקונטיינר?

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

  6. בווינדוס 10 HOME הImage של DB עושה ריסט אינסופי..
    יש למישהו פתרון?
    גם הוספה של
    command: "–innodb_use_native_aio=0"
    לא עזרה

  7. סדרת מדריכים מעולה (עזרה לי להרים מכונת פיתוח בדקות בודדות) עם זאת אני רואה שהקבצים תחת user www-data מה שלא מאפשר לי לשמור את הקבצים שאני עורך בצורה נוחה.

    יש פתרון דוקרי לנושא?

  8. הסדר לא משנה?
    קודם הרי אמורים להקים db ורק אז את האפליקציה שמעליו.

    כאן בקובץ docker-compose.yml. כתבת הפוך

השארת תגובה

פוסטים מומלצים

פוסטים נוספים שכדאי לקרוא

לוגו פודקאסט בשם פרונט קאסט

למפתחי ובוני אתרי אינטרנט

אפריל 21, 2024 2 תגובות

פתרונות ומאמרים על פיתוח אינטרנט

דצמבר 17, 2023 תגובה אחת

פתרונות ומאמרים על פיתוח אינטרנט

נובמבר 26, 2023 אין תגובות

רספברי פיי

יוני 16, 2024 2 תגובות

רספברי פיי

הרצת גו על רספברי פיי

עולם הרספברי פיי והמייקרים ניתן לתפעול בכל שפה – לא רק פייתון או C – כאן אני מסביר על גו

ספטמבר 2, 2024 11 תגובות

תקינות אתרי אינטרנט

פברואר 25, 2024 אין תגובות