PracticU

התקנת PM2
פרויקט NodeJS

בלי כתוביותעם כתוביות
PracticU › קורס Terraform - DevOps - Azure & AWS › התקנת PM2 פרויקט NodeJS
מילון מושגים:
Node.js - סביבת ריצה שמאפשרת להריץ קוד JavaScript מחוץ לדפדפן, בעיקר בצד השרת.
npm - מנהל החבילות של Node.js, המשמש להתקנה ולניהול ספריות JavaScript בפרויקט.
root - משתמש העל במערכות Linux, בעל הרשאות מלאות לכל פעולה. גם הרמה העליונה בעץ של תיקיות או נתונים.
מעטפת - תוכנה שמפרשת פקודות של המשתמש ומעבירה אותן למערכת ההפעלה, למשל Bash או PowerShell.
לוג - רישום מתועד של אירועים ופעולות שמתרחשים במערכת או בתוכנה, המשמש למעקב ולאיתור תקלות.
HTTP - פרוטוקול להעברת דפי אינטרנט ונתונים בין דפדפן לשרת. הגרסה המאובטחת שלו היא HTTPS.
תעודה דיגיטלית - מסמך מוצפן שמאשר את זהותו של אתר או שרת וקושר אותו למפתח ציבורי, ומונפק על ידי רשות אישורים.
Terraform - כלי להגדרת תשתית כקוד, שמאפשר ליצור ולנהל משאבי ענן ותשתית בעזרת קובצי תצורה.

התקנת PM2 פרויקט NodeJS
סקריפט User Data רץ רק פעם אחת, בעת יצירת המכונה, ולכן NPM start מעלה את האתר רק בהפעלה הראשונה. אחרי Reboot האתר נופל. ההרצאה מראה איך PM2 פותר את זה, כך שהאתר עולה לבד אחרי כל הפעלה מחדש.
השלבים העיקריים
1. התקנה: מתקינים את PM2 גלובלית עם npm install -g. הסקריפט רץ כ-root, ולכן גם הבדיקה נעשית ב-root.
2. משתנה הסביבה PM2 Home: מגדירים אותו עם export. משתנה שהוגדר עם export עובר בירושה לתוכנות שנפתחות מה-shell, כמו PM2. משתנה בלי export נשאר פרטי ל-shell. כך PM2 יודע באיזו תיקייה לשמור את הקבצים שלו, ונוצרת תיקייה .pm2.
3. רישום ב-systemd: הפקודה pm2 startup יוצרת קובץ שמסביר ל-systemd איך להפעיל ולעצור את PM2 אחרי אתחול. בודקים שהקובץ קיים.
4. הפעלת האתר דרך PM2: מריצים pm2 start עם npm ונותנים שם לתהליך. הסימן -- מעביר את מה שאחריו כמו שהוא ל-npm, כאן הפקודה start. אפשר לבדוק ב-pm2 list שאין restarts.
5. שמירת המצב: pm2 save כותבת את רשימת התהליכים לקובץ dump, ו-PM2 טוען אותו אחרי אתחול. בסקריפט מוסיפים אחריו sleep של שתי שניות ו-sync, כדי לוודא שהקובץ נכתב לדיסק.
6. בדיקה מקצה לקצה: מריצים TF apply, מקבלים מכונה חדשה שהאתר עובד בה בלי התערבות, ואז עושים Reboot. אחרי האתחול (uptime מראה אפס דקות) האתר עולה שוב.
פקודות והגדרות
- pm2 log עם שם התהליך מציג את הפלט של האפליקציה, וזה עזר לגלות נפילות כשלא היה export ל-PM2 Home.
- לתיעוד בתוך הסקריפט כותבים את הפלט של pm2 list ו-ls -a לקובץ log, למשל בתיקיית root. כך רואים אחרי היצירה אם dump נוצר ואם היו restarts.
שימו לב
- הפתרון עם Crontab אחרי Restart אפשרי, אבל לפי המרצה פחות טוב מ-PM2.
- גם אחרי יצירת מכונה חדשה צריך להמתין מעט לפני שהאתר עונה, ורק אז לבצע Refresh. השתמשו ב-HTTP, כי אין תעודה דיגיטלית.
אחרי ההרצאה אפשר להקים באמצעות Terraform מכונה שמריצה את האתר שלה ועולה מחדש בעצמה אחרי כל אתחול.
השיעור הבא בקורס: משתנים מסוג var ב-Terraform פרויקט NodeJS

פרקי ההרצאה: התקנת PM2 פרויקט NodeJS

  1. 00:00

    בעיית ההפעלה החד פעמית אחרי Reboot

  2. 00:42

    אפשרויות לפתרון הבעיה

  3. 01:18

    הגדרת משתני הסביבה ל-PM2

  4. 01:57

    תורשת משתני סביבה עם Export

  5. 02:30

    יצירת תיקיית PM2 Home

