מדריך Node.js: מעבר לסביבת פרודקשן

כך טוענים אפליקצית Node.js לסביבת Production על Heroku.
Node.js Logo

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

כמעט כל שירות משמעותי היום תומך ב-Node.js. מ-Azure של מיקרוסופט ועד שרתי הענן של מיקרוסופט. ישנם גם שירותי shared (לא הרבה) שמאפשרים אחסון אפליקציות Node.js. אחד משירותי הענן היותר פופולריים הוא הרוקו (Heroku) שמאפשר גם אחסון אפליקציות עם נתוני תעבורה נמוכים בחינם.

אחד הדברים הטובים בהרוקו הוא הידידותיות הרבה. יש לו ממש מדריך שמסביר איך ליצור אפליקצית Node.js. כל מה שצריך זה ליצור חשבון (זה בחינם) ואז להכנס אל הדף הזה.

באופן עקרוני, אנחנו צריכים להתקין את Heroku toolbelt. אפשר להתקין אותו מכל סביבה שהיא: חלונות, לינוקס או מק. אחרי ההתקנה, כל הפקודות שלו ניתנות להרצה מהקונסולה או מה-cmd אם אתם בחלונות. אחרי שהתקנו, כל מה שצריך לעשות זה heroku login. ממש לפי ההוראות:


$ heroku login
Enter your Heroku credentials.
Email: [email protected]
Password (typing will be hidden): 
Your Heroku account does not have a public ssh key uploaded.
Could not find an existing public key at ~/.ssh/id_rsa.pub
Would you like to generate one? [Yn] Y
Generating new SSH public key.
Uploading SSH public key /home/ran/.ssh/id_rsa.pub... done
Authentication successful.
$ heroku keys
=== [email protected] Keys
ssh-rsa AAAAB3NzaC...8fzCB2t0S9 ran@ran-Inspiron-1525

עכשיו הכל מוכן. באופן עקרוני heroku עובדת עם git כאשר אנו דוחפים את הקוד שלנו ל heroku master כאשר אנו רוצים לעדכן את הגרסה.
הדבר הראשון שאנח עושים זה ללכת לתיקיה שיש בה את המוצר שלנו. לצורך העניין זו התיקיה example-nodejs-clock-heb. אפשר להוריד אותה מ-GitHub. מיד אחרי שנכנסנו אליה, אנו נכתוב
heroku create

ואז נוסיף את כל הקבצים _אם צריך) ל-git באמצעות git add ו-git commit. מי שלא יודע מה זה git, מומלץ לו להשקיע מספר דקות בלמידה של זה.

לפני שאנחנו עושים push, יש כמה דברים שצריך לעשות. ראשית אנו צריכים ליצור package.json. מדובר בקובץ שמכיל מידע על האפליקציה שלנו. איך יוצרים? עם npm init. פשוט מקלידים בתיקיה של האפליקציה ועוקבים אחר ההוראות:


$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sane defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install  --save` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
name: (example-nodejs-clock-heb) 
version: (0.0.0) 1.0.0
description: This is an example application for socket.io.
entry point: (app.js) 
test command: nodejs app.js
git repository: (https://github.com/barzik/example-nodejs-clock-heb.git) 
keywords: clock example socket.io
author: Ran Bar-Zik
license: (BSD-2-Clause) 
About to write to /var/www/html/example-nodejs-clock-heb/package.json:

{
  "name": "example-nodejs-clock-heb",
  "version": "1.0.0",
  "description": "This is an example application for socket.io.",
  "main": "app.js",
  "scripts": {
    "test": "nodejs app.js"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/barzik/example-nodejs-clock-heb.git"
  },
  "keywords": [
    "clock",
    "example",
    "socket.io"
  ],
  "author": "Ran Bar-Zik",
  "license": "BSD-2-Clause",
  "bugs": {
    "url": "https://github.com/barzik/example-nodejs-clock-heb/issues"
  }
}


Is this ok? (yes) yes

מאוד מאוד חשוב להוסיף לקובץ הזה את המודולים שאנו צריכים. dependencies הם נקראים בשפת Node.js. אם אני צריך את socket.io, זה מה שאני אוסיף.


  "dependencies": {
      "socket.io": "*"
  },

הדבר הבא שאני אוסיף הוא קובץ שכולל את השורה שאותה אני צריך לכתוב בשורת הקונסולה על מנת להפעיל את האפליקציה. עד עכשיו כתבנו לתוך קובץ js ועל מנת להפעיל אותו כתבנו nodejs app.js, אם app.js היה שם הקובץ שלנו. עכשיו אנחנו צריכים "לומר" ל-heroku איך להפעיל את האפליקציה שלנו. הקובץ הזה נקרא Procfile והוא כולל את השורה הבאה:


web: node app.js

בגדול? זהו. אפשר לעשות את ה-push heroku master, אבל לפעמים יש גם שינויים בקוד האפליקציה עצמה שצריך לבצע:

כאשר אנו מפעילים את השרת בסביבת הענן, אנחנו לא יכולים לקבוע את הפורט או להניח שמדובר יהיה בפורט 80 או פורט 3000, יש לנו את ה-process.env שמכיל כמה משתנים חשובים. החשוב שבהם הוא ה-PORT. איך זה עובד? ככה:


var port = process.env.PORT || 3000;

app.listen(port); 

לעומת:


app.listen(3000); 

לא כזה נורא, נכון? עושים push. אחרי שעושים push צריך לעשות את ה-scaling. כיוון שזה חשבון חינם אנו נסתפק בשורה הבאה


heroku ps:scale web=1

אם הכל תקין, נכתוב heroku open על מנת שדפדפן ברירת המחדל יפתח על האפליקציה. אם משהו משתבש (והוא משתבש במצבים של not hello world application) אז לא צריך להכנס ללחץ. כדי לראות את הלוגים בזמן אמת צריך להקליד:


heroku logs --tail

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

בגדול כל הצעדים האלו ואחרים מפורטים במדריך המאוד יפה של heroku. גם אם אתם לא בוחרים להשתמש ב-heroku אלא בשירותים אחרים – גם להם יש הסברים לא פחות מפורטים. אני בחרתי ב-heroku כי הוא חינמי לאפליקציות פשוטות ופופולרי מאוד.

אפשר להתקין Node.js בכל מקום. אפילו ברספברי פיי!

במדריך הבא אנו נלמד ליצור מודול.

⚠️ תזכורת – המדריכים האלו הם רק טעימה, בספר שלי "ללמוד Node.js בעברית" יש הסברים מלאים ומקיפים על השפה המיועדים ללימוד עצמי. עם תרגילים והסברים. הספר יצא לאור בשיתוף הקריה האקדמית אונו ובתמיכת החברות אלמנטור, ו-Iron source ונערך טכנית על ידי בנג'י גרינבאום (מפתח ליבה של Node.js), גיל פינק ומתכנתים מעולים נוספים. 

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

מיקרו בקרים

חיבור מצלמה למיקרובקר

חיבור מצלמה למיקרו בקר ויצירה של מצלמת אבטחה מרחוק בעלות של 20 שקל.

תמונה מצוירת של רובוט שמנקה HTML
יסודות בתכנות

סניטציה – למה זה חשוב

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

רספברי פיי

התקנת OpenCanary על רספברי פיי

מה זה OpenCanary ואיך אפשר להתקין אותה על רספברי פיי ולשדרג את אבטחת הרשת הביתית או המשרדית.

גלילה לראש העמוד