PracticU

סקריפט שמתקין npm
פרויקט NodeJS

בלי כתוביותעם כתוביות
PracticU › קורס Terraform - DevOps - Azure & AWS › סקריפט שמתקין npm פרויקט NodeJS
מילון מושגים:
Terraform - כלי להגדרת תשתית כקוד, שמאפשר ליצור ולנהל משאבי ענן ותשתית בעזרת קובצי תצורה.
EC2 - שירות של AWS להפעלת שרתים וירטואליים בענן לפי דרישה ולפי שימוש.
Bash - מעטפת שורת פקודה נפוצה במערכות Linux, המשמשת להרצת פקודות ולכתיבת סקריפטים.
sudo - פקודה ב-Linux שמריצה פקודה אחרת בהרשאות מוגברות, בדרך כלל של משתמש העל (root).
root - משתמש העל במערכות Linux, בעל הרשאות מלאות לכל פעולה. גם הרמה העליונה בעץ של תיקיות או נתונים.
משתנה סביבה - ערך בעל שם שמוגדר במערכת ההפעלה ומשמש תוכנות להגדרות, כמו נתיבים או מפתחות תצורה.
Git - מערכת מבוזרת לניהול גרסאות של קוד, שעוקבת אחר שינויים ומאפשרת עבודה משותפת בענפים.
ריפוזיטורי - מאגר שמרכז את קוד המקור של פרויקט ואת היסטוריית השינויים שלו, לרוב מנוהל ב-Git.

סקריפט שמתקין npm - פרויקט NodeJS

