Printable Version of Topic
Click here to view this topic in its original format |
თბილისის ფორუმი > Hello World > ნუბური შეკითხვები nodejs - ში |
Posted by: Svani91 13 Nov 2016, 06:36 |
ნუბური შეკითხვები nodejs - ში მე დავიწყებ დაახლოებით 1 თვეა ვარჩევ და მივყვები. ეხლა მაქვს დასაწერი ვებ აპლიკაცია, რომელიც არც მეჩქარება და საკმაოდ მარტივი crud აპპი უნდა გამოვიდეს საბოლოო ჯამში გადავწყვიტე გამოვიყენო node express - თან ერთად და ცოტა გამოცდილებაც მივიღო ბევრი კითხვები მექნება 1) რომელ view engine - ს მირჩევთ? მე 2 ვნახე ჯერ jade(pug) და ejs (ეს მომეწონა, ძველ asp - ს გავს და ახლოს ვარ უფრო) 2) json - თან სამუშაოდ რომელ ბიბლიოთეკას მირჩევთ? 3) რომელი nosql ბაზა გამოვიყენო - თავის ბიბლიოთეკიანად მირჩიეთ 4) amazon web services - თან სამუშაოდაც დამჭირდება ბიბლიოთეკა 5) ყველაზე მთავარი - ჰოსტინგი. heroku ვნახე ჯერ-ჯერობით მე მხოლოდ. სხვა რას მირჩევთ? უნდა დავტაგო, თუ არ მიწყენს https://forum.ge/?showuser=11840 |
Posted by: web_nts 13 Nov 2016, 13:46 | ||
Svani91
1. Mustache-ს ვხმარობ მე, Jadeს ერ მოვეჩვიე ვერაფრით. 2. ვერ მივხვდი რას გულისხმობ მაგალითი მოიყვანე აბა რა შემთხვევაში შეიძლება ბიბლიოთეკა დაგჭირდეს ნატივი ფუნქციონალობის გარდა. 3. MongoDB თუ იმენა ბაზა გინდა ნაგრამ ისე Elasticsearch-იც ნახე და დაამუღამე. ტექსტური ძებნისთვის საუკეთედოა. 4. ოფიციალური AWS SDK არსებობს და სხვა ენებთან შედარებით მოხერხებულია უფრო https://aws.amazon.com/documentation/sdk-for-java[ertad]script/ დასაყენებლად გაუშვი npm install aws-sdk 5. ნებისმიერი VPS ცენტოსით ან უბუნტუთი. მე ცენტოსზე ვარ მიჩვეული მაგრამ უბუნტუც კარგია. სასწავლად ვინდოუსზეც უპრობლემოდ მუშაობს. პროდუქციაში თუ ჩაუშვებ კოდს, აუცილებლად nginx-ის სერვერის უკან იყოს ნოდი. პირდაპირ ნოდის სერვერს არ ენდო ინტერნეტში. მერე დავწერ უფრო დეტალურად ინსტალაციაზე და სერვერის კონფიგურაციაზე თუ გინდათ. |
Posted by: Svani91 13 Nov 2016, 14:48 |
web_nts იდეაში ვაპირებდი მეკითხა/მეწერა json ფაილებში, მონგო მეზარებოდა მაგრამ ეხლა Elasticsearch - ს გადავხედავ გვინდა კი, დაწერე სერვერის დაკონფიგებაზე |
Posted by: web_nts 13 Nov 2016, 19:09 |
Svani91 თუ ფაილებად გინდა მაშინ სტრინგად გადააქცევ ობიექტს JSON.stringify(myObject) და შეინახავ ფაილად. წაკითხვითაც ამ ფაილს წაიკითხავ, ობიექტად გადააქცევ უკან სტრინგიდან JSON.parse(stringFromFile) და ეგაა. ფაილების წასაკითხად/ჩასაწერად გამოიყენებ fs-ს, ნოდის სტანდარტულ ბიბლიოთეკას. ანუ არანაირი გარე მოდული არ გჭირდება. https://nodejs.org/api/fs.html საერთოდ მოდულები რაც შეიძლება იშვიათად უნდა გამოიყენო და ისიც მხოლოდ კომპლექსური პრობლემებისთვის. მე რაც დავწერე იგივეს ძალიან ბევრი მზა მოდული აკეთებს მაგრამ რეალურად ეს ყველაფერი არის სულ 5 ხაზი. რატომ უნდა იყო დამოკიდებული ვიღაც ტიპის დაწერილ მოდულზე როდესაც შენ თვითონ შეგიძლია იგივეს ან უფრო უკეთესის დაწერა? სხვა საკითხია მოდულები რომლებიც ეხება კრიპტოგრაფიას და სხვა კომპლექსურ მოდულებს. ასეთების დაწერაზე შეიძლება თვეები დაკარგო და ისიც დარწმუნებულო არ იყო ვარგა თუ არა. მარტივი ფუნქიონალობისთვის არასაჭირო მოდულების გამოყენებამ რა შეიძლება გამოიწვიოს აქ შეგიძლია ნახო http://www.theregister.co.uk/2016/03/23/npm_left_pad_chaos/ ერთმა გაბრაზებულმა რამოდენიმე ხაზიანი მოდულის ავტორმა, ლამის ნახევარი ინტერნეტი იმსხვერპლა სერვერის კონფიგურაციის მანუალს სახლიდან დავწერ, ტელეფონით ვარ ეხლა. |
Posted by: web_nts 14 Nov 2016, 01:40 | ||||||||||||||||||||||||||||||||||||
* გაფრთხილება: ეს პოსტი არის განკუთვნილი მათთვის ვინც იცის ელემენტალურ დონეზე ლინუქსთან და ვირტუალურ მანქანებთან მუშაობა! დამწყებისთვის შეიძლება ძალიან საშიში შესახედავი ჩანდეს მაგრამ ასე არ არის, ნოდის სასწავლად ამ ყველაფრის გაკეთება არ გჭირდებათ, ვინდოუსზეც უმარტივესად გადმოწერთ ნოდს ( https://nodejs.org/en/download/ ) და დააყენებთ უმარტივესად, ასე რომ დამწყებები ქვედა პოსტმა არ შეგაშინოთ პროდუქციისთვის მზა ცენტოსის კონფიგურირება NodeJS-ით და NGINX-ით: პირველ რიგში თუ უკვე მზა VPS გაქვთ რომელსაც ცენტოსით ქირაობთ, მაშინ პირდარ კონფიგურაციაზე შეგიძლიათ გადახვიდეთ, თუ არადა მაშინ შეხვალთ აქ -> https://www.centos.org/download/ და გადმოწერთ "Minimal ISO" ფაილს. შემდეგ ნებისმიერ ვირტუალ მანქანაზე (VirtualBox/VMWare) ან პირდაპირ კომპიუტერზე დააყენებთ ამ .iso ფაილს და შემდეგ დაიწყებთ კონფიგურაციას. პირველ რიგში შექმნით ახალ იუზერს შეზღუდული შესაძლებლობით, რომელსაც გამოიყენებს მხოლოდ ნოდი და Nginx. მაგალითისთვის დავარქვათ ამ იუზერს "puser" (შეგიძლიათ ნებისმიერი რამე დაარქვათ მაგრამ ქვემოთ მოცემულ ინსტრუქციებში puser-ს გადააწერეთ იმ იუზერის სახელი რასაც თქვენ დაარქმევთ). პირველ რიგში შევდივართ კონსოლში ადმინისტრატორის უფლებიანი იუზერით ან ვიყენებთ სუდოს და შემდეგ ყველაფერს ვწერთ კონსოლში რაც ქვემოთ წერია. ვქმნით ახალ იუზერს და პაროლს
პირველ რიგში როგორც ყოველთვის ახალი ლინუქსის ინსტალაციისას, ვანახლებთ სისტემას და ვარესტარტებთ:
რესტარტის შემდეგ ვაყენებთ დეველოპმენტ თულს, ვამატებთ ნოდის რეპოზიტორის და ვაყენებთ ნოდს:
ნოდის ინსტალაციას და ვერსიას ვამოწმებთ შემდეგი მოთხოვნით:
შემდეგ ვამატებს რეპელის რეპოზიტორის და ვაყენებთ NGINX სერვერს და ვამატებთ სტარტაპ სერვისად:
ეხლა შევქმნათ ფოლდერი ახალი იუზერის ჰომ დირექტორიაში სადაც განთავსდება ჩვენი ნოდის აპლიკაცია და დავარქვათ myapp (რა თქმა უნდა შეგიძლიათ რაც გინდათ ის დაარქვათ მაგრამ ქვემოთ მოცემულ კონფიგში სადაც შეგხვდებათ myapp, ყველგან გადააწერეთ სასურველი სახელი). ასევე ამავე ფოლდერში შევქმნათ ფოლდერი static სადაც ყველა სტატიკური ფაილები (სურათები/CSS და ასე შემდეგ განთავსდება) და NGINX-ში დაილინკება როგორც სტატიკური ფაილების დირექტორია რათა ნოდიდან არ მოგვიწიოს სტატიკური ფაილების თრევა (ნოდი არ არის გათვლილი სტატიკურ ფაილებთან სამუშაოდ).
ეხლა მოგვიწევს ფაილების რედაქტირება და თუ vi-ს ხმარება არ იცით გირჩევთ დააყენთ MC ფაილებთან სამუშაოდ:
mc არის კონსოლის გრაფიკული ფაილ მენეჯერი რომელიც გაგიმარტივებთ დამწყებბებს ფაილებთან მუშაობას. გასაშვებად კონსოლში ჩაწერთ sudo mc და შეხვალთ სასურველ დირექტორიაში ფაილის დასაედიტებლად... ფაილის გასახსნელად აჭერთ F4-ს, შესანახად F2-ს და ფაილიდან ან თვითონ ფაილ მენეჯერიდან გამოსასვლელად აჭერთ F10-ს. ---------------- შემდეგ ვიწყებთ NGINX-ის კონფიგურაციას... შევდივართ NGINX დირექტორიაში, ვხსნით MC-ს და ვხსნით ფაილს nginx.conf
კონფიგ ფაილში მოძებნეთ ხაზი სადაც წერია
და nginx-ის ნაცვლად ჩავწეროთ ჩვენი ახალი იუზერი
შემდეგ ქვემოთ მოვძებნით ხაზს სადაც წერია:
და ამ ხაზის შემდეგ ჩაამატეთ ეს კოდი:
ეს არის მარტივი კონფიგი თუ როგორ დავაკავშიროთ NGINX ნოდს... NGINX არის უძლიერესი HTTP სერვერი რომელსაც უამარავი კონფიგურაცია აქვს ოღონდ აქ მაგას არ განვიხილავთ. ამ კოდის კონფიგში ჩამატების შემდეგ, ვინახავთ ფაილს F2 ღილაკზე დაჭერით და გამოვდივართ MC-დან F10 ღილაკზე 2-ჯერ დაჭერით. ამ ყველაფრის შემდეგ გააკეთებთ რესტარტს კიდევ ერთხელ:
და რესტარტის შემდეგ 3000 პორტზე არსებული ნებისმიერი ნოდის აპლიკაცია ჩაიტვირთევა NGINX-ის მეოთხმოცე პორტზე. ანუ ამ კონფიგურაციის შემთხვევაში http://192.168.0.120/ -ზე გაკეთებული რექვესთი გადეცემა 3000 პორტზე გაშვებულ ნოდის აპლიკაციას. თვითონ ნოდის აპლიკაციის გამართვას რაც შეეხება, ამისთვის საჭიროა შევიდეთ ჩვენი ახალი იუზერით (puser) ტერმინალში და მივყვეთ შემდეგ ინსტრუქციას: პირველ რიგში დავაყენოთ express.js ჩვენი აპლიკაციის ფოლდერში (გლობალურადაც შეიძლება დაყენება მაგრამ ჯერ არ გვინდა ეს)
შემდეგ ვუშვებთ ინიტ ფუნქციას და ვქმნით აპლიკაციის აღწერას (შეგიძლიათ ყველა კთხვაზე ენთერს დააჭიროთ და დეფოლტ მნიშვნელობებს ჩაწერს)
შემდეგ ვქმნით ფაილს მაგალითად app.js და ვანთავსებთ შემდეგ კოდს ამ ფაილში:
ამ აპლიკაციას გავუშვებთ შემდეგნაირად
ამის შემდეგ ნოდი გაშვებული იქნება და NGIX-საც შეუძლია დაუკავშირდეს ამ აპლიკაციას... შესაბამისად თუ შეხვალ ბრაუზერიდან http://192.168.0.120/ -ზე, ეკრანზე დაიწერება "Hello World", ხოლო თუ შეხვალ http://192.168.0.120/test -ზე, ეკრანზე დაიწერება "Hello Test World". 192.168.0.120 რა თქმა უნდა მაგალითად მოყვანილი IP არის, რომელიც უნდა ჩანაცვლდეს nginx.conf ფაილში თვენი სერვერი შესაბამისი IP მისამართით ან დომენით. ეს არის საწყისი ეტაპი. თუ ზუსტად მიყვებით ინსტრუქციას, ყველაფერი იმუშავებს საათივით შეიძლება რამე შეცდომა გამეპარა ამდენი წერის შემდეგ მაგრამ თუ სადმე error ამოგიგდოთ, აქ დაწერეთ ან სქრინი დადეთ და ვნახავ რისი ბრალია. ასევე ეს კონფიგურაცია არ უშვებს თქვენი ნოდის აპლიკაციას სტარტაპში... რესტარტის ან კონსოლის დახურვის შემდეგ, NGINX ნოდის აპლიკაციას ვერ დაუკავშირდება და ამოგიგდებთ ერორს. ეს ნიშნავს რომ ყოველი კონსოლის გახსნისას უნდა შეხვიდეთ puser-ით ტერმინალში, შეხვიდეთ თქვენი აპლიკაციის ფოლდერში (cd /home/puser/myapp) და გაუშვათ აპლიკაცია ხელით
დასაწყისისთვის ასე ჯობია ვინაიდან ტერმინალშ შეხედავთ თუ რამე შეცდომა დაფიქსირდება, მაგრამ თუ ნოდის აპლიკაციის სტარტაპში დამატება გინდათ და ხელით გაშვება არ გჭირდებოდეთ მომავალში, ესეც ძალიან მარტივია და შემდეგ პოსტებშ დავწერ როგორ დავამატოთ ნოდის აპლიკაცია ცენტოსში სერვისად. |
Posted by: Svani91 14 Nov 2016, 02:40 |
web_nts რამე ნორმალურ ფასიანი ვიპიეს არ გაქვს დატესტილი რო მირჩიო? ჰეროკუზე ქოფი ფეისთს, ასე მირჩევნია გავაკეთო და მადლობა |
Posted by: Roofus 14 Nov 2016, 02:44 |
Svani91 ატლანტიკი არის კარგი ssd VPS http://atlantic.net 5$ პლანი აღარ აქვთ ანდა ქონდათ. +კარგი ტუტორიალია linux mint-ზე ვცდი როგორ გამომივა nodejs+nginx |
Posted by: web_nts 14 Nov 2016, 03:24 |
Svani91 https://www.ovh.ie/vps/vps-ssd.xml OVH ყველაზე მუშაა იაფიანი ვიპიესებიდან 3 ევროდ (~$3.25) იღებ შემდეგ მონაცემებიან სერვერს: 2GB RAM, 10GB SSD და 1 ვირტუალო პროცესორი 2.4 გიგაჰერცით. საკმარისზე მეტია ცენტოსისთვის... დაჟე დღეში 5000 ვიზიტორიან საიტს გაქაჩავს თუ კარგი ოპტიმიზაცია აქვს ნოდის კოდს და მარტივი საიტია |
Posted by: Svani91 14 Nov 2016, 03:31 |
web_nts Roofus მადლობები კიდევ მექნება კითხვები, თუ არ შეგაწუხებ უკვე თვითონ ნოდის აპპს რაც ეხება ჯერ მხოლოდ როუტები მაქვს გაწერილი და ვაბრუნებინებ html ს პატარა მონაცემებიანად |
Posted by: web_nts 14 Nov 2016, 04:00 | ||||
Svani91
რაც მთავარია უნდა იყოს ყველაფერი ასინქრონული აი მაგალითად ეს კოდი
ყველაფერს მიაკლავს სანამ 5 მილიონჯერ არ შესრულდება ეს ლუპი. ეს ცუდი მაგალითია და არც 5 მილიონი ლუპის შესრულება არ არის დიდი საქმე თანამედროვე კომპიუტერებისთვის, მაგრამ წარმოიდგინე რომ ერთდოულად 11-მა ადამიანმა მოითხოვა დაკავშირება ამ გვერდთან სადაც მსგავსი ლუპია... პირველი მთხოვნის შესრულებას დასჭირდა 0.2 წამი შესასრულებლად, მეორე მოთხოვნა სანამ პირველი არ დასრულდება უნდა დაელოდოს 0.2 წამი და შემდეგ თვითონაც 0.2 წამი ასრულოს ეს მოთხოვნა და საბოლოოდ მეათე მოთხოვნას მოუწევს 2 წამი ლოდინი სანამ მისი ჯერი მოვა, ხოლო 2 წამი უკვე ძალიან დიდი დროა ლოდინისთვის. ამას დაუმატე როდესაც ამ ორი წამის განმავლობაში სხვები ცდილობენ შესვლას, რიგი იწელება, დრო იზრდება, ხალხი ცდილობს დაარეფრეშოს გვერდი ამ დაგვიანების გამო და რეალურად პირიქით რიგს ამატებენ. პოპულარულ სერვერზე შეიძლება მუშაობა ჩააგდოს მთელი დღით რამე სინქრონულმა სკრიპტმა. სინქრონული სკრიპტების გარეშე არ გამოვა რა თქმა უნდა (ლუპი ყოველთვის საჭიროა), მაგრამ რაც შეიძლება უნდა ეცადო რომ თავიდან აირიდო. ნოდში დაწერილი აპლიკაცია არის single threaded აპლიკაცია რაც ნიშნავს რომ სანამ რაღაც სინქრონული მოთხოვნა არ დასრულდება, მანამდე სხვა ყველაფერი გაჩერებულია (ისევე როგორც ბრაუზერის ჯავასკრიპტში, უბრალოდ შენი ბრაუზერის ჯავასკრიპტს ბევრი ადამიანი არ უკავშირდება ერთდროულად და ამიტომ თუნდაც დიდი ლუპები თვალისთვის შესამჩნევ ცვლილებს არ გვაძლევს). |
Posted by: Svani91 14 Nov 2016, 04:11 | ||||
web_nts 2 კვირაა ვკითხულობ და იდეაც ეგაა ნოდის რამდენადაც მე გავიგე ეხლა ერთი კითხვა მაქვს, დავდებ app.js - ს ფრაგმენტს არის 2 როუტი და ორივეს სჭირდება ჰედერ ქასთამ დეიტა და არ მინდა რო ესე ვამეორო კოდი, რამე სოლუშენი ხო არ გახსენდება?
html - ში
|
Posted by: X2D3T9 14 Nov 2016, 13:06 |
მოკლედ მაინტერესებს კონკრეტული ლინკები პოსტ გეთ და ფუთ მეთოდით გაგზავნილი მოთხოვნები დაბლოკოს სხვა ჰოსტიდან .... ჰეადერeბის ამბავია ხომ? დაუწეროს unautorized ... passport ით ვნახე როგორ კეთდება ავტორიზაცია და შეზღუდვა მაგრამ მე კონკრეტულ მისამართზე მინდა სადაც პასპორტს არ ვიყენებ ... დაბლოკოს არა მარტო პორველი "პარამეტრი"(არვიცი სწორად როგორ ვთქვა) არამედ ასე /ლინკი/სრრინგი/სტრინგი ანუ მთლიანი როუტი რა განვითარ3ბაც არუნდა ქონდეს |
Posted by: Otory 14 Nov 2016, 13:15 | ||||
Svani91
ან
ჩვეულებრივი ობიექტებია და შეგიძლია მიდლვეარში (ან თვითონ რიქუესთში) ჩასვა რაც გინდა. მაგალითად, გააკეთო setHeaderData მიდლვეარი, მასში წამოიღო საჭირო დატა და მერე app.locals.headerData = შენი დატა (ან თუ რამე კონკრეტულად რიქვესთს ეხება, მაგალითად იუზერის ინფო, სეტინგები, ლოქეილი - მაშინ res.locals.headerData = შენი დატა მგონი ეგაა რაც გინდა. ნუ კიდე, შეგიძლია იზვრაშენცობები აკეთო და ზოგადად req-ში შეინახო ობიექტად რასაც ატან და მერე res.render('template', req.myParamObject); |
Posted by: web_nts 14 Nov 2016, 15:50 | ||||||||
X2D3T9
სხვა ჰოსტიდან რას გულისხმობ? ანუ მაგალითად შენი საიტი არის http://example.com/ და ამ საიტზე თუ ვინმემ გადმოსცა პოსტ ან გეთ ცვლადები სხვა დომენიდან მაგალითად http://otherexample.com -იდან, დაბლოკოს ავტომატურად? თუ ასე მაშინ უნდა დაადგინო რეფერალის ჰედერი ექსპრესიდან
მაგრამ არ არის რეკომენდირებული უსაფრთხოებასთან დაკავშირებული გადაწყვეტილებების ჰედერზე დამოკიდებულება ვინაიდან ჰედერის შეცვლა შეიძლება მარტივად. Svani91
თუ ხშირად იყენებ ერთი და იგივე ტექსტს ჰედერში, რატომ არ აინტეგრირებ ამ ტექსტის დეფოლტ ვერსიას თვითონ ტემპლეიტში?
ანუ თუ headerData არ გადაეცემა ტემპლეიტს, მაშინ დაწერს "Default Header Text" და თუ იშვიათად გჭირდება ამ ჰედერის შეცვლა მხოლოდ მაშინ გადასცემ headerData-ს და იმას დაგიწერს. თუ სწორად გავიგე რაც გინდოდა ესაა. შენ შემთხვევაში Default Header Text-ის მაგივრად ჩაწერ იმას რასაც გადასცემდი dataFactory.headerData-თი და საერთოდ აღარ მოგიწერს გამეორება და ხსენება headerData-სი იმ როუტებში. |
Posted by: Roofus 14 Nov 2016, 17:56 |
web_nts ლარაველს აქვს მაგალითად csrf field და იქ არის ტოკენი და ამ ტოკენს ამოწმებს ყოველ POST რექუესტზე რომ კროს საიტ სკრიპტინგი არ იყოს შესაძლებელი. მსგავსი რამე აქვს ნოდს? |
Posted by: Ruritania 14 Nov 2016, 18:29 |
Roofus express-ზე შეგიძლია კი. არის სხვადასხვა ბიბლიოთეკები. ჩვეულებრივი middleware-ის სახით კეთდება. https://www.npmjs.com/package/csurf |
Posted by: X2D3T9 14 Nov 2016, 20:47 |
web_nts კი ეგ ვიგულისხმე ანუ სხვა დიმენზე არიმუშაოს ადრეც ვიკითხმე მგონი რაღაც მახსოვს https://github.com/expressjs/cors/blob/master/README.md ეს ვნახე გავტესტავ მერე |
Posted by: nv86 14 Nov 2016, 22:08 |
ჰოსტინგში ფული არ გადაიხადო არ გადამრიო. googleსაც და amazonsსაც აქვს ორივეს ტრიალ პერიოდები. 3-თვიდან 12-მდე მგონი. ასევე გამოიყენე nodejs-ის container-ები. |
Posted by: web_nts 14 Nov 2016, 22:11 | ||||||||
X2D3T9
CORS-ს თუ გულისხმობ, მაგისგან დასაცავად ცალკე არაფერი არ გჭირდება. გამორთულია ავტომატურად ყველა თანამედროვე ვებ სერვერზე და ბრაუზერში. შენ რაც დადე ეგ ლინკი პირიქით, სხვა დომენი რომ დაუშვა შენს საიტზე მაგისთვისაა. ამასთანავე, CORS არ იცავს ფორმებიდან დაპოსტვისგან.... CORS არის მხოლოდ ajax რექვესთებისგან დასაცავი მექანიზმი. აი მაგალით სად მუშაობს CORS და სად არა:
თუ ფორმების დაცვაც გინდა, მაშინ უნდა გამოიყოენო რაზეც Roofus და Ruritania საუბრობენ https://www.npmjs.com/package/csurf nv86
ამაზონს 1 წლიანი აქვს მინიმალურ პაკეტებზე რომლებიც სრულიად გამოსადეგია სასწავლად
ზოგადად კონტეინერების გამოყენება სადაო საკითხია, მაგრამ დამწყებებისთვის კონტეინერები მითუმეტეს მარაზმია. |
Posted by: Svani91 14 Nov 2016, 22:32 |
მადლობა ყველას ხალხო, სახლში მივალ და ჩავუჯდები » სპოილერის ნახვისთვის დააწკაპუნეთ აქ « |
Posted by: nv86 15 Nov 2016, 01:40 | ||
დიდ სკეილზე რო ხარ როგორ წარმოგიდგენია ამაზონი ან გუგლი კონტეინრერების გარეშე. კაი რა. და მაგისკენ მიდის. პ.ს 1$ უნდა გქონდეს ბარათზე ოღონდ ორივეგან. გუგლზეც და ამაზონზეც. ჩამოგაჭრის და გიბრუნდება. უკანვე. |
Posted by: Svani91 15 Nov 2016, 08:09 | ||
Otory მგონი ეგ ვარიანტი ყველაზე მეტად მაწყობს, ვცდი და დავწერ რა გამომივა web_nts ეგრე რო გავა default - ო, კონტროლს ხო დავკარგავ? მე კი მინდა ვაცვლევინო ეგ. ალბათ არც შეიცვლება, მარა შესაძლებლობა მინდა იყოს nv86 პროდაქშენზე გამომადგება ამაზონი? სასწავლად ერთია და პატარა პროდაქშენში ჩასაშვებ პროექტს ვწერ თან მადლობა ყველას პს გამოვიდა კარგად
წიგნს ხო ვერ მირჩევდით რამეს? |
Posted by: web_nts 15 Nov 2016, 10:14 | ||||||||
nv86
რამდენი წელია კონტეინერებზე ხარ? მანამდე ინტერნეტი არ არსებობდა? აბა მითხარი ეხლა ასეთი სიტუაცია.... მაქვს ნოდის ერთი აპლიკაცია რომელმაც იდეაში უნდა შეძლოს ულიმიტო ზრდა თუნდაც ფეისბუქის დონეზე. თითოეულ 8 ბირთბიან EC2 სერვერზე ეს აპლიკაცია არის გაშვებული 16 სხვადახვა პორტზე და შიდა load balancing-ს აკეთებს ამ პორტებზე Nginx. ეს 1 ცალი EC2 სერვერი თავისმხრივ ჩასმულია AWS Elastic Load Balancer-ში, რომელიც პროცესორის და რამის დატვირთვის მიხედვით ამ სერვერის სნაპშოტოს მიხედვით ქმნიან და ანადგურებენ ანალპგიურ ვირტუალირ მანქანებს. ეს არის Unlimited Scalability და არა კონტეინერები. ეხლა აღმოწერე რა მოგებას მომიტანს კონტეინერების ჩასმა ამ პროცესში როდესაც პროდუქციისთვის მზა აპლიკაციას ვუშვებ? იმედია იმას ხვდები რომ კონტეინერები უფრო მეტ რესურს წაიღებს ხო? ანუ დაახლოებით 5 წუთს რომ იგებ კონტეინერების შექმნით ვირტუალირი სერვერის სნაპშოტთან შედარებით, ამიტომ ღირს რესურსის გაწირვა? კონტეინერები არის კარგი დაჩქარებული ისეთ სიტუაციაში სადაც იუზერს ფართო წვდომა აქვს სისტემაზე და კონტეინერებს იყენებ სენდბოქსად. ისიც ბოლო უსაფრთხოების პრობლემების გამო ეჭვქვეშაა რამდენიმად მუშაობს http://www.theregister.co.uk/2016/11/01/docker_user_havent_patched_dirty_cow_yet_bad_news/ * * * Svani91
კოდი რაც დავდე არ ნახე? პირიქით, საქმეს იმარტოვებ. დეფოლტი არის დაყენებული და ყოველ ჯერზე მისი შეცვლა არ გჭირდება, მაგრამ თუ გჭირდება ან ოდესმე დაგჭირდება შეცვლა გადასცემ მოდიფიცირებულ ჰედერს და გამოიტანს ამ მოდიფიკაციას. კარგად დააკვირდი აბა კოდს
და მიუხედავად დიდი პატივიაცემისა ამხანაგი ოთარის მიმართ, ნოდში გლობალების გამოყენება მხოლოდ უკიდურეს შემთხვევაში მიმაჩნია მიზანშეწონილად და შენი შემთხვება მიახლოებილიც კი არ არის რამე უკიდურესობასთან. ვერცერთ სერიოზულ პროექტს ვერ ნახავ გაგლობალებული თემის ნაწილებით. მითუმეტეს app-ში დამატებილი გლობალებით. არსებობს გლობალური ობიექტი global რომელშიც უნდა დაამატო შენი ობიექტი რომელსაც ერქმევა უნიკალური სახელი რათა აიცილო თავდიან რამე პოტენციური კონფლიქტი და იქ ჩაწერ ყველაფერს.
მაგრამ კიდევ ერთხელ, გლობალის მსგავსი გამოყენება ითვლება ცუდ პრაქტიკად. |
Posted by: Svani91 15 Nov 2016, 11:18 |
web_nts ეს default text სადმე უნდა შევინახო, ყველა ვარიანტში. ალბათ ვერ ვკითხულობ სწორად. თუ გლობალში ან ლოკალში არა, აბა სად? ყოველ ჯერზე გადმოცემა არ მინდა ძალიან აი წარმოიდგინე ლეიაუთ ფაილი, რომელიც ყველა გვერდს დაყვება და არაა სტატიკი. რას აკეთებ ამ დროს |
Posted by: web_nts 15 Nov 2016, 11:51 |
Svani91 თემის ფაილს არ იყენებ? ყველაფერი სტრინგად უნდა ჩასვა კაცო? მოგვიანებით დავწერ ejs-ზეც და mustache-ზეც თუ როგორ შექმნა ფაილები და როგორ გაუკეთო ინტეგრაცია მოდულად ამ ყველაფერს ყველანაირი გლობალების გარეშე |
Posted by: Otory 15 Nov 2016, 18:16 |
web_nts გლობალი არ არის, სკოუპ ვერიეიბლია... მიდლვეარებიდან res / req -ის გარეშე როგორ მოგაქვს დატა? თუნდაც ავტორიზაციის დატა. ამ კონკრეტულ შემთხვევას რაც შეეხება, მე უფრო breadcrumbs ვარიანტი მგონია და შესაბამისად დიფოლტ ტექსტი არ წავა. მე რა ვარიანტიც დავწერე - ფაქტიურად ეგაა მაგ შემთხვევისთვის. |
Posted by: Svani91 15 Nov 2016, 21:54 | ||
Otory
არა, მაგრამ დაახლოებით მსგავსი ვარიანტია აი დავუშვათ ვწერ .net mvc - ში მაქვს რამე _Layout ფაილი და იმას ვანიჭებ ექშენებს თუ მინდა ან ვანულებ, აღარ დავწერ ბევრს დაახლოებით მსგავსი მინდოდა ყოფილიყო ეს ჩემი header ფაილი დავდებ სქრინს |
Posted by: web_nts 15 Nov 2016, 21:55 | ||||
Otory ნუ იდეაში გლობალური გამოდის მაინც ამ აპლიკაციისთვის res/req არ გამოუყენებია, app გამოიყენა რაც ზემოთ დაწერა და რომელიც res/req-ისგან განსხვავებით არ ნადგურდება შესრულებიშ შემდეგ. თან მე რასაც ვხდები ამას უნდა რომ სტრინგებში ქონდეს თემის ნაწილები და ყოველი მოთხოვნისას ააწყოს ხოლმე და ამიტომ მგონია რომ გლობალად განსაზღვრა უნდა. შეიძლება სხვანაირად ვიგებთ ორივე და საერთოდ სხვა რამე უნდა Svani91 მოკლედ პატარა აპლიკაცია გავაკეთე ტემპლეიტები რომ ნახო იდეაში როგორ მუშაობს ejs-ზეც და mustache-ზეც. გადმოწერე მიმაგრებული ზიპ ფაილი ჩააგდე ნებისმიერ ფოლდერში გინდ ვინდოუსზე და გინდ ლინუქსზე სადაც ნოდი გიყენია გაუშვი კონსოლში npm install შემდეგ გაუშვი აპლიკაცია npm start გახსენი ეს ლინკი http://localhost:3000/ejsPage1 და მიყევი სხვა ლინკებს რომელიც მაგ გვერდზეა ეხლა დაერიე ფაილებს და გაარჩიე აპლიკაცია რას აკეთებს ოღონდ კარგად გაარჩიე ტყულად არ მაწვალო მოკლე აღწერა ასეთია: ფოლდერში themes-ში რასაც ჩააგდებ და რამდენ ფაილსაც ჩააგდებ რომლებთაც აქვს გაფართოება .ejs ან .mustache , აპლიკაცია ყველა ამ ფაილს ჩატვირთავს მეხსიერებაში გაშვებისთანავე და შემდეგ მოთხოვნებს აქედან დააგენერირებს. თემების რენდერის ფუნქცია არის ჩასმული მოდულად რომელსაც ტვირთავს მთავარი ფაილი
და მოთხოვნებს აკეთებს შემდეგნაირად:
იმედია გამოგადგება |
Posted by: Svani91 15 Nov 2016, 22:00 |
web_nts ხვალ დილით დაგახვედრებ პასუხს მადლობ |
Posted by: mikey:) 15 Nov 2016, 22:30 |
Express ჯობია თუ Sails? ...... |
Posted by: web_nts 15 Nov 2016, 22:42 | ||
mikey:)
რა თმა უნდა ექსპრესი. Sails ექსპრესზე დგას თვითონ და იმის მეათედი დოკუმენტაცია და რესურსი არ არსებობს რაც ექსპრესს აქვს. |
Posted by: Otory 15 Nov 2016, 23:55 |
web_nts Svani91 მოკლედ სიტუაცია ასეთია: * თუ რაღაც განმეორებითი სტატიკური კონტენტია ტემპლეიტში, მაშინ ჯობია საბტემპლეიტი გააკეთო და ის დააინკლუდო უბრალოდ, კოდში ვაბშე არაფერი გექნება - გექნება მხოლოდ ტემპლეიტში (მგონი ეს არის შენი შემთხვევა); * თუ რაღაც განმეორებითი დინამიური კონტენტია (მაგალითად დალოგინებული იუზერის სახელი, breadcrumbs, ან რაიმე მსგავსი) - მაშინ სასურველია რომ მიდლვეარი გამოიყენო მისი გენერირებისთვის (ეს ალბათ ისედაც ასე იქნება) და res.locals გამოიყენო; * თუ რაღაც განმეორებითი დინამიური კონტენტია მაგრამ რატომღაც (?? არ წარმომიდგენია რა შემთხვევა შეიძლება იყოს, really...) მიდლვეარში ვერ ჩასვამ მის გენერირება / პროცესინგს - მაშინ app.locals შეგიძლია გამოიყენო. დედამიწა არ ჩამოიქცევა და ქართველობას არავინ წაგვართმევს გლობალები (ნუ, მეტ-ნაკლებად) გამოვიყენოთ, ასევე სქოუფის პრობლემა არ იქნება, რადგან მთლად გლობალი არაა - "ლოკალური გლობალია", მაგრამ (!) ცუდი (99%) არქიტექტურის მაჩვენებელია. შეიძლება არის რამე გამონაკლისი სადაც ნაღდად საჭიროა, მაგრამ არაფერი არ მაფიქრდება ახლა... ვოტ ტაკ ))) |
Posted by: Svani91 16 Nov 2016, 00:53 | ||||
web_nts
ეს template layer გასაგებია და მომეწონა, მაგას გამოვიყენებ აწი. ვიუ ენჯინის ვარიაცია ან საერთოდ შეცვლა რო დაგჭირდეს, მარტივად მოხდება წესით. რატო უნდა დამჭირდეს არ ვიცი მარა მაინც მე მინდოდა რო ყოველ როუტში, ესე არ გამეორებულიყო headerData
ისე კი, საჭიროა ყველა როუტში - ანუ ის სიტუაცია არაა რო ზოგან იყოს და ზოგან არა ყველგან უნდა იყოს და სტატიკური არ უნდა იყოს ამავე დროს და ეს Otory - ს სოლუშენმა გადაწყვიტა აღარ ვატან არცერთ როუტში და მაქვს წვდომა პირდაპირ, template - ში ასევე, mustache - ს ეხლა გადავხედე და დავიბენი, ორივე მომწონს ) პს ჩემსავით დამწყებებს, pluralsight - ის 3 თვიანი საბსქრიბშენის დათრევა არის ძალიან ადვილი MS Developer ექაუნთით და გაითვალისწინეთ |
Posted by: web_nts 16 Nov 2016, 02:01 | ||||||||
Svani91
შეგიძლია მარტივი HTML მაგალითი დადო? აი რამე ისეთი როგორც ჩემს დადებულ ფაილშია და კონკრეტულად გვაჩვენო ჰედერში რას გულისხმობ ვერ მივხვდი ejs და mustache კი ორივე ერთად იმიტომ მაქვს რომ უბრალოდ ორივეზე შეგქმნოდა წარმოდგენა და შენთვითონვე რომ შეძლო მომავალში მსგავსი მოდულების შექმნა. საბოლოო ვერსიიდან რომელიც გინდა მარტო ის უნდა დატოვო და იმის მიხედვით დახვეწო ის მოდული. ეს უბრალოდ 20 წუთში დაწერილი მარტივი მაგალითი იყო მთლიანი აპლიკაცია Otory გეთანხმები თითქმის ყველაფერში app.local-ის ნაცვლად მოდულს შევქნიდი მე პირადად და რომელ ფაილშიც დამჭირდებოდა იმაში დავაინქლუდებდი აი მაგალითად გვაქვს მარტივი კონფიგი სადაც ვინახავთ რაღაც API იუზერს და გასაღებს. შენი სოლუშენია რომ შეინახო ასე:
მე შევქმნიდი ფაილს config.js და გავაკეთებდი მოდულს
და ყველა საჭირო ფაილში დავაინქლუდებდი ამ კონფიგს
მიჩვევის ამბავია თორემ თეორიულად არც app.locals დაღუპავს პროექტს და არც global თუ ფრთხილად იქნები. უბრალოდ ოდითგანვე თავში მაქვს გამჯდარი რომ გლობალები "ცუდია" და ყოველთვის ვცდილობ შორიდან მოვუარო |
Posted by: Svani91 16 Nov 2016, 02:05 | ||
web_nts აი ეს ფრაგმენტი არის ყველა გვერდისთვის ერთი. მაგრამ შეიცავს ისეთ მონაცემებს, რომელიც რამე სორსიდან უნდა წამოვიდეს
custom_data1 და custom_data2 |
Posted by: X2D3T9 16 Nov 2016, 02:20 |
თემპლეით ენჯინათ hbs ს არ იყენებთ ექსპრესზე ? რავი მე მოსახერხებელი მეჩვენა .... ვაფშემ jade და მისი ჯანი |
Posted by: pixel4ever 16 Nov 2016, 03:33 |
EJS მირჩევნია მე პირადად, ჯავასკრიპტია ფაქტიურად და უფრო ქომფორტულია. Jade-ის ხმარება დავიწყე თავიდან მაგრამ ვერანაირად ვერ შევეჩვიე სინტაქსს. |
Posted by: Svani91 16 Nov 2016, 10:00 |
X2D3T9 Angular ს ვიყენებ მე და კონფლიქტი ექნება hbs ს სინტაქსთან თორე ძაან კარგი ჩანს ეგეც |
Posted by: Otory 16 Nov 2016, 14:29 | ||
web_nts რა თქმა უნდა, სადაც მოდულად გატანა შეიძლება - მოდულად უნდა გაიტანო, მაგრამ app.locals იმას უზრუნველყოფს რომ ტემპლეიტში გადაეცემა ყოველთვის, და
ეს ხომ მაგას ვერ წყვეტს... |
Posted by: X2D3T9 16 Nov 2016, 19:55 |
სერვერი რომ არ დაეკიდოს რამე ჩეპეს შემთხვევაში და გადაუტვირთავად ჩაასწორო კოდი რომელი ბიბლიოთეკაა სანდო? |
Posted by: Svani91 16 Nov 2016, 22:08 |
კარგი კურსი ვიპოვე და მივყვები https://app.pluralsight.com/library/courses/nodejs-express-web-applications/table-of-contents ესე 2 კვირაში თუ შემაყვარებდა თავს, არ მეგონა * * * X2D3T9 სერვერის დაკიდებაში რას გულისხმობ, ზუსტად ვერ მივხვდი, მაგრამ გადაუტვირთავად ჩასწორება მგონი ესაა https://www.npmjs.com/package/nodemon სტარტი იქნება node - ს მაგივრად nodemon app.js თუმცა არ ვიცი ეს პროდაქშენზე რამდენად სწორია |
Posted by: web_nts 16 Nov 2016, 22:53 | ||||||
X2D3T9
Svani91
ოღონს ეს მარტო დეველოპმენტის დროს, ხელით რომ არ მოგიწიოს რესტარტი ყოველ ცვლილებაზე.
პროდაქშენის დროს ნოდემონი შეგიძლია გამოიყენო მაგრამ გაშვებულ საიტზე რომელზეც კლიენტს წვდომა აქვს არ არის კარგი იდეა. რედაქტირება უნდა ხდებოდეს სატესტო სერვერზე და მერე ეშვებოდეს კლიენტისთვის. პროდაქშენზე უნდა გამოიყენო https://www.npmjs.com/package/forever რომელიც უზრუნველყოფს რომ აპლიკაცია სულ მუშაობდეს, ანუ რამე ფატალური შეცდომა თუ მოხდა ან რამე მიზეზის გამო დაეკიდა აპლიკაცია, ავტომატურად დაარესტარტებს. forever start app.js რა თქმა უნდა ხელით რომ არ გიწევდეს ამის გაშვება, ეს ყველაფერი უნდა ჩაჯდეს ლინუქსის სერვისად სტარტაპში. ხვალ დავწერ ცენტოსზე როგორ დავამატოთ ნოდის აპლიკაცია სერვისად, მარტო ნოდითაც და ფორევერითაც. |
Posted by: Roofus 17 Nov 2016, 00:44 |
web_nts წიგნში ეწერა ფუნქცია spawn რომელსაც შეუძლია გაუშვას executable დამოუკიდებლად თავისი არგუმენტებიანად... და stdin stdout სტრიმი აქვსო... მოკლედ ამ spawn-ის გამოყენება შეიძლებაო მონიტორინგისთვის. ანუ ერთი node აპლიკაციიდან მეორის კონტროლი , ამ შემთხვევაში სერვერის. რესტარტი თუ დაუშვათ ბევრ მეხსიერებას მოიხმარს ან რაიმე კრიტიკული შეცდომაა... მეორე აპროაჩი იყო შელ სკრიპტის დაწერა. ხო კიდევ აქ nginx ტუტორიალში გიწერია რამოდენიმე სერვერი და წიგნში იგივე მიზნისთვის http_proxy გამოიყენება. ანუ ეს პროქსი აკეთებს round robin-ს სერვერებზე... და მთავარი პრობლემა არის სესია. ანუ დაუშვათ სერვერ 1-ზე გაშვებული სესია სერვერ 2-მა არ იცის... ამის მოსაგვარებლად კიდევ memcached მოდულს იყენებენ... პრინციპში არ მესმის ngnix-ის გამოყენების აზრი თუ http_proxy + memcached შეიძლება გაკეთება. (+იგივე ვირტუალ ჰოსტების http_proxy-თ შეიძLება) ეს 1 წიგნი მოვრჩი... "Learning Node.js A Hands-on Guide to Building Web Applications in java[ertad]script (Marc Wandschneider)" ყველა ნუბს ურჩევ... ეხლა დამრჩა Practical Node.js და Professional Node.js |
Posted by: web_nts 17 Nov 2016, 02:14 | ||
http_proxy ვებ სერვერი არ არის, Nginx-ს პროქსის ფუნქციის გარდა უამრავი პლიუსი აქვს. ჰედერების, დომენების და სუბდომენების მართვა, მოთხოვნების რაოდენობის და ზომების ლიმიტირება, სტატიკურ ფაილებთან მუშაობა, უმარტივი SSL კონფიგურაცია და ასე შემდეგ. პროდუქციაში ჩაშვებულ აპლიაკაციაში კლიენტს პირველი უნდა შეხვდეს ვებ სერვერი რომელიც შემდეგ გადაანაწილებს მოთხოვნებს, უზრუნველყოფს SSL-ს და შემდეგ რა პორტზე და სერვერზეც გინდა გადაამისამარათებს პატარა დატვირთვაზე თვითონ ნოდიც გაქაჩავს ვებ სერვერად, მაგრამ რაც უფრო იზრდება მოთხოვნა მით უფრო აცნობიერებ გამოცდილი ვებ სერვერის უპირატესობას. ზოგადად პროქსირება, ლოად ბალანსიც და SSL-ი, პირდაპირ ნოდიდანაც შეიძლება. მეოთხმოცე პორტზე ადმინისტრატორის პრივილეგიიანი ექაუნთით გაუშვებ ერთ აპლიკაციას რომელიც შემდეგ ასინქრონული http მოთხოვნებით გადაანაწილებს სხვადასხვა პორტებზე არსებულ ნოდის აპლიკაციებზე მოთხოვნებს... მაგრამ რატომ? ვერასოდეს ვერ მიაღწევ Nginx-ის ან Apache-ს დონის რენტაბელურობას (ფუნქციონალურობაზე რომ არაფერი ვთქვათ). სესიებს რაც შეეხება, საერთოდ არ არის საჭირო. თუ აპლიკაცია სესიებზეა დამოკიდებული, ვერასდორს ვერ მიაღწევს ულიმიტო ზრდის შესაძლებლობას. როდესაც სერვერების რაოდენობის ავტომატიზირებულ ზრდაზე და შემცირებაზეა საუბარი, მარტო ნოდის სესიებია პრობლემა? AES256-ით რამოდენიმეჯერ დაკრიპტული cookies + ბრაუზერის სესიები (ოღონდ არა PHP-ს გაგებით სერვერზე ფიზიკურად შენახული სესიები).. ნოდის crypto მოდულით AWS-ის ყველაზე სუსტი სერვერით, კლიენტის ნებისმირი საჭირო ინფოს 10-ჯერ დაკრიპტვას (თითოეულ ჯერზე უნიკალური რენდომ სტრინგის ინექციით) და მერე მის უკან აღდგენას ჭირდება ზუსტად 1 მილიწამი. რა საჭიროა სტანდარტული გაგებით სესია როდესაც ასეთი რამე შეგიძლია და ასე სწრაფად? |
Posted by: Roofus 17 Nov 2016, 03:12 |
web_nts ქუქიების და ცვლადების გაგებით ვთქვი სესია... ანუ ერთ სესიაში თუ იუზერი დალოგინდა მეორე სერვერზე ეგ არ აისახება ანუ... ვერ... თუ როგორცაა ესეიგი nginx გასაგებია. |
Posted by: web_nts 17 Nov 2016, 13:08 |
Power of Node.js https://samy.pl/poisontap/ |
Posted by: X2D3T9 17 Nov 2016, 15:09 |
web_nts რა მაინტერესებ იცი აქ რომ გიწერია https://forum.ge/?showtopic=34905806&view=findpost&p=49263142 კონფიგურაცია პორტებზე ეხლა ვაწყობ ვირტუალზე შესაძლებელია მაგ პორტებზე მაგალთად სხვა დომენები მიაბა ან თუნდა სუბდომენები ? პინგვინებში მინდოდა მეკითხა და ბარემ აქ ვიკითხავ არაფრის დიდებით არ წერს ნოდარას მაგ მეთოდითაც ვცადე და wget ით თვითნ ფაილის გადმოწერეა მარა შუაზე გაირღვა არ უკავშირდება ფაივოლი გათიშული იპთეიბლებიც გავთიშე მიშველეთ რამე |
Posted by: web_nts 17 Nov 2016, 16:34 | ||||
X2D3T9
კი შეიძლება ძალიან მარტივად, დავწერ ცოტა ხანში.
Centos 7-ზე ვერ აყენებ ამ მეთოდით? რას გიწერს შეცდომას ან სად იჭედები დააკოპირე აბა. თუ დააყენე და ვერ უკავშირდები პორტს? node --version ჩაწერე აბა კონსოლში რას წერს. |
Posted by: X2D3T9 17 Nov 2016, 16:39 |
web_nts ფაირვოლის ბრალი ყოფილა 80 პორტი დავამატე იპტეიბლებში და არ ვასეივებდი თურმე ეხლა გაიშვა |
Posted by: web_nts 17 Nov 2016, 17:06 | ||||||
X2D3T9 იგივე პორტებზე სხვა დომენების/საბ დომენების მიბმას რაც შეეხება, სამნაირად შეგიძლია გააკეთო: 1.ყველაზე მარტივად იგივე კონფიგში უბრალოდ სერვერის სახელებში დაამატო ახალი დომენი ან საბდომენი:
2. მეორე სერვერის კონფიგი გააკეთო სხვა დომენებისთვის (სერვერების რაოდენობაში ლიმიტირებული არ ხარ) და იგივე ნოდის upstream-ზე დალინკო:
3. ვაკეთებთ იგივეს რასაც ზემოთ, მაგრამ სერვერის გარდა ვამატებთ იგივე upstream-ს ოღონდ სხვა სახელით რომელსაც გამოვიყენებთ მეორე სერვერში:
მოკლედ, კარგი რამეა Nginx უამრავი ხერხი არსებობს ერთი პრობლემის გადასაჭრელად... რომელიც უფრო მოხერხებულია იმას აირჩევ. |
Posted by: X2D3T9 17 Nov 2016, 20:40 |
გამაცოფა მივაგდე იმენა შეჯდა ჯორზე არ ეშვებეა არ ვიცი ყველაფერი ასე გავაკეთე რა მაგალითებს არ გადავხედე მარა არ ეშვება.... curl http://chemiaipi იძლეოდა ბედ გეითვეის .... კონფიგს ვერ ვაკეთებ ნორმალურათ დაწყნარებულზე მივხედავ მერე |
Posted by: web_nts 17 Nov 2016, 23:47 | ||
X2D3T9
უცნაურად კი შეიძლება მოგეჩვენოს ეა კითხვა, მაგრამ აპლიკაცია გაშვებული გაქვს ნოდის მაგ დროს როდესაც მოთხოვნას აკეთებ? 503 bad gateway მოდის მაშინ როდეააც აპლიკაცია ჩართული არ არის და ngimx პროქსის ვერ ნახულობს. |
Posted by: X2D3T9 18 Nov 2016, 01:57 |
web_nts კი რა თქმა უნდა რაღაცას nginx ში ვერ ვშვები კარგათ ხვალ ჩავუჯდები კიდე და დავწერ თუ რამე ისე არწავიდა.... ამერდამერია ყველაფერი რაღაც იპტეიბლები დავაყენს კიდე ათასი სისულელე დამავიწყდა სად რა გავაკეთე |
Posted by: web_nts 18 Nov 2016, 13:40 |
X2D3T9 დადე მთლიანი კონფიგი აბა და ვნახავთ სადაა შეცდომა. ნოდის პორტზე მუშაობს აპლიკაცია? ანუ http://chemiip:3000 -ზე და Nginx შეცდომას გიგდებს? |
Posted by: X2D3T9 18 Nov 2016, 14:01 |
web_nts კი ეგრე შვებოდა ცენტოსზე ეხლა უბუნტუს ვიყენებ დესკტოპად და იქ გავუშვი თავისუფლად კონფიგები დიდათ არ განსხვავდება არ უნდა გამიჭირდეს მორგება ვნახოთ... |
Posted by: web_nts 18 Nov 2016, 14:58 |
X2D3T9 ხო დეკსტოპად თუ გაქვს უბუნტუ, ცენტოსის ვირტუალურად გაშვებას აზრი არ აქვს. Nginx ის კონფიგი იგივეა ნებისმიერ ლინუქსზე. |
Posted by: Svani91 18 Nov 2016, 22:53 |
web_nts ცენტოს 6 ზე რამე სხვა კონფიგები ხო არ უნდა? ძლივს დამიყენეს ვპს და სანამ ეგენი შეცვლიან |
Posted by: web_nts 18 Nov 2016, 23:04 | ||
Svani91
წესით არაფერი სხვაობა არ არის თუ სადმე გაიჭედე დასქრინე |
Posted by: pixel4ever 19 Nov 2016, 01:40 |
Hapi.js ხო არ იყენებთ ვინმე, მითხრეს რომ უფრო დაცულია ვიდრე Express და უკეთესიაო მოკლედ და მაინტერესებს რამდენად სიმართლეს შეესაბამება. Express ვხმარობ მე და ჯერ ჯერობით ძალიან კმაყოფილი ვარ |
Posted by: Roofus 19 Nov 2016, 03:52 |
pixel4ever api სერვერისთვისაა ეგ hapi უფრო მარტივად / სწრაფად აკეთებ ამგით ვიდრე ექსპრესითო... წიგნშია ეგრე პრაქტიკაზე ჯერ არ გადავსულვარ ცოტახანში * * * მულტისრეადინგისთვის კლასტერზე რას იტყვით? http://nodejs.org/api/cluster.html ეს საერთოდ Ebay-ს გაუკეთებია https://github.com/cubejs/cluster2 funfact Hapi wallmart labs-ის გაკეთებულია. |
Posted by: X2D3T9 19 Nov 2016, 13:16 |
ერორ ჰენდლერებზე რას იყტვით ვისაც გამოცდილება გაქვთ იქნება ორი სიტყვით დაწეროთ.... მაგალითად მინდა ეხლა დავწერი რამე ფუნქცია ბაზიდან (მანგუსს ვიყენებ) ინფოს წამოღების,ჩაწერის,წაშლის ერორები საჭირო ფორმით გამოვიტანო პროდაქშენზე.... როუტებზე გასაგებია გავიასნდი.... დიდი მნიშვნელობა აქვს ალბათ დამეთანხმებით ერორების სწორად გამართვას.... რამ პატარამაგალითი რომ მაჩვენოთ როგორ მივაწოდო კლიენტს მაგალითად 404 , 500, ერორი ჯეისონ ფორმატში.... ანუ სერვერისგან კლიენტმა უნდა მიიღოს მაგალითად სოკეტ აიოთი |
Posted by: web_nts 19 Nov 2016, 14:50 | ||||||||||||||
X2D3T9
HTTP Error ჰედერი რომ დააბრუნოს ეს გინდა თუ სოკეტს რომ გადასცე რომ რაღაც შეცდომა დაფიქსირდა? 50x ერორს როგორც წესი აპლილაცია არ ეგენერირებს. 50x ერორებს აგენერირებს ვებსერვერი როდესაც აპლიკაცია მიუწვდომელია. 404 ერორი (ფაილი ვერ მოიძებნა) სოკეტში რაში გჭირდება? ფაილს აწვდი სოკეტით? (სოკეტებზე იმიტომ გეკითხები რომ სოკეტ.იო ახსენე). თუ HTTP ერორებს გულისხმობ, მაშინ სტატუსად უნდა დააყენო შეცდომის კოდი:
ან პირდაპირ მიაბავ სენდს და სტატუსს:
ასევე შეგიძლია გააგზავნო სტატუსი ტექსტის გარეშე ან სპეციალურად გამზადებულ ფაილთან ერთად:
JSON-ად გადაცემას რაც შეეხება, არ აქვს მნიშვნელობა ერორს აგზავნი თუ არა, JSON ჰედერი და ობიექტის სტრინგიფიცირება გჭირდება:
|
Posted by: Roofus 19 Nov 2016, 14:56 | ||
X2D3T9
|
Posted by: X2D3T9 19 Nov 2016, 16:24 | ||||
აჰააა გასაგებია ესეიგი რას ვაკეთებ შეხედეთ ერთი მიდლვეირი რომელიც მაქვს შემდეგი თუ რამე ჩეპე მოხდა კოდში ვაგზავნი 500 მერე კლიენტის შევამოწმებ და დავუგენერირებ შესაბამის შეტყობინებას
ესეც ერთერთი როუტი
აქ ბაზიდან მომაქვს ინფო თუ რამე ჩეპე მოხდა ვაგზავნი 404 ს და რაღაც მესიჯს ეს ისე სატესტოდ ყველაფერი დავტესტე ბაზის შეცდომაც,ან კოდში რამე სხვა შეცდომა გავიდა კოდი არ ეკიდება და აგზავნის 500 ს კლიენტს ეხლა მაინტერესებს რას ვაკეთებ არასწორად? კლიენტი სულ ცალკეა დატას იღებს ჯეისონ ფორმატში დალშე იქვამუშავებ პატარა აპლიკაციას ვაკეთებ რომ დავასრულებ წარმოგიდგენთ ჩემს ნაწვალებს კიდე რაღაც კითხვები მაქვს მაგრამ ეხლაა არა რომ მივალ იქამდე მერე გკითხავთ ხო ჯსონს რაც შეეხება ეს მაქვს app.use(bodyParser.json({limit: '10mb'})); სოკეტის გამოყენებს ვაპირებ მაგრამ როგორც ჩანს რასაც ვფიქრობდი არასწორი მიდგომაა მერე გკითხავთ ამაზეც მანდამდე რომ მივალ |
Posted by: web_nts 19 Nov 2016, 16:42 | ||||||||||||||
Roofus
SyntaxError: missing ) after argument list
რა დანიშნულება აქვს?
SyntaxError: missing ) after argument list სწორი ფორმა იქნებოდა ეს
მაგრამ მე პირადად მირჩევნია რომ ჰედერი და სტრიგიფიცირება მე თვითონ გავუკეთო, ვიდრე ექსპრესს გადავაბარო
პირდაპირ ექსპრესისთვის ობიექტის გადაცემისას სტრინგიფაის და ჰედერს ექსპრესი აკეთებს ავტომატურად. ამ შემთხვევაში კი მე ვაკონტროლებ სტრინგიფაის, შემიძლია pretty-print გავაკეთო დეველოპმენტისას JSON.stringify({ "error":null, "info":"some_info" }, null, '\t'); ან გამოვიყენო replacer რასაც ექსპრესში პირდაპირ ობიექტის გადაცემისას ვერ ვიზავ. ისე setHeader მუშაობს, მაგრამ იდეაში ჩანაცვლებულია უბრალოდ set -ით ახალ ექსპრესში.
ასევე რამოდენიმე ჰედერის ერთად დამატება შეიძლება ობიექტად
http://expressjs.com/en/api.html#res.set |
Posted by: web_nts 19 Nov 2016, 17:14 | ||||||
X2D3T9 მე მგონი use და next არასწორად გაიგე
use-ში რასაც ჩაწერ, ის ყველა როუტზე სრულდება თან სანამ როუტის კოდამდე მიაღწევს მანამდე. შენს შემთხვევაში next() არაფერს არ აკეთებს ვინაიდან res.status(500).end(); ამ კოდის მერე res რესურსი აღარ არსებობს (end ანადგურებს) და ყველა როუტი ჩაკეტილია ავტომატურად ამ ფუნქციის მიერ. use უნდა გამოიყენო დამხმარე ფუნქციად რომელიც სრულდება როუტის მოთხოვნამდე... აი პატარა მაგალითი:
პირველად შესრულდა ის ფუნქცია რაც იყო მოთავსებული .use-ში, ამ ფუნქციაში შეიქმნა დროებითი ობიექტი (MYAPP) ამჟამინდელი თარიღით რომელიც დაემატა req ობიექტს, შემდეგ შესრულდა next() და გადავედით როუტერზე. შენს კოდში სანამ როუტერამდე მივა მანამდე ასრულებ ყველაფერს res.status(500).end(); ამ მოთხოვნით (res ობიექტს ანადგურებ).
ამ კოდში კი next-ის გამგრძელებელი არ გაქვს არაფერი. |
Posted by: X2D3T9 19 Nov 2016, 17:24 | ||
web_nts აჰა ესეიგი ეს ნექს გავიგე ესეც შეიძლება ხო next(err); ავიჭერი ეხლა ეს use რომელშიც მოქცეული მაქვს მაგალითად ეს რომელიც ექსპრესს უწერია დეფაულტად ეს მიდლვერები
და არის როუტების დაბლა ეხლა შევამოწმე და როუტების მაღლა ამის ატანის დროს არ Mუშაობს მაგალითად დბ-ს კოდში შეცდომა გავაკეთე და გამომიყარა მთლიანი სტეკი შეცდომის |
Posted by: web_nts 19 Nov 2016, 17:26 | ||||||||||||||
X2D3T9 შენს მაგალითში ერორზე ნექსთი რომ გამოიყენო, ასე უნდა გააკეთო
* * * X2D3T9
დეფოლტის მოდიფიკაცია თუ გინდა ასე უნდა გააკეთო:
ერორის შემთხვევაში მომენტალურად შესრულდება use-ში რაც წერია
და არავითარი ნექსთის გამოყენება არ დაგჭირდება.
ავტომატურად დაიგნორდება ვინაიდან ერორი გამოიყენებს პირველად send-ს და მეორე send ავტომატურად იგნორდება. * * * X2D3T9
ხო, მეც შეცდომით დამიწერია მაგალითში. use-ს გამოყენებისას მდებარეობას მნიშვნელობა აქვს. ჩემს მაგალითშიც ქვემოთ უნდა იყოს use.
|
Posted by: X2D3T9 19 Nov 2016, 19:48 |
web_nts გასაგებია გავიასნდი მადლობა რა მაინტერესებს ეხლა ეს ინფოს წამოღების ფუნქციაში api როუტში რომ სრულდება err ქოლბექის არგამოყენება ანუ უყურადღებოთ დატოვება სწორია? თუ მაგაზეც ის 500 ის მიდლვერი აგებს პასუხს? |
Posted by: Svani91 22 Nov 2016, 03:34 |
აქ ვიკითხავ ბარემ nginx დავაყენე და წვდომა რო მქონოდა iptables გავთიშე საერთოდ სწორია ესე? |
Posted by: Roofus 22 Nov 2016, 05:08 | ||
Svani91
არანაირად არ არის სწორი. მარტო 80 პორტი გახსენი... მოკლავ ეგრე სერვერს... თან ძალიან მალე ... ბრუტით აიღებენ და ვირუსს აგკიდებენ... ბოტები... მარტო 80 პორტი გახსენი. აჰა iptable-იც აყენია და fail2ban-იც... ანუ ბანში მიდიან მე-3 არასწორ ცდაზე და მაინც რამდენია... ანუ სადღაც 48 საათში დაახლოებით 400 სხვადასხვა ჰოსტიდან იყო მცდელობა SSH-ზე... ხოდა წარმოიდგინე რომ თავი არ დაიცვა რამდენ დღეში გაგტეხავენ? გაგტეხავენ და მერე შენი სერვერი იქნება მაგათი ვირუსის გასავრცელებელი ნოდი... პ.ს. AWS-ზე დავრეგისტრირდი და ძალიან დამევასა <3 REHL + თავიანთი ფაირვოლი. |
Posted by: Svani91 22 Nov 2016, 05:36 |
Roofus მადლობა, გავაკეთე |
Posted by: Roofus 22 Nov 2016, 05:59 | ||
Svani91
არაფრის, წარმატებები |
Posted by: Svani91 22 Nov 2016, 06:07 |
Roofus web_nts თქვენ გაიხარეთ, nginx - იც გავუშვი 80 - ზე და node - ც ზედ დავაყოლე, მუშაობს! * * * დომენი უნდა ვიყიდო და ჩემი vps დნს სერვერად როგორ ვაქციო დაწერეთ თუ მოიცლით |
Posted by: web_nts 23 Nov 2016, 02:53 | ||
Svani91
არ აიტკიო თავი ტყუილად DNS მართვა ასე ადვილი არ არის... თან რა საჭიროა როდესაც მილიონი უფასო და ფასიანი ვარიანტია? დომენი სადაც იყიდე იმათვე ექნებათ DNS მართვის პანელი რომელშიც A ჩანაწერს გააკეთებ შენი სერვერის IP-ზე და ეგაა. უფრო დახვეწილი, დაცული, პროფესიონალური და რაც მთავარია უფასო DNS + CDN სერვისისთვის გამოიყენე https://www.cloudflare.com/ |
Posted by: Svani91 23 Nov 2016, 03:24 |
web_nts მადლობა namecheap - ზე დავამატე უკვე A ჩანაწერი, ალბათ ივარგებს * * * web_nts დომენს თბილისში იყიდიან, მაგათ მართვა თუ გააკეთეს მაქსიმუმ primary და slave ქონდეთ ნეიმჩიპისას გავაწერინებ და აქედან ვმართავ მერე |
Posted by: Roofus 23 Nov 2016, 06:14 |
აქვე დავწერ ვისაც nginx - CentOS/REHL ექნება პრობლემა 502 ერორით (no gateway) ანუ ვერ ხედავს ნოდს... SELINUX-ის პერმიშენების ბრალია ეს გაუწერეთ setsebool -P httpd_can_network_connect on http://serverfault.com/a/699885 |
Posted by: Svani91 25 Nov 2016, 02:21 | ||
ვისაც გახსოვთ ჩემი ჰედერ დატა და მასთან დაკავშირებული პრობლემები, ესე გადავაკეთე
|
Posted by: Roofus 25 Nov 2016, 10:05 | ||||||
|
Posted by: Svani91 27 Nov 2016, 11:59 | ||
web_nts მოკლედ, აქამდე nosql თან შეხება არ მქონია დღეს ბევრი ვიფიქრე რელაციებზე და აქამდე მივედი https://docs.mongodb.com/manual/tutorial/model-referenced-one-to-many-relationships-between-documents/
სადაა ჩემი რელაციები Mongoose უნდა გამოვიყენო მგონი |
Posted by: web_nts 27 Nov 2016, 15:35 | ||
Svani91
რის მიღწევას ცდილობ და ნოდში როგორ აკეთებ მოთხოვნას მთლიანად დაწერე. ვერ მივხვდი |
Posted by: Roofus 27 Nov 2016, 18:18 |
Svani91 რელაციები საერთოდ არაა... ეგ არის რომ NoSQL არის დოკუმენტზე ორიენტირებული და არა რელაციაზე. შესაბამისად სკალირება (ჰორიზონტალური, გაშლილი ანუ) უფრო მარტივია... თეორიაში. მეც არ მქონია შეხება ჯერ მაგრამ რაც ნეტში გადავიკითხე და რაც წიგნიდან ამოვიკითხე (ეხლა დავიწყე კითხვა) იმის მიხედვით შევეცდები განხსვავება აგიხსნა... და რაც არ უნდა გასაოცარი იყოს მართლა ასეთი სისტემაა. ანუ შემა (scheme) არ არსებობს მონგოში, შეგიძლია ნებისმიერ დროს შეცვალო წყობა დოკუმენტის (დოკუმენტი არის row mysql-ში ანალოგი მონგოში) ანუ სხვადასხვა წყობის დოკუმენტები შეიძლება იყოს ერთ კოლექციაში. მონგუსით შეგიძლია შექმნა ფსევდო შემა და ვსევდო რელაციები, რომლებიც იდეაში შეგიძლია დაარღვიო და შეცვალო ნებისმიერ დროს. მონგოს დოკუმენტი წარმოიდგინე როგორც ჯავასკრიპტის ობიექტი (ჯსონ ფორმაში). ესეც კიდევ საკმაოდ კარგი წიგნი. https://www.dropbox.com/s/8d7xz5xznrdnvu2/Kristina%20Chodorow%20%E2%80%94%20MongoDB%20The%20Definitive%20Guide%2C%202nd%20Edition%20%E2%80%94%202013.pdf?dl=0 |
Posted by: Svani91 28 Nov 2016, 03:37 | ||||
web_nts ნატივ მონგოდიბიში მინდოდა ერთი მრავალთან რელაცია, ოღონდ ისე რო მე არ მეწერა sub-query - ები მონგუსმა გააკეთა საქმე ზუსტად ისე, როგორც მინდოდა, თან ცოტა ენტიტი კოდ ფერსტის მსგავსია და მაგრად მომეწონა სქემების და მოდელების შექმნის საშუალება რომ გაქვს Roofus დიდი მადლობა, ზუსტად ეგ არის რაც მინდოდა - კატეგორიის და პროდუქტის მიბმა და როცა პროდუქტი მომაქვს, მოყვება მირეფერენსებული კატეგორიაც ეს სქემა ორივე დოკუმენტის
ეს query
|
Posted by: Roofus 28 Nov 2016, 05:24 | ||
Svani91
არაფრის... |
Posted by: Svani91 12 Dec 2016, 05:49 |
უსაფრთხოების მხრივ, რას მეტყვით ჩემზე გამოცდილო ხალხო? ) https://expressjs.com/en/advanced/best-practice-security.html |
Posted by: web_nts 12 Dec 2016, 18:40 |
Svani91 https://blog.risingstack.com/node-js-security-checklist/ აქ არის კარგად აღწერილი ყველაფერი |
Posted by: Svani91 15 Dec 2016, 22:34 |
web_nts მადლობა |
Posted by: AIX-500 22 Dec 2016, 02:39 |
nodejs-ში კარგად ვინც ერკვევა. ოღონდ აი ძაან კარგად უნდა იცოდეს async,restapi,json და გააჩნია problem solving skills და ერკვევა linux-ში და იცის bash ასევე გარკვეულ წილად იცის nodejs internals და იცის როგორ იპოვნოს memory leak და შეუძლია c++-ზე დაწეროს nodejs-სთვის პლაგინი მაშინ ძალიან მაღალ ხელფასად ქამან. ზემო ჩამოთვლილი თითეული საკითხის არ ცოდნაში ხელფასს აკლდება 500$. ასე რომ დამწყები თუ ხარ მაქს 500$ დალშე იმის და მიხედვით რა იცი. |
Posted by: gio_rgi 2 Oct 2017, 18:01 |
https://www.youtube.com/watch?v=DG3i75kF7D0&list=PL4N8D_M1qD6E8k2o8v9eCTai20SP5fhct https://www.youtube.com/watch?v=aJlB07_JTs0&list=PL4N8D_M1qD6GWhlfyAIkUqtR472L9wcT0 |