כאשר אנו מפתחים בסביבת Node.js, לא משנה אם זה API כלשהו או אפליקציית פרונט, עלינו להריץ את הקוד שלנו – כאן נכנס PM2 אשר מאפשר לנו לעשות זאת בסטייל 🕺🏼.

מה זה PM2

PM2 הוא מנהל תהליכים (Process Manager) ל-Node.js, הוא שמיש בעיקר על שרתים אשר אמורים להריץ את הקוד שלנו, אך הוא שמיש גם בסביבת פיתוח לוקלית.

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

כאמור לכלי זה יש מגוון רחב של פיצ׳רים, ביניהם:

התקנת PM2

PM2 הוא חבילה המבוססת על Node.js, כלומר ההתקנה שלו מתבצעת ע״י שימוש ב-NPM, שהוא מנהל החבילות של Node.js.

יש לוודא כי מותקן במחשב Node.js ו-NPM לפני שיהיה ניתן להתקין את PM2.

על מנת להתקין, כל שעלינו לעשות זה לפתוח את ה-Terminal שלנו ולהריץ את הפקודה הבאה:

npm install pm2 -g

לאחר ההתקנה על מנת לוודא שהכל הותקן כמו שצריך ניתן להקליד pm2 -v ולאחר מכן ללחוץ על Enter ואז אנו אמורים לראות את גרסת הכלי.

ניהול תהליכים עם PM2

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

רישום תהליכים

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

pm2 start app.js

מידה ולאפליקציה שלנו יש פקודת התחלה שהיא קצת יותר מורכבת מהרצה של הקובץ, לרוב נגדיר אותה כ-NPM Script בקובץ package.json של האפליקציה שלנו.

על מנת להגדיר ל-PM2 להריץ NPM Script עלינו להריץ את הפקודה במבנה הבאה:

pm2 start npm -- run "{SCRIPT_NAME}"

שימו לב כי יש להחליף את {SCRIPT_NAME} בשם ה-NPM Script הרלוונטי.

הגדרת שם תהליך

במידה ויש לנו הרבה תהליכים או במידה ונרצה לתת לתהליך הספציפי שם, ניתן להוסיף את הדגל --name

pm2 start app.js --name "My Application"

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

צילום מסך של רישום תהליך עם PM2

הגדרת Watcher

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

npm start app.js --watch

הגדרת קובץ לוגים

בברירת המחדל הלוגים יושבים בנתיב .pm2/logs תחת תיקיית הבית של המשתמש. לפעמים נרצה להגדיר נתיב ייחודי לקובץ הלוגים של התהליך שלנו, נוכל לעשות זאת ע״י שימוש בדגל --log באופן הבא:

pm2 start app.js --log /var/log/my-app.log

הוספת חתימת זמן ללוגים

לדעת מתי שגיאה או פעולה מסויימת בוצעה היא פרמטר חשוב, במיוחד כאשר נרצה לחקור אירוע עבר, על מנת להגדיר ל-PM2 להוסיף חתימת זמן ללוגים, נוסיף את הדגל --time באופן הבא:

pm2 start app.js --time

צפייה ברשימת תהליכים

כאשר נרצה לצפות ברשימת התהליכים המוגדרים, נוכל להשתמש בפקודה ls או list.

pm2 list

בתגובה לפקודה זו נראה טבלה עם התהליכים הרשומים ומידע נוסף אודותם.

צילום מסך של תצוגת תהליכים ב-PM2.

ניהול תהליכים

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

טעינה מחדש של תהליך

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

pm2 reload {PROCESS_ID_OR_NAME}

ניתן להשתמש במזהה התהליך (id) או בשם התהליך (name), אותם ניתן להשיג ע״י שימוש בפקודת list.

פקודות Restart ו-Reload זהות, אך ההבדל הוא ש-Reload מאפשר לאתחל את התהליך עם זמן השבתה השואף ל-0.

שימו לב שניתן לאתחל את כל התהליך ע״י העברת המילה all בתור מזהה התהליך או שם התהליך.

עצירת תהליך

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

pm2 stop {PROCESS_ID_OR_NAME}

מחיקת תהליך

כאשר נרצה למחוק תהליך לגבי נוכל לעשות זאת ע״י שימוש בפרוקה delete ולאחר מכן את מזהה התהליך, שם התהליך או את המילה all על מנת למחוק את כלל התהליכים.

pm2 delete {PROCESS_ID_OR_NAME}

צפייה בדשבורד ניטור

אחד הדברים שאני הכי אוהב בכלי הזה הוא הדשבורד אשר מאפשר לנו לראות במבט על את כל התהליכים שרשמנו, את הססטוס שלהם ואף את הלוגים בלייב.

על מנת לראות את הדשבורד עלינו להריץ את הפקודה הבאה:

pm2 monit

בתגובה אנו נראה מסך הדומה למסך הבא:

צילום מסך של ניטור תהליכים עם PM2

החסרון היחיד של שימוש בפקודת monit הוא שאנחנו יכולים לראות את זה רק במכונה עליהם רצים התהליכים. אך אל חשש יש פתרון 💪🏽, ניתן בקלות לחבר את המכונות שלנו ל-Keymetrics מה שיאפשר לנו לאסוף את הנתונים של כלל השרתים שיש לנו לראות אותם בממש וובי בכל רגע.

צפייה בלוגים

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

pm2 logs {PROCESS_ID_OR_NAME}

לפקודת logs ישנן מספר דגלים אשר מאפשרים לנו לקסטם את תצוגת הלוגים:

לרשימת הדגלים המלאה ודוגמאות אני ממליץ לעבור לדוקומנטציה הרישמית.

סיכום

PM2 הוא אחד הכלים שאני ממליץ אם אתם עובדים עם Node.js או אפילו אם אתם עובדים עם Vue.js או ריאקט ודומיהם.

    כתיבת תגובה

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

    שתפו