בשיעור זה מתחברים ב-SSH למכונה הווירטואלית הריקה בענן, לומדים איך מנסחים סקריפט התקנה ב-user data של Terraform, מתקינים גיט ו-Node.js ומריצים התקנה אוטומטית של האתר, ומסיימים בהבנה מה עוד חסר לחיבור לדאטאבייס.
נושאי הסיכום המוצגים בשיעור:
1. התחברות ב-SSH למכונה: ה-EC2 שלנו עובד ריק עם מערכת הפעלה בלבד, ונכנסים אליו ב-SSH עם המפתח הפרטי והמשתמש המתאים, אחרי אימות שהמכונה במצב running וכתובת ה-IP תקינה, והשרת שואל אותנו אם טביעת האצבע של התעודה הדיגיטלית נכונה, שמאשרת שזה השרת הנכון ושאין מישהו שנכנס באמצע התקשורת, ואחרי אישור אנחנו בפנים.
2. מהו user data ב-Terraform: באובייקט של ה-EC2 ב-Terraform יש מאפיין שנקרא user data שמקבל פקודות לביצוע, הוא ירוץ פעם אחת בלבד במעמד ההתקנה, יעשה כל מה שנרצה ויהיה סקריפט חד פעמי, והכוונה לבדוק קודם את הפקודות בשרת ורק אחר כך להעתיק אותן ל-Terraform כדי שבהקמת המכונה הסקריפט ירוץ אוטומטית.
3. איך מכניסים כמה שורות למשתנה אחד: במקום לכתוב הכל בשורה אחת משתמשים בסימן מיוחד של שני חצים פנימה עם זיהוי שבוחרים, נהוג לקרוא לו EOF, סוף קובץ, וכל מה שבין שני הסימנים נחשב כאילו שורה אחת, וצריך גם לציין באיזה shell להריץ את הפקודות, למשל bash, שהוא כמו שורת הפקודה בווינדוס, ובעולם הלינוקס יש יותר מ-shell אחד כמו שגם בווינדוס יש כמה אפשרויות.
4. בדיקת מערכת ההפעלה ומנהל ההתקנות: לפני שמתקינים גיט בודקים איזו מערכת הפעלה יש, כי יש שני מנהלי התקנות שעושים את אותו הדבר, apt ששייך לעולם אובונטו ו-dnf ששייך לפדורה, ובדיקת קובץ מידע המערכת מגלה שהמכונה על פדורה, ולכן הפקודות צריכות להיות תואמות לפדורה ומשתמשים ב-dnf.
5. עדכון מאגר התוכנות: הפקודה של העדכון דורשת הרשאות מנהל על, ומוסיפים לה sudo, ומוסיפים לה מינוס y כדי שלא תשאל שאלות כן לא, ותמיד מתחילים בעדכון המאגר המרכזי של התוכנות, אחרת בהתקנת הגיט אפשר בטעות להתקין גרסה ישנה, ושווה לדעת שהסקריפט של ה-user data ירוץ בפועל תחת ה-root כי הוא רץ פעם אחת במעמד ההתקנה, ואנחנו בשרת תחת המשתמש הרגיל.
6. מעבר ל-root לתרגול: כדי לתרגל פקודות כמו שהן יהיו בסקריפט עוברים ל-root, וכשמבקשים החלפת משתמש רגילה הוא דורש סיסמת root שאין לנו, ולכן מריצים את פקודת ההחלפה עם sudo, כי sudo הוא זכות להריץ פקודות בשם ה-root בלי סיסמה, ואחרי ההחלפה הסולמית מחליפה את הדולר בשורת הפקודה ואנחנו תחת root, ואז ה-sudo הופך מיותר בפקודות שאחר כך.
7. התקנת גיט ו-Node.js: מתקינים בפקודה אחת בלי שאלות את גיט ואת Node.js בגרסה היציבה האחרונה, ושווה לדעת שכל הגרסאות היציבות שנתמכות שנים ארוכות הן במספרים זוגיים, והגרסאות האי זוגיות נתמכות רק כחצי שנה, ולכן בוחרים תמיד את הגרסה הזוגית האחרונה, ואחרי שההתקנה עברה בהצלחה מעתיקים את הפקודה לתוך הסקריפט.
8. עדכון NPM לגרסה האחרונה: ה-Node.js שהותקן כולל גם את NPM אבל לא בטוח שהוא האחרון, וכדי לוודא מריצים התקנה גלובלית של NPM בגרסה האחרונה, והמינוס g אומר שההתקנה תהיה גלובלית בכל מערכת ההפעלה עבור כל המשתמשים, וזו גם סיבה נוספת לעדכון המאגר בתחילת הסקריפט.
9. סידור הסקריפט עם הערות: מוסיפים לסקריפט הערות עם סולמית, כמו אזור ההתקנות ואזור הגדרת האתר, כדי שיהיה קל יותר להבין את הסקריפט בעוד חצי שנה, ומפרידים ברווח בין אזור הנתונים היבשים לפקודות הטכניות.
10. משתנה סביבה לנתיב האתר: מגדירים משתנה סביבה שיכיל את הנתיב של האתר, כדי שבפקודות הבאות לא נצטרך לרשום את הנתיב בכל פעם מחדש, ואם יום אחד נרצה להחליף את המיקום לא נצטרך לחפש בקוד את כל המקומות וגם נחסוך טעויות כתיב, והמשתנה יושב בזיכרון עד סגירת החיבור ונעלם אחרי אתחול, ואפשר להדפיס את ערכו ולראות אותו.
11. שכפול הפרויקט מהאינטרנט: מריצים git clone שיוריד מהאינטרנט את ה-repository של הפרויקט וישים אותו בתיקייה מהמשתנה, ואפשר גם את כתובת ה-repository לשים כמשתנה משלו, וכך מפרידים בין נתונים יבשים לבין פקודות לביצוע ומאוד קל לתחזק, והבדיקה בשרת מראה שנוצרה תיקיית הפרויקט עם כל הקבצים שהורדו.
12. כניסה לתיקיית הפרויקט: הפקודה הבאה נכנסת לתיקיית הפרויקט, ושוב חושבים איך בלי המשתנה היינו צריכים לכתוב את שם התיקייה בכל מקום ואחר כך לחפש את כל המקומות להחלפה, וכך הנתונים נמצאים באזור מבודד של נתונים יבשים ואפשר לעדכן אותם בקלות.
13. התקנת המודולים עם NPM: בתוך תיקיית הפרויקט יש קובץ הגדרות שמכיל רשימה של כל הספריות שהשרת צריך ומאיזו גרסה, הקוד של האתר דורש אותן בתחילתו, למשל ספריית החיבור ל-MySQL שכוללת את האופן להתחבר ולדבר עם הדאטאבייס, והספריות האלה קיימות באינטרנט ולא מצורפות לפרויקט, ומי שמוריד ומתקין אותן הוא כלי ה-NPM עם הפקודה להתקנה, והבדיקה מראה שהוא התקין מאה ושש חבילות ונוצרה תיקיית המודולים.
14. ניסיון הפעלה ראשון והשגיאה הצפויה: מריצים את פקודת ההפעלה של האתר ומקבלים הודעת שגיאה שהוא לא מצליח להתחבר לפורט שלוש שלוש אפס שש של ה-MySQL בכתובת הפנימית, וזה מובן כי ה-MySQL לא נמצא על המחשב הזה בכלל, ומהודעת השגיאה אפשר לראות בדיוק את שורת הקוד בקובץ השרת שמעיפה את השגיאה, ובסרטון הבא מחברים את האתר ל-MySQL.
סיכום:
בשיעור זה נכנסנו למכונה הריקה בענן ב-SSH והתחלנו לבנות את הסקריפט שיתקין את האתר אוטומטית במעמד הקמת המכונה, למדנו את מבנה ה-user data עם הסימן המיוחד ובחירת ה-shell, עדכנו את מאגר התוכנות והתקנו גיט ו-Node.js בגרסה יציבה זוגית ו-גם NPM בגרסה האחרונה, סידרנו את הסקריפט עם הערות ומשתני סביבה שמפרידים נתונים מפקודות, שכפלנו את הפרויקט מהאינטרנט והתקנו את כל המודולים שהוא דורש, וראינו את שגיאת ההתחברות ל-MySQL שתיפתר בשיעור הבא.
SR13885HE

