Node.JS პროექტის სერვერზე გამართვა

შესავალი

და დგება ის მომენტი, როდესაც შენს აპლიკაციას სული უნდა შთაჰბერო, სერვერზე გამართო, დომენი მიაბა და https://my-app.ge -ზე შესვლა შენსგარდა სხვასაც შეეძლოს.

ჩვენ ვიცით ლოკალურად როგორ უნდა გავუშვათ დეველოპმენტ სერვერი:

node [entry-file].js

და ეგ არი.

მაგრამ… პროდაქშენის სერვერზეც ვიზამთ მსგავსად?

ჰმმ.. კი შეგვიძლია. მაგრმ არ უნდა ვქნათ. ამაზე ოდნავ მერე.

პროდაქშენში უნდა გამოვიყენოთ სხვადასხვა ხელსასწყო იმისათვის, რომ სერვერზე ჩვენი აპლიკაცია საათვით მუშაობდეს. ამ ხელსაწყოებს წარმოადგენს 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

PM2 პროცეს მენეჯერი

ლოკალურად ჩვენ შეგვიძლია Node.JS-ის პროექტი გავუშვათ ჩვეულებისამებრ node [entry-file].js -ით. მაგრამ პროდაქშენის სერვერზე, მსგავსად ნოუდის აპლიკაციას ვერ გავუშვებთ.

ზემო აღნიშნული სკრიპტით ნოუდის აპლიკაციის გაშვებას აქვს რამოდენიმე ნაკლი:

  • თუ რაიმე ხარვეზი მოხდება ჩვენი გაშვებული სკრიპტი შეწყვეტს მუშაობას და ისევ ხელით უნდა გავუშვათ ხელმეორედ პროექტი.

  • ზემოაღნიშნულით პროექტის გაშვებისას, რეალურად ეს პროცესი არის ტერმინალზე მიბმული, რაც იმას ნიშნავს, რომ თუ ტერმინალს გამოვრთავთ, რეალურად node-ის სკრიპტიც შეწყვეტს მუშაობას.

  • არ გვაქვს ლოგების თრექინგის საშუალება

  • არ გვაქვს რესურსების მონიტორინგის საშუალება

კიდევ ბევრი ნაკლი აქვს მაგრამ PM2 ზემო ჩამოთვლილ ნაკლოვანებებს ავსებს, ყოველ დანარჩენს კი უმეტესწილად Nginx აგვარებს.

Nginx ვებ/პროქსი სერვერი

Nginx წარმოადგენს როგორც ვებსერვერს ასევე პროქსი სერვერს. რა განსხვავებაა ამ ორს შორის?

  • ვებსერვერი - არის აპლიკაცია, რომელიც აპროცესებს, პასუხობს რექვესთებს შესაბამისი კონტენტით მაგალით html, css, js, სურათები და ა.შ.

  • პროექსი სერვერი - არის აპლიკაცია, რომელიც შუამავალია ბრაუზერსა და რეალურ აპლიკაციას შორის. მისი მოვალეობაა გადაამისამართოს რექვესთები რეალურ აპლიკაციამდე ან მომდევნო შრემდე, რომელიც რეალურ აპლიკაციას უკავშირდება.

ამასთანავე Nginx-ს აქვს დამატებითი Feature-ები, რომელიც საჭიროა რეალური აპლიკაციისათვის, რომელიც გვაქვს გაშვებული პროდაქშენზე.

მაგალითისათვის, Nginx-ის საშუალებით შეგვიძლია SSL სერთიფიკატის მიბმა ჩვენი საიტისათვის.

ასევე Nginx-ს აქვს ქეშირების ფუნქციონალი და ამასთანავე მისი მეშვეობით შეგვიძლია ერთ სერვერზე ბევრი ვებსაიტი გვქონდეს გამართული.

სერვერზე Node-ის პროექტის ჩამოტვირთვა და dependency-ების გამართვა

ჩვენს home ფოლდერში შევქმნათ apps ფოლდერი სადაც გვექნება აპლიკაციები, რომელსაც ჩვენს სერვერზე გავმართავთ. შემდეგ შევიდეთ apps ფოლდერში და დავკლონოთ გიტჰაბიდან რეპოზიტორია:

cd ~ mkdir apps cd apps git clone https://github.com/my-app.git

თუ ვნახავთ apps ფოლდერის შიგთავსს, დავინახავთ, რომ გვაქვს ჩამოტვირთული ჩვენი პროექტი. შევიდეთ ჩვენს პროექტში და დავიწყოთ მისი გამართვა.

cd my-app npm ci

MongoDB მონცემთა ბაზის ინსტალაცია

უმეტეს შემთხვევაში, ჩვენს Node.JS პროექტს დასჭირდება Mongo-ს მონცამთა ბაზა.

ამისათვის, ჩვენ უნდა დავაინსტალიროთ MongoDB.

ქვემოთ მოცემული სკრიპტი გავუშვათ ტერმინალში, რომ MongoDB-ის public key ვასწავლოთ ჩვენს Ubuntu-ს ოპერაციულ სისტემას, რომ შემდეგ დაავერიფიციროს, MongoDB-ის პაკეტი:

wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -

ამასთანავე საჭიროა შევქმნათ apt რეპოზიტორიისთვის list ფაილი, სადაც ვეტყვით apt-ს ინფორმაციას, რომელი ლინკიდან უნდა გადმოიწეროს ფექიჯი და ასევე დამატებით ინფორმაციასაც მივაწვდით კონკრეტული პაკეტის რა ვარიანტი გვჭირდება:

sudo touch /etc/apt/sources.list.d/mongodb-org-5.0.list

ქვემოთ მოცემული სკრიპტი ჩაწერს ლინკს და ზემოხსენებულ დამატებით ინფორმაციას ჩვენსმიერ შექმნილ list ფაილში:

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list

გავუშვათ ქვემოთ მოცემული ბრძანება, რომ apt-მა აღიქვას ჩვენს მიერ დამატებული list ფაილი:

sudo apt update

და ახლა უკვე შეგვიძლია MongoDB-ის ინსტალაცია:

sudo apt-get install -y mongodb-org

ვუთხრათ ჩვენს ოპერაციულ სისტემას, რომ MongoDB-ის სერვისი გაუშვას:

sudo systemctl start mongod

ასევე ისიც ვუთხრათ, რომ სერვერის ჩართვისას ავტომატურად გაუშვას ხოლმე MongoDB-ის სერვისი:

sudo systemctl enable mongod

ახლა უკვე შეგვიძლია დავუკავშიროთ ჩვენი აპლიკაცია მონგოს მონაცემთა ბაზას 🙏

PM2-ით Node-ის აპლიკაციის გაშვება

PM2-ს აქვს საკმაოდ მარტივი სინტაქსი. შევიდეთ ჩვენს აპლიკაციაში და გავუშვათ Node-ის აპლიკაცია PM2-ის საშუალებით:

pm2 start [entry-file].js --name my-app

--name არგუმენტი უბრალოდ ჩვენს გაშვებულ აპლიკაციას არქმევს სახელს, რომლის მეშვებით შემდგომ PM2-ით შეგვიძლია რიგი ოპერაციების ჩატარება, მაგ: გადარესტარტება, ლოგების ნახვა, გამორთვა, ჩართვა და ა.შ.

როდესაც გავუშვებთ ზემოხსენებულ სკრიპტს, ჩვენ დაგვიბრუნდება შესაბამისი feedback, და ასევე ინფორმაცია ჩვენს მიერ გაშვებულ აპლიკაციაზე.

ასევე PM2-ით გაშვებულ აპლიკაციებზე ინფორმაციის სანახავად, შეგვიძლია გავუშვათ ქომანდი:

pm2 ls

ახლა უკვე გაშვებულია ჩვენი აპლიკაცია და შეგვიძლია უკვე სერვერის ip-ზე შესვლისას მარტივად ვიხილოთ ჩვენს მიერ გაშვებული აპლიკაცია.

შემდეგი ნაბიჯი კი არის უკვე დომენის მიბმა ჩვენს აპლიკაციაზე, და nginx-ზე შემოსული რექვესთების გადმომისამართება ლოცაკლურად ჩვენს მიერ გაშვებულ აპლიკაციაზე.

NGINX-ის კონფიგურაცია

პირველ რიგში დავინსტალიროთ nginx: sudo apt install nginx

სერვერზე შევიდეთ შემდეგ ფოლდერში: cd /etc/nginx/sites-enabled

წავშალოთ არსებული default კონფიგურაციის ფაილი: sudo rm default

შევქმნათ ახალი კონფიგურაციის ფაილი: touch my-app.ge

და შიგნით ჩავწეროთ შემდეგი კონფიგურაცია:

 server {
 # Listen on port 80 for the incoming requests
 listen 80;
 
 # change this domain according to your domain
 server_name my-app.ge;
 
 location / {
    # Redirect requests to node server
    proxy_pass http://localhost:4444;
 }
}

გადავარესტარტოთ ჩვენი Nginx: sudo systemctl restart nginx

ახლა კი SSL-იც გავმართოთ ჩვენი ვებ-აპლიკაციისთვის.

SSL-ის დაყენება LetsEncrypt-ით

იმისათვის, რომ LetsEncrypt-ის სერტიფიკატი დავაყენოთ ჩვენს საიტზე, საჭიროა, რომ რამოდენიმე ფექიჯი დავაინსტალიროთ: sudo apt install certbot python3-certbot-nginx

შემდგომ გავუშვათ ბრძანება: sudo certbot

და მივყვეთ certbot-ის ინსტრუქციებს.

დასკვნა

Node.JS-ის პროექტის Production სერვერზე გასამართად ჩასატარებელია რიგი პროცედურები:

  • სერვერზე საჭირო ფექიჯების დაყენება

  • პროექტის ჩამოტვირთვა და შესაბამისი dependencies-ების დაინსტალირება

  • PM2-ით node-ის აპლიკაციის გაშვება

  • Nginx-ის კონფიგურაცია

  • LetsEncrypt-ით SSL-ის დაყენება

აბა თქვენ იცით, ღმერთი თქვენსკენ 🙏

Last updated