Σύντομη περιγραφή των Node.js, Koa.js και Apache
Ρύθμιση του Node.js
Ρύθμιση του καταλόγου εφαρμογών μας
Εγκατάσταση του Koa.js
Εγκατάσταση του Apache
Διαχείριση της εφαρμογής μας με το systemd
συμπέρασμα
Σε αυτό το σεμινάριο, θα μάθουμε πώς να ρυθμίζουμε μια διαδικτυακή εφαρμογή Koa.js για παραγωγή, χρησιμοποιώντας το Node.js. Θα συνδέσουμε επίσης ένα δείγμα τομέα, με έναν αντίστροφο διακομιστή μεσολάβησης, χρησιμοποιώντας το Apache και θα μάθουμε πώς να τον διαχειριζόμαστε με έναν κατάλληλο διαχειριστή διεργασιών. Χωρίς περαιτέρω καθυστέρηση, ας ξεκινήσουμε.
Σύντομη περιγραφή των Node.js, Koa.js και Apache
Το Node.js είναι ένα γρήγορο, cross-platform πλαίσιο JavaScript που βασίζεται στη μηχανή V8 του Chrome. Χρησιμοποιείται τόσο σε επιτραπέζιους υπολογιστές όσο και σε εφαρμογές διακομιστή και είναι διάσημο για τον χειρισμό βρόχου συμβάντων ενός νήματος. Το Node.js διαθέτει ένα μητρώο πακέτων που ονομάζεται Node Package Manager (NPM), το οποίο φιλοξενεί πάνω από μισό εκατομμύριο πακέτα. Τα πακέτα (ή λειτουργικές μονάδες) NPM αποτελούν τον βασικό κορμό του Node.js, καθώς είναι κώδικας που βασίζεται στην κοινότητα που μπορεί να είναι χρήσιμος στην εφαρμογή Node.js. Στην εφαρμογή Koa.js, το Node.js είναι το βασικό μέρος της λειτουργίας του.
Το Koa.js είναι ένα μινιμαλιστικό πλαίσιο web, χτισμένο στην πλατφόρμα Node.js. Κατασκευασμένο από την ίδια ομάδα πίσω από το δημοφιλές πλαίσιο Express.js, στόχος του είναι να ελαχιστοποιήσει περαιτέρω το ήδη μινιμαλιστικό πλαίσιο Express.js εξαιρώντας το ενδιάμεσο λογισμικό από τον πυρήνα του. Ένα σημαντικό χαρακτηριστικό του Koa.js είναι το γεγονός ότι δεν υπάρχουν ανακλήσεις. Το Koa.js είναι χτισμένο σε γεννήτριες που βασίζονται σε ES6 και χαρακτηριστικά ES6, όπως το Promises.
Ο Apache είναι ένας δημοφιλής διακομιστής ιστού ανοιχτού κώδικα, που χρησιμοποιείται ως πολύ βασικό σημείο εκκίνησης για διακομιστές Ιστού. Σε αυτό το σεμινάριο, θα χρησιμοποιήσουμε τον Apache ως αντίστροφο διακομιστή μεσολάβησης, ο οποίος θα μας επιτρέψει να συνδέσουμε την εφαρμογή μας με ένα δείγμα τομέα. Εάν δεν διαθέτετε τομέα, αυτό το σεμινάριο θα συνεχίσει να λειτουργεί για εσάς, με τη μόνη διαφορά ότι ο ιστότοπος θα εκτελείται στο VPS IP σας, αντί για έναν τομέα.
Ρύθμιση του Node.js
Όπως με κάθε πλαίσιο Node.js, θα χρειαστεί να εγκαταστήσετε το Node.js στο VPS σας. Για χάρη αυτού του σεμιναρίου, θα υποθέσω ότι έχετε ήδη εγκατεστημένο το Node.js στο σύστημά σας. Εάν όχι, μπορείτε απλώς να ακολουθήσετε τις οδηγίες εδώ .
Ρύθμιση του καταλόγου εφαρμογών μας
Θα χρειαστεί να δημιουργήσουμε έναν φάκελο, ο οποίος θα περιέχει τα βασικά αρχεία της εφαρμογής μας.
mkdir site
Μη διστάσετε να αντικαταστήσετε siteμε οποιοδήποτε άλλο όνομα θέλετε για τον κατάλογο. Στη συνέχεια, θα χρειαστεί να αρχικοποιήσουμε το αρχείο πακέτου Node.js. Αλλάξτε στον κατάλογο που μόλις δημιουργήσατε, εκτελέστε το npm initκαι ολοκληρώστε τις προτροπές. Στο τέλος, θα πρέπει να μοιάζει κάπως έτσι:
{
"name": "site",
"version": "1.0.0",
"description": "Koa.js Site",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "yourname",
"license": "ISC"
}
Εγκατάσταση του Koa.js
Τώρα που έχουμε ρυθμίσει τον κατάλογό μας, μπορούμε να προχωρήσουμε στην εγκατάσταση του Koa.js. Στον τρέχοντα κατάλογο εργασίας /site, πληκτρολογήστε τα εξής.
npm install koa
Αυτό θα κατεβάσει τη λειτουργική μονάδα Koa.js από το NPM και θα την εγκαταστήσει στον κατάλογο του έργου μας για μελλοντική χρήση. Στη συνέχεια, θα δημιουργήσουμε το δείγμα του αρχείου εφαρμογής μας που θα περιέχει τον κωδικό της εφαρμογής μας. Για να το κάνετε αυτό, δημιουργήστε ένα index.jsαρχείο.
nano index.js
Μόλις μπείτε στο αρχείο, δημιουργήστε ένα δείγμα εφαρμογής.
const Koa = require('koa');
const app = new Koa();
app.use(async ctx => {
ctx.body = 'Hello World';
});
app.listen(3000);
console.log('Website is live!')
Αποθηκεύστε και κλείστε το αρχείο. CTRL+ X.
Θα θέλουμε να βεβαιωθούμε ότι η εφαρμογή μας εκτελείται σωστά. Για να το ξεκινήσετε, εκτελέστε το node index.jsκαι θα δείτε Website is liveστην κονσόλα.
Εγκατάσταση του Apache
Τώρα που γνωρίζουμε ότι ο ιστότοπός μας είναι λειτουργικός, μπορούμε να προχωρήσουμε στην εγκατάσταση του Apache και των εξαρτήσεών του.
sudo apt install -y libapache2-mod-proxy-html libxml2-dev
Για να χρησιμοποιήσουμε τη δυνατότητα αντίστροφου διακομιστή μεσολάβησης που βρίσκεται στο Apache, θα χρειαστεί να ενεργοποιήσουμε τις απαραίτητες λειτουργικές μονάδες.
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_ajp
a2enmod rewrite
a2enmod deflate
a2enmod headers
a2enmod proxy_balancer
a2enmod proxy_connect
a2enmod proxy_html
Ορισμένες από αυτές τις λειτουργικές μονάδες μπορεί να έχουν ήδη ενεργοποιηθεί, αλλά είναι πάντα καλό να τις ελέγχετε ξανά.
Τώρα πρέπει να επεξεργαστούμε το προεπιλεγμένο αρχείο ρυθμίσεων για τον Apache.
sudo nano /etc/apache2/sites-enabled/000-default.conf
Εδώ, θα χρειαστεί να προσθέσουμε ένα μπλοκ για την εφαρμογή μας.
<VirtualHost *:*>
ProxyPreserveHost On
ProxyPass / http://0.0.0.0:3000/
ProxyPassReverse / http://0.0.0.0:3000
ServerName localhost
</VirtualHost>
Αποθηκεύστε το αρχείο, CTRL+ X.
Μπορεί να παρατηρήσετε ότι χρησιμοποιούμε τη θύρα 3000ως θύρα για τη δική μας ProxyPassκαι την ProxyPassReverseIP. Δεδομένου ότι είναι η ίδια θύρα στην οποία εκτελούμε την εφαρμογή Koa.js, είναι επιτακτική ανάγκη να εισάγουμε τη σωστή θύρα.
Μόλις εφαρμοστούν οι αλλαγές, θα χρειαστεί να επανεκκινήσουμε τον Apache και να επανεκκινήσουμε την εφαρμογή Koa.js.
sudo systemctl restart apache2
Αυτό θα διασφαλίσει ότι το αρχείο διαμόρφωσής μας είναι ενεργό και έτοιμο για λειτουργία όταν ξεκινάμε την εφαρμογή Koa.js. Μόλις γίνει επανεκκίνηση του Apache, μεταβείτε στον κατάλογο του ιστότοπού σας και ξεκινήστε την εφαρμογή Koa.js όπως κάναμε προηγουμένως. Από το πρόγραμμα περιήγησής σας στον ιστό, μεταβείτε στο http://yourdomain, ή http://yourip:, και θα δείτε το "Hello World".
Διαχείριση της εφαρμογής μας με το systemd
Τώρα που καλύψαμε τα βασικά για τη δημιουργία ενός δείγματος εφαρμογής Koa.js, συνειδητοποιούμε ότι σε περιβάλλον παραγωγής, η εκκίνηση της εφαρμογής όπως είμαστε τώρα δεν είναι πρακτική. Ένας διαχειριστής διαδικασίας είναι σίγουρα μια απαίτηση. Εκεί μπαίνει στο παιχνίδι το systemd. Με απλά λόγια, το systemd αποτελείται από λογισμικό που παρέχει δομικά στοιχεία για ένα σύστημα Linux. Παρόμοια με το "init", παρέχει ένα σύστημα για τη διαχείριση των διαδικασιών χρήστη μετά την εκκίνηση του συστήματος. Στην περίπτωση της εφαρμογής μας, το systemd μας επιτρέπει να ξεκινήσουμε αυτόματα τον ιστότοπό μας μετά την επανεκκίνηση του συστήματος, σε περίπτωση που υπάρξει κάποιο συμβάν που διαταράσσει το χρόνο λειτουργίας του συστήματος. Παρέχει επίσης ένα σύνολο εργαλείων που μπορούν να φανούν χρήσιμα κατά τη διαχείριση της εφαρμογής μας. Το καλύτερο μέρος είναι το γεγονός ότι είναι ενσωματωμένο στο Ubuntu 16.04 LTS, επομένως δεν χρειάζεται να εγκαταστήσουμε επιπλέον λογισμικό.
Δημιουργία systemd υπηρεσίας
Όλα όσα χρειαζόμαστε για να ξεκινήσουμε την εφαρμογή μας θα περιέχονται σε ένα αρχείο που ονομάζεται service. Περιέχει λεπτομέρειες σχετικά με την εφαρμογή μας, όπως το όνομα, τον κατάλογο, το περιβάλλον και πολλά άλλα. Για να δημιουργήσετε το αρχείο του συστήματός μας, ανοίξτε ένα πρόγραμμα επεξεργασίας κειμένου.
sudo nano /lib/systemd/system/site.service
Επεξεργαστείτε και αποθηκεύστε το αρχείο έτσι.
[Unit]
Description=desc here
Documentation=https://example.com
After=network.target
[Service]
Environment=NODE_PORT=3000
Type=simple
User=youruser
ExecStart=/usr/bin/node /home/[youruser]/site/index.js
Restart=on-failure
[Install]
WantedBy=multi-user.target
Αντικαταστήστε youruserμε το όνομα χρήστη του διακομιστή σας. Ακολουθεί μια γρήγορη περιγραφή των σημαντικών πεδίων:
After - Αυτό ενημερώνει το systemd να περιμένει μέχρι να είναι έτοιμη η διεπαφή δικτύου πριν ξεκινήσει η εφαρμογή μας.
Environment- Εδώ μπορούμε να καθορίσουμε μεταβλητές περιβάλλοντος για την εφαρμογή μας. Η θύρα Node.js μας είναι μία από αυτές.
Type - Αυτό ενημερώνει τη systemd ότι η εφαρμογή μας μπορεί απλώς να ξεκινήσει, χωρίς να διαχωρίζονται τα δικαιώματα χρήστη και άλλα τέτοια.
User- Αυτό λέει στη systemd ότι θέλουμε να εκτελέσουμε την εφαρμογή στον λογαριασμό χρήστη μας, κάτι που συνιστάται. Η εκτέλεση εφαρμογών ως χρήστης root μπορεί να οδηγήσει σε πολλούς συμβιβασμούς στην ασφάλεια.
ExecStart - Ουσιαστικά η εντολή που θα εκτελεί το systemd για να ξεκινήσει η εφαρμογή μας, παρόμοια με το πώς την ξεκινούσαμε χειροκίνητα πριν.
Restart- Λέει στο systemd υπό ποιες συνθήκες να επανεκκινήσει την εφαρμογή μας. Σε αυτήν την περίπτωση, θέλουμε να κάνουμε επανεκκίνηση του ιστότοπού μας σε περίπτωση σφάλματος.
Ξεκινήστε την υπηρεσία systemd
Είμαστε πλέον έτοιμοι να ξεκινήσουμε την υπηρεσία systemd μας.
sudo systemctl daemon-reload
Αυτό είναι απαραίτητο κάθε φορά που αλλάζει ένα αρχείο υπηρεσίας systemd προκειμένου το systemd να καταχωρεί τις νέες αλλαγές που έγιναν.
Στη συνέχεια, ξεκινήστε την αίτησή σας.
sudo systemctl start site
Μεταβείτε ξανά στον ιστότοπο στο πρόγραμμα περιήγησής σας, για να επαληθεύσετε ότι όλα λειτουργούν.
Βασικές λειτουργίες διαχείρισης του συστήματος
stop - Διακόπτει εντελώς την εφαρμογή.
restart - Διακόπτει την εφαρμογή και την ξεκινά ξανά με μια νέα διαδικασία.
enable - Λέει στη systemd να ξεκινήσει την εφαρμογή κάθε φορά που εκκινείτε τον υπολογιστή σας.
status - Εμφανίζει πληροφορίες σχετικά με την τρέχουσα εφαρμογή, όπως χρόνο λειτουργίας, κατάσταση εφαρμογής και άλλα.
Για να χρησιμοποιήσετε οποιαδήποτε από αυτές τις λειτουργίες, εκτελέστε τα ακόλουθα.
systemctl <function> site
συμπέρασμα
Έχουμε δημιουργήσει με επιτυχία μια εφαρμογή Koa.js και μάθαμε πώς να την αντιστρέφουμε μεσολάβηση, καθώς και να τη διαχειριζόμαστε με το systemd. Τώρα είστε έτοιμοι να επεκτείνετε την εφαρμογή σας και να βασιστείτε σε αυτό το παράδειγμα. Εάν θέλετε να μάθετε περισσότερα για το Koa.js και περισσότερα πράγματα με τα οποία μπορείτε να κάνετε, επισκεφτείτε τον ιστότοπό του , για περισσότερες χρήσιμες πληροφορίες. Επιπλέον, εάν θέλετε να μάθετε περισσότερα σχετικά με τον διαχειριστή διεργασιών του systemd, διαβάστε την τεκμηρίωση για αυτόν εδώ . Τέλος, εάν θέλετε να μάθετε περισσότερα για τον αντίστροφο διακομιστή μεσολάβησης του Apache, μη διστάσετε να τον ελέγξετε εδώ .