פרקי ההרצאה: סקריפט שמתקין npm פרויקט NodeJS

  1. 00:00

    התחברות ב-SSH למכונה הריקה

  2. 00:37

    אימות ה-fingerprint והכניסה

  3. 01:12

    סקריפט חד פעמי עם user data

תמלול ההרצאה: סקריפט שמתקין npm פרויקט NodeJS

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

  1. 00:02

    שלום לכולם. בהרצאה זו נכתוב script בתוך מכונה וירטואלית שלנו, נתחבר אליה ב-SSH. כרגע Instance שלנו, ה-EC2 שלנו עובד ריק. אין שם שום דבר בפנים חוץ ממערכת ההפעלה ואנחנו מתחברים פנימה.

  2. 00:17

    עושים SSH מינוס i, נותנים לו את ה-private key וכותבים עם איזה user להתחבר, שטרודלה, איזה IP להתחבר. אנחנו פה מוודאים שהוא במצב של running וה-IP שלו תקין, מאה חמישים ושבע בסוף, ואנחנו מתחברים פנימה.

  3. 00:32

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

  4. 00:46

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

  5. 01:04

    אז ב-Terraform באובייקט מסוג AWS Instance יש מאפיין שנקרא user data ו-user data הזה מקבל פקודות לביצוע. זה ירוץ פעם אחת בלבד, יעשה כל מה שאנחנו רוצים וזהו.

  6. 01:18

    זה script חד פעמי. אני יכול לעשות פה איזה פקודה שבא לי, אבל אני לא רוצה שורה אחת של פקודות. אני לא רוצה פה לכתוב git clone. למה אני לא רוצה את זה ככה?

  7. 01:30

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

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

ההרצאה הקודמת: פקודת Output - ב-Terraform - פרויקט NodeJS

ההרצאה הבאה: הגדרת קובץ env - פרויקט NodeJS

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

  • הסבר על NPM
  • סקריפט עם לולאת for
  • הדגמה של סקריפט אמיתי
  • סקריפט פייתון ל-NETCONF

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

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