Node.JS პროექტის სერვერზე გამართვა
Last updated
Last updated
და დგება ის მომენტი, როდესაც შენს აპლიკაციას სული უნდა შთაჰბერო, სერვერზე გამართო, დომენი მიაბა და -ზე შესვლა შენსგარდა სხვასაც შეეძლოს.
ჩვენ ვიცით ლოკალურად როგორ უნდა გავუშვათ დეველოპმენტ სერვერი:
და ეგ არი.
მაგრამ… პროდაქშენის სერვერზეც ვიზამთ მსგავსად?
ჰმმ.. კი შეგვიძლია. მაგრმ არ უნდა ვქნათ. ამაზე ოდნავ მერე.
პროდაქშენში უნდა გამოვიყენოთ სხვადასხვა ხელსასწყო იმისათვის, რომ სერვერზე ჩვენი აპლიკაცია საათვით მუშაობდეს. ამ ხელსაწყოებს წარმოადგენს nginx და pm2.
ეს ორი ხელსაწყო უზრუნველყოფს იმას, რომ ჩვენმა აპლიკაციამ ოპტიმალურად გამოიყენოს სერვერის რესურსი, გვაძლევს საშუალებას არაერთი აპლიკაცია გავმართოთ სერვერზე, გვქონდეს ქეშირება და ა.შ.
პირველ რიგში, როდესაც დავლოგინდებით სერვერზე საჭიროა, რომ გავუშვათ ბრძანება:
sudo apt update
ეს ბრძანება ფექიჯების შესახებ ინფორმაციას დაააფდეითებს სერვერზე იმისათვის, რომ შემდგომში sudo apt install something
-ს რომ გავუშვებთ, იცოდეს ეს something
საიდან გადმოწეროს.
ნოუდისათვის კი:
curl https://deb.nodesource.com/setup_16.x | sudo bash
sudo apt install nodejs
ასევე გვჭირდება პროცესების მართვის ხელსაწყო pm2:
sudo npm --global install pm2
ლოკალურად ჩვენ შეგვიძლია Node.JS-ის პროექტი გავუშვათ ჩვეულებისამებრ node [entry-file].js
-ით. მაგრამ პროდაქშენის სერვერზე, მსგავსად ნოუდის აპლიკაციას ვერ გავუშვებთ.
ზემო აღნიშნული სკრიპტით ნოუდის აპლიკაციის გაშვებას აქვს რამოდენიმე ნაკლი:
თუ რაიმე ხარვეზი მოხდება ჩვენი გაშვებული სკრიპტი შეწყვეტს მუშაობას და ისევ ხელით უნდა გავუშვათ ხელმეორედ პროექტი.
ზემოაღნიშნულით პროექტის გაშვებისას, რეალურად ეს პროცესი არის ტერმინალზე მიბმული, რაც იმას ნიშნავს, რომ თუ ტერმინალს გამოვრთავთ, რეალურად node-ის სკრიპტიც შეწყვეტს მუშაობას.
არ გვაქვს ლოგების თრექინგის საშუალება
არ გვაქვს რესურსების მონიტორინგის საშუალება
კიდევ ბევრი ნაკლი აქვს მაგრამ PM2 ზემო ჩამოთვლილ ნაკლოვანებებს ავსებს, ყოველ დანარჩენს კი უმეტესწილად Nginx აგვარებს.
Nginx წარმოადგენს როგორც ვებსერვერს ასევე პროქსი სერვერს. რა განსხვავებაა ამ ორს შორის?
ვებსერვერი - არის აპლიკაცია, რომელიც აპროცესებს, პასუხობს რექვესთებს შესაბამისი კონტენტით მაგალით html, css, js, სურათები და ა.შ.
პროექსი სერვერი - არის აპლიკაცია, რომელიც შუამავალია ბრაუზერსა და რეალურ აპლიკაციას შორის. მისი მოვალეობაა გადაამისამართოს რექვესთები რეალურ აპლიკაციამდე ან მომდევნო შრემდე, რომელიც რეალურ აპლიკაციას უკავშირდება.
ამასთანავე Nginx-ს აქვს დამატებითი Feature-ები, რომელიც საჭიროა რეალური აპლიკაციისათვის, რომელიც გვაქვს გაშვებული პროდაქშენზე.
მაგალითისათვის, Nginx-ის საშუალებით შეგვიძლია SSL სერთიფიკატის მიბმა ჩვენი საიტისათვის.
ასევე Nginx-ს აქვს ქეშირების ფუნქციონალი და ამასთანავე მისი მეშვეობით შეგვიძლია ერთ სერვერზე ბევრი ვებსაიტი გვქონდეს გამართული.
ჩვენს home ფოლდერში შევქმნათ apps ფოლდერი სადაც გვექნება აპლიკაციები, რომელსაც ჩვენს სერვერზე გავმართავთ. შემდეგ შევიდეთ apps ფოლდერში და დავკლონოთ გიტჰაბიდან რეპოზიტორია:
cd ~
mkdir apps
cd apps
git clone https://github.com/my-app.git
თუ ვნახავთ apps ფოლდერის შიგთავსს, დავინახავთ, რომ გვაქვს ჩამოტვირთული ჩვენი პროექტი. შევიდეთ ჩვენს პროექტში და დავიწყოთ მისი გამართვა.
cd my-app
npm ci
უმეტეს შემთხვევაში, ჩვენს Node.JS პროექტს დასჭირდება Mongo-ს მონცამთა ბაზა.
ამისათვის, ჩვენ უნდა დავაინსტალიროთ MongoDB.
ქვემოთ მოცემული სკრიპტი გავუშვათ ტერმინალში, რომ MongoDB-ის public key ვასწავლოთ ჩვენს Ubuntu-ს ოპერაციულ სისტემას, რომ შემდეგ დაავერიფიციროს, MongoDB-ის პაკეტი:
ამასთანავე საჭიროა შევქმნათ apt რეპოზიტორიისთვის list ფაილი, სადაც ვეტყვით apt-ს ინფორმაციას, რომელი ლინკიდან უნდა გადმოიწეროს ფექიჯი და ასევე დამატებით ინფორმაციასაც მივაწვდით კონკრეტული პაკეტის რა ვარიანტი გვჭირდება:
ქვემოთ მოცემული სკრიპტი ჩაწერს ლინკს და ზემოხსენებულ დამატებით ინფორმაციას ჩვენსმიერ შექმნილ list ფაილში:
გავუშვათ ქვემოთ მოცემული ბრძანება, რომ apt-მა აღიქვას ჩვენს მიერ დამატებული list ფაილი:
და ახლა უკვე შეგვიძლია MongoDB-ის ინსტალაცია:
ვუთხრათ ჩვენს ოპერაციულ სისტემას, რომ MongoDB-ის სერვისი გაუშვას:
ასევე ისიც ვუთხრათ, რომ სერვერის ჩართვისას ავტომატურად გაუშვას ხოლმე MongoDB-ის სერვისი:
PM2-ს აქვს საკმაოდ მარტივი სინტაქსი. შევიდეთ ჩვენს აპლიკაციაში და გავუშვათ Node-ის აპლიკაცია PM2-ის საშუალებით:
--name არგუმენტი უბრალოდ ჩვენს გაშვებულ აპლიკაციას არქმევს სახელს, რომლის მეშვებით შემდგომ PM2-ით შეგვიძლია რიგი ოპერაციების ჩატარება, მაგ: გადარესტარტება, ლოგების ნახვა, გამორთვა, ჩართვა და ა.შ.
როდესაც გავუშვებთ ზემოხსენებულ სკრიპტს, ჩვენ დაგვიბრუნდება შესაბამისი feedback, და ასევე ინფორმაცია ჩვენს მიერ გაშვებულ აპლიკაციაზე.
ასევე PM2-ით გაშვებულ აპლიკაციებზე ინფორმაციის სანახავად, შეგვიძლია გავუშვათ ქომანდი:
ახლა უკვე გაშვებულია ჩვენი აპლიკაცია და შეგვიძლია უკვე სერვერის ip-ზე შესვლისას მარტივად ვიხილოთ ჩვენს მიერ გაშვებული აპლიკაცია.
შემდეგი ნაბიჯი კი არის უკვე დომენის მიბმა ჩვენს აპლიკაციაზე, და nginx-ზე შემოსული რექვესთების გადმომისამართება ლოცაკლურად ჩვენს მიერ გაშვებულ აპლიკაციაზე.
პირველ რიგში დავინსტალიროთ nginx:
sudo apt install nginx
სერვერზე შევიდეთ შემდეგ ფოლდერში:
cd /etc/nginx/sites-enabled
წავშალოთ არსებული default კონფიგურაციის ფაილი:
sudo rm default
შევქმნათ ახალი კონფიგურაციის ფაილი:
touch my-app.ge
და შიგნით ჩავწეროთ შემდეგი კონფიგურაცია:
გადავარესტარტოთ ჩვენი Nginx: sudo systemctl restart nginx
ახლა კი SSL-იც გავმართოთ ჩვენი ვებ-აპლიკაციისთვის.
იმისათვის, რომ LetsEncrypt-ის სერტიფიკატი დავაყენოთ ჩვენს საიტზე, საჭიროა, რომ რამოდენიმე ფექიჯი დავაინსტალიროთ:
sudo apt install certbot python3-certbot-nginx
შემდგომ გავუშვათ ბრძანება:
sudo certbot
და მივყვეთ certbot-ის ინსტრუქციებს.
Node.JS-ის პროექტის Production სერვერზე გასამართად ჩასატარებელია რიგი პროცედურები:
სერვერზე საჭირო ფექიჯების დაყენება
პროექტის ჩამოტვირთვა და შესაბამისი dependencies-ების დაინსტალირება
PM2-ით node-ის აპლიკაციის გაშვება
Nginx-ის კონფიგურაცია
LetsEncrypt-ით SSL-ის დაყენება
აბა თქვენ იცით, ღმერთი თქვენსკენ 🙏
ახლა უკვე შეგვიძლია დავუკავშიროთ ჩვენი აპლიკაცია მონგოს მონაცემთა ბაზას