תמלול ההרצאה: התקנת PM2 פרויקט NodeJS

הטקסט המלא של הדקות הראשונות בהרצאה «התקנת PM2 פרויקט NodeJS» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    שלום לכולם. בסרטון זה נפתור את הבעיה ש-NP Start עובד בתוך הסקריפט שלנו, אבל הוא עובד חד פעמי בזמן יצירה של המכונה כי הסקריפט שלנו User Data, החלק הזה מופעל חד פעמי כשיוצרים את המכונה, את ה-Instance ואז גם NP Start מפעיל לנו את האתר אבל באופן חד פעמי.

  2. 00:25

    תראו כרגע עשיתי TF Apply, נוצרה לי מכונה חדשה בכתובת חדשה והאתר עובד. אבל אם אני אעשה הפעלה מחדש פה Right Click Reboot Instance אחרי הפעלה מחדש היא לא תריץ את הסקריפט הזה שוב ו-NPM Start לא יתבצע ואתר אינטרנט לא יעלה.

  3. 00:44

    אנחנו רואים שזה לא עובד לנו HTTP פה לא עובד. אז יש לי כמה דרכים לפתור את זה. דרך אחת שנחשבת פחות טובה זה בעזרת משימה מתוזמנת שמופעלת אחרי ה-Restart.

  4. 00:57

    מה שנקרא Crontab. אבל יש כלי הרבה יותר חזק שנקרא PM2. אני עובר ל-Root כי הסקריפט שלי רץ תחת Root ואני עכשיו בעצמי תחת User Root ואני בודק שהפקודה תקינה.

  5. 01:10

    אם הפקודה תקינה אני שם אותה בסקריפט NPM Install -G מתקין את זה גלובלי. עכשיו נגדיר משתנה סביבה שכבר קיים בתוך סקריפט. זוכרים השורה הזאת?

  6. 01:21

    וזה משתנה סביבה שמכיל בפנים את התיקייה של האתר שלנו. אפשר לעשות עוד משתנה סביבה ש-PM2 צריך אותו שנקרא PM2 Home. עכשיו שימו לב, אפשר לעשות אותו עם מילת Export או בלי מילת Export.

  7. 01:36

    מה ההבדל בין לכתוב Export או לא לכתוב Export? ההבדל שתוכנות שיפתחו מתוך השאל הזה. זאת אומרת שאני בתוך שאל עכשיו ארשום איזושהי תוכנה.

  8. 01:48

    נניח PM2 Start תרוץ לי תוכנת PM2. היא יורשת את כל משתני הסביבה שהם מסוג Export. משתנה סביבה שהוא בלי Export כמו זה לא עובר לילדים של ה-Process הזה.

  9. 02:04

    זאת אומרת תוכנת שאל הזאת יהיה לה ילד בשם PM2. תוכנת יפתח תוכנה אחרת ובתוך ה-PM2 יהיה Export הזה. הוא ידע באיזה תיקייה לשים את כל הקבצים של PM2.

  10. 02:17

    לעומת זאת, בתוך PM2 לא יהיה Up Dir כי לא עשיתי לו Export בהתחלה. כאילו Up Dir זה משתנה סביבה פרטי רק של השאל הזה הוא לא עובר לבנים, הוא לא עובר לילדים.

  11. 02:30

    עכשיו אני רוצה ש-PM2, התוכנות של PM2 ישתמשו בתיקייה הזאת. אז אני שם להם את המשתנה סביבה הזה ושם אותו ב-Export ועכשיו כשאני אעשה Echo אתם תראו שהוא קיים בדיוק כמו Up Dir זה נראה אותו דבר, אבל ה-Export עובר בירושה לילדים ואני יוצר תיקייה ויש לי פה תיקייה חדשה נקודה PM2.

  12. 02:51

    לפני כן לא הייתה. שימו לב, A- חושף לי את כל התיקיות עם

לקורס המלא: קורס Terraform אונליין ל‑DevOps

ההרצאה הקודמת: סקריפט ב-AWS CLI - חלק 2 - פרויקט NodeJS

ההרצאה הבאה: משתנים מסוג var - ב-Terraform - פרויקט NodeJS

הרצאות קשורות מקורסים אחרים

  • מבוא ל-NodeJS
  • התקנת MongoDB
  • התקנת HAXM
  • התקנת eclipse

קורסים נוספים במסלול

  • קורס AWS - ניהול מכונה וירטואלית בענן
  • קורס קוברנטיקס - Kubernetes
  • קורס Docker - עם Swarm Cluster
  • קורס DevOps - Ansible
  • קורס PowerShell
  • קורס Git ו-GitHub עם Visual Studio