Διακομιστής Ιστού σε CentOS 8 με php7, node.js και redis

πρόλογος

Έχουν περάσει 2 ημέρες από την κυκλοφορία μιας νέας έκδοσης του λειτουργικού συστήματος CentOS, δηλαδή του CentOS 8. Και μέχρι στιγμής υπάρχουν αρκετά άρθρα στο Διαδίκτυο για το πώς γίνονται τα πράγματα σε αυτό, οπότε αποφάσισα να καλύψω αυτό το κενό. Επιπλέον, θα σας πω όχι μόνο για τον τρόπο εγκατάστασης αυτού του ζεύγους προγραμμάτων, αλλά και για το πώς γενικά βλέπω την εγκατάσταση του Linux σε ένα εικονικό περιβάλλον στον σύγχρονο κόσμο για τυπικές εργασίες, συμπεριλαμβανομένων των διαμερισμάτων δίσκων και ούτω καθεξής.

Αλλά στην αρχή, θέλω να μιλήσω εν συντομία για το γιατί αξίζει να μεταβείτε σε αυτήν την έκδοση από όλες τις προηγούμενες και υπάρχουν δύο λόγοι για αυτό:

  1. php7! Στην προηγούμενη έκδοση του CentOS εγκαταστάθηκε το “Orthodox” php5.4...

    Εντάξει, για να είμαστε λίγο πιο σοβαροί, πολλά πακέτα ξεπήδησαν σε αρκετές εκδόσεις μαζικά. Εμείς (οι οπαδοί των λειτουργικών συστημάτων που μοιάζουν με redhat) έχουμε μπει επιτέλους, αν όχι στο μέλλον, τουλάχιστον στο παρόν. Και οι υποστηρικτές του Ubuntu δεν θα μας γελούν πια και δεν θα μας δείχνουν με το δάχτυλο, λοιπόν... τουλάχιστον για λίγο ;).

  2. Μετάβαση από το yum στο dnf. Η κύρια διαφορά είναι ότι τώρα υποστηρίζεται επίσημα η εργασία με πολλές εκδόσεις πακέτων ταυτόχρονα. Ακριβώς στα οκτώ, δεν το βρήκα ποτέ αυτό χρήσιμο, αλλά ακούγεται πολλά υποσχόμενο.

Δημιουργήστε μια εικονική μηχανή

Υπάρχουν διαφορετικοί hypervisors και δεν έχω στόχο να προσαρμόσω τον αναγνώστη σε έναν συγκεκριμένο, θα σας πω για τις γενικές αρχές.

Μνήμη

Πρώτα... Για να εγκαταστήσετε ένα σύστημα CentOS ξεκινώντας από το 7 σίγουρα, και κατά τη γνώμη μου αυτό συνέβαινε και στο 6 ("αλλά αυτό δεν είναι σίγουρο"), χρειάζεστε ελάχιστο 2 GB RAM. Επομένως, σας συμβουλεύω να δώσετε τόσα πολλά πρώτα.

Αλλά αν μη τι άλλο, μετά την εγκατάσταση το μέγεθος της μνήμης μπορεί να μειωθεί. Στο 1 GB το γυμνό σύστημα λειτουργεί αρκετά καλά, το έλεγξα.

δίσκος

Για μια κανονική εγκατάσταση, θα πρέπει να δημιουργήσετε έναν εικονικό δίσκο χωρητικότητας 20-30 GB. Αυτό είναι αρκετό για το σύστημα. Και δεύτερος δίσκος για δεδομένα. Μπορεί να προστεθεί τόσο στο στάδιο της δημιουργίας μιας εικονικής μηχανής όσο και μετά. Συνήθως το προσθέτω αργότερα.

επεξεργαστή

Σε έναν πυρήνα, το γυμνό σύστημα δεν επιβραδύνεται. Και επειδή οι πόροι είναι ελεύθερα επεκτάσιμοι, δεν βλέπω κανένα νόημα να δώσω περισσότερα στο στάδιο της εγκατάστασης (εκτός αν γνωρίζετε τέλεια τις απαιτήσεις και είστε πολύ τεμπέλης για να μεταβείτε ξανά στον διαμορφωτή)

Τα υπόλοιπα μπορούν συνήθως να παραμείνουν ως προεπιλογή.

Η πραγματική εγκατάσταση

Λοιπόν... Ας ξεκινήσουμε το πρόγραμμα εγκατάστασης... Προσωπικά, εγκαθιστώ τέτοιες υπηρεσίες μόνο με τη μορφή εικονικών μηχανών εδώ και πολύ καιρό, επομένως δεν θα περιγράψω όλα τα είδη των εγγραφών διανομής σε μια μονάδα flash - απλώς Τοποθετήστε το ISO ως CD στον αγαπημένο μου hypervisor, κάντε λήψη και πάμε.

Η βασική εγκατάσταση είναι αρκετά χαρακτηριστική, θα σταθώ μόνο σε μερικά σημεία.

Επιλογή πηγής

Από την κυκλοφορία της όγδοης έκδοσης, ο καθρέφτης από το Yandex βρίσκεται εδώ και μέρες. Λοιπόν, δηλαδή, ανεβαίνει περιοδικά και μετά αρχίζει πάλι να εμφανίζει ένα σφάλμα. Είμαι σίγουρος ότι οφείλεται σε υπερβολικό φορτίο στην υπηρεσία. Επομένως, για να αναφέρω την πηγή, έπρεπε προσωπικά, αντί να πληκτρολογήσω τη συνήθη διεύθυνση, να πάω εδώ, επιλέξτε τον καθρέφτη που μου αρέσει εκεί και εισάγετε μη αυτόματα τη διεύθυνση στο παράθυρο του προγράμματος εγκατάστασης. Είναι σημαντικό να θυμάστε εδώ ότι πρέπει να καθορίσετε τη διαδρομή προς το φάκελο όπου βρίσκεται ο κατάλογος repodata. Για παράδειγμα mirror.corbina.net/pub/Linux/centos/8/BaseOS/x86_64/os.

Διαμέριση δίσκου

Αυτή η ερώτηση είναι μάλλον θρησκευτική κατά τη γνώμη μου. Κάθε διαχειριστής έχει τη δική του θέση για αυτό το θέμα. Αλλά και πάλι θα μοιραστώ την άποψή μου για το θέμα.

Ναι, καταρχήν, μπορείτε να διαθέσετε ολόκληρο τον χώρο στη ρίζα και θα λειτουργήσει, τις περισσότερες φορές ακόμη και αρκετά καλά. Γιατί τότε να περιφράξετε έναν κήπο με διαφορετικά τμήματα; — Κατά τη γνώμη μου, υπάρχουν δύο βασικοί λόγοι για αυτό: οι ποσοστώσεις και η φορητότητα.

Για παράδειγμα, εάν κάτι πάει στραβά και προκύψουν σφάλματα στο κύριο διαμέρισμα δεδομένων, θέλετε να μπορείτε να εκκινήσετε το σύστημα και να εκτελέσετε μέτρα ανάνηψης. Επομένως, διαθέτω προσωπικά ένα ξεχωριστό διαμέρισμα για το /boot. Υπάρχει ένας πυρήνας και ένας bootloader. Συνήθως τα 500 megabyte είναι αρκετά, αλλά σε σπάνιες περιπτώσεις μπορεί να χρειαστούν περισσότερα και δεδομένου ότι έχουμε ήδη συνηθίσει να μετράμε χώρο σε terabyte, διαθέτω 2 GB για αυτήν την ενότητα. Και το σημαντικό εδώ είναι ότι δεν μπορεί να γίνει lvm.

Ακολουθεί η ρίζα του συστήματος. Για μια κανονική εγκατάσταση, δεν χρειάστηκα ποτέ περισσότερα από 4 GB ανά σύστημα, αλλά κατά τη διάρκεια προγραμματισμένων συμβάντων χρησιμοποιώ συχνά τον κατάλογο /tmp για να αποσυσκευάζω διανομές και δεν βλέπω κανένα νόημα να τον αφιερώνω σε ξεχωριστό διαμέρισμα - στα σύγχρονα συστήματα καθαρίζεται αυτόματα, επομένως δεν γεμίζει. Οπότε διαθέτω 8 GB για το root.

Ανταλλαγή... Σε γενικές γραμμές, η πρακτική χρήση του είναι ελάχιστη. Εάν αρχίσετε να χρησιμοποιείτε το swap στον διακομιστή σας, σήμερα στον πραγματικό κόσμο αυτό σημαίνει μόνο ότι ο διακομιστής πρέπει να προσθέσει περισσότερη μνήμη RAM. Διαφορετικά, τα προβλήματα με την απόδοση είναι εγγυημένα (ή κάποιο πρόγραμμα έχει «διαρροή» μνήμης). Επομένως, αυτή η ενότητα είναι απαραίτητη μόνο για διαγνωστικούς σκοπούς. Επομένως, τα 2 GB είναι ένας εξαιρετικός αριθμός. Ναι, ανεξάρτητα από το πόση μνήμη υπάρχει στον διακομιστή. Ναι, διάβασα όλα εκείνα τα άρθρα όπου γράφεται για την αναλογία όγκου μνήμης προς όγκο swap... IMHO, είναι ξεπερασμένα. Σε 10 χρόνια πρακτικής δεν το χρειάστηκα ποτέ αυτό. Πριν 15 χρόνια τα χρησιμοποιούσα, ναι.

IMHO, ο καθένας μπορεί να αποφασίσει μόνος του αν θα εκχωρήσει το /home σε ξεχωριστό διαμέρισμα. Εάν κάποιος στον διακομιστή θα χρησιμοποιήσει ενεργά αυτόν τον κατάλογο, είναι καλύτερα να τον εκχωρήσετε. Αν κανένας, δεν χρειάζεται.

Στη συνέχεια, /var. Κατά τη γνώμη μου, πρέπει οπωσδήποτε να τονιστεί. Αρχικά, μπορείτε να περιορίσετε τον εαυτό σας στα 4 GB και να δείτε πώς θα πάει. Και ναι, με το «πώς πάει» αυτό εννοώ

  1. Πρώτον, μπορείτε πάντα να προσαρτήσετε έναν άλλο δίσκο στον υποκατάλογο /var (τον οποίο θα δείξω αργότερα με ένα παράδειγμα)
  2. Δεύτερον, έχουμε lvm - μπορείτε πάντα να το προσθέσετε. Και συνήθως πρέπει να το προσθέσετε όταν αρχίζουν να χύνονται πάρα πολλά κούτσουρα. Αλλά δεν μπόρεσα ποτέ να προβλέψω αυτό το νούμερο εκ των προτέρων, οπότε ξεκινάω με 2 GB και μετά παρακολουθώ.

Ο μη εκχωρημένος χώρος θα παραμείνει ελεύθερος στην ομάδα τόμου και μπορεί πάντα να χρησιμοποιηθεί αργότερα.

LVM

Όλα Είναι λογικό να δημιουργείτε διαμερίσματα εκτός από το /boot στο LVM. Ναι, συμπεριλαμβανομένης της ανταλλαγής. Ναι, σύμφωνα με όλες τις συμβουλές, η ανταλλαγή πρέπει να είναι στην αρχή του δίσκου, αλλά στην περίπτωση του LVM δεν μπορεί να προσδιοριστεί κατ' αρχήν η θέση του. Αλλά όπως έγραψα παραπάνω, το σύστημά σας δεν θα έπρεπε χρησιμοποιήστε καθόλου το swap. Επομένως, δεν έχει σημασία πού βρίσκεται. Λοιπόν, δεν ζούμε το ’95, ειλικρινά!

Επιπλέον, στο LVM υπάρχουν αρκετές βασικές οντότητες με τις οποίες πρέπει να μπορέσετε να ζήσετε:

  • φυσικό όγκο
  • ομάδα τόμου
  • λογικός όγκος

Οι φυσικοί όγκοι συνδυάζονται σε ομάδες και κάθε φυσικός όγκος μπορεί να είναι μόνο σε μία ομάδα και μια ομάδα μπορεί να βρίσκεται σε πολλούς φυσικούς όγκους ταυτόχρονα.
Και οι λογικοί τόμοι είναι ο καθένας σε μια ομάδα.

Αλλά... Ανάθεμα, είναι πάλι ο 21ος αιώνας. Και οι διακομιστές είναι εικονικοί. Δεν έχει νόημα να εφαρμόζουμε σε αυτούς τους ίδιους μηχανισμούς που εφαρμόστηκαν σε φυσικούς. Και για τα εικονικά είναι σημαντικό να υπάρχουν δεδομένα ξεχωριστά από το σύστημα! Αυτό είναι πολύ σημαντικό, ιδίως για τη δυνατότητα γρήγορης εναλλαγής δεδομένων σε άλλη εικονική μηχανή (για παράδειγμα, κατά τη μετάβαση σε νέο λειτουργικό σύστημα) και γενικά για όλα τα είδη χρήσιμων καλούδια (ξεχωριστά αντίγραφα ασφαλείας κατά διαμερίσματα χρησιμοποιώντας εργαλεία hypervisor, για παράδειγμα) . Επομένως, μια ομάδα τόμων χρησιμοποιείται για το σύστημα και αναγκαστικά μια άλλη για δεδομένα! Αυτός ο λογικός διαχωρισμός βοηθάει πολύ στη ζωή!

Εάν δημιουργήσατε μόνο έναν εικονικό σκληρό δίσκο κατά τη δημιουργία μιας εικονικής μηχανής, εδώ τελειώνει η διαμόρφωση. Και αν υπάρχουν δύο, τότε απλά μην σημειώσετε ακόμα το δεύτερο.

Zapuskaem ustanovku.

Μετά την εγκατάσταση

Έτσι, το πρόσφατα εγκατεστημένο σύστημα ξεκίνησε επιτέλους. Το πρώτο πράγμα που πρέπει να ελέγξετε είναι το Διαδίκτυο.

ping ya.ru

Υπάρχει απάντηση; - Τέλεια, πατήστε Ctrl-C.
Αν όχι, πηγαίνετε να δημιουργήσετε ένα δίκτυο, δεν υπάρχει ζωή χωρίς αυτό, αλλά δεν πρόκειται για αυτό το άρθρο μου.

Τώρα αν δεν είμαστε ακόμα κάτω από το root, πηγαίνουμε κάτω από το root, γιατί πληκτρολογούμε ένα ο αριθμός των εντολών με το sudo προσωπικά με έσπασε (και ας με συγχωρήσουν οι παρανοϊκοί διαχειριστές):

sudo -i

Τώρα το πρώτο πράγμα που κάνουμε είναι να πληκτρολογήσουμε

dnf -y update

Και αν διαβάζετε αυτό το άρθρο το 2019, πιθανότατα δεν θα συμβεί τίποτα, αλλά άξιζε να το δοκιμάσετε.

Τώρα ας διαμορφώσουμε τον υπόλοιπο δίσκο

Ας πούμε ότι το διαμέρισμα με το σύστημα ήταν xvda, τότε ο δίσκος δεδομένων θα είναι xvdb. ΕΝΤΑΞΕΙ.

Οι περισσότερες συμβουλές ξεκινούν με το «Εκτέλεση fdisk και δημιουργία κατάτμησης...»

Αυτό λοιπόν είναι εσφαλμένα!

Θα το ξαναπώ γιατί είναι πολύ σημαντικό! Σε αυτήν την περίπτωση, η εργασία με LVM, η οποία καταλαμβάνει έναν ολόκληρο εικονικό δίσκο, η δημιουργία κατατμήσεων σε αυτόν είναι επιβλαβής! Κάθε λέξη σε αυτή τη φράση είναι σημαντική. Εάν εργαζόμαστε χωρίς LVM, πρέπει. Αν έχουμε σύστημα και δεδομένα στο δίσκο, τα χρειαζόμαστε. Αν για κάποιο λόγο χρειαστεί να αφήσουμε το μισό δίσκο άδειο, θα το κάνουμε κι εμείς. Αλλά συνήθως όλες αυτές οι υποθέσεις είναι καθαρά θεωρητικές. Γιατί αν αποφασίσουμε να προσθέσουμε χώρο σε ένα υπάρχον διαμέρισμα, τότε ο ευκολότερος τρόπος να το κάνουμε είναι με αυτήν τη διαμόρφωση. Και η ευκολία διαχείρισης υπερισχύει τόσο πολλών άλλων πραγμάτων που σκοπεύουμε να προχωρήσουμε προς αυτήν τη διαμόρφωση.

Και η ευκολία είναι ότι αν θέλετε να επεκτείνετε το διαμέρισμα δεδομένων, απλώς προσθέτετε κενά στο εικονικό διαμέρισμα και, στη συνέχεια, επεκτείνετε την ομάδα χρησιμοποιώντας το vgextend και αυτό είναι! Σε σπάνιες περιπτώσεις, μπορεί να απαιτείται κάτι άλλο, αλλά τουλάχιστον δεν θα χρειαστεί να επεκτείνετε τη λογική ένταση στην αρχή, κάτι που είναι ήδη ωραίο. Διαφορετικά, για να επεκτείνουν αυτόν τον τόμο, προτείνουν πρώτα να διαγράψετε τον υπάρχοντα και μετά να δημιουργήσετε έναν νέο από πάνω... Το οποίο δεν φαίνεται πολύ ωραίο και δεν μπορεί να γίνει ζωντανά, αλλά η επέκταση σύμφωνα με το σενάριο που ανέφερα μπορεί να είναι πραγματοποιείται "εν πτήσει" χωρίς καν να αποσυναρμολογηθεί το διαμέρισμα.

Έτσι, δημιουργούμε έναν φυσικό τόμο, μετά μια ομάδα τόμου που τον περιλαμβάνει και μετά ένα διαμέρισμα για τον διακομιστή μας:

pvcreate /dev/xvdb
vgcreate data /dev/xvdb
lvcreate -n www -L40G data
mke2fs -t ext4 /dev/mapper/data-www

Εδώ, αντί για κεφαλαίο γράμμα "L" (και το μέγεθος σε GB), μπορείτε να καθορίσετε ένα μικρό και, στη συνέχεια, αντί για απόλυτο μέγεθος, να καθορίσετε ένα σχετικό, για παράδειγμα, για να χρησιμοποιήσετε το ήμισυ του τρέχοντος ελεύθερου χώρου στο μια ομάδα τόμων, πρέπει να καθορίσετε "-l +50%FREE"

Και η τελευταία εντολή μορφοποιεί το διαμέρισμα στο σύστημα αρχείων ext4 (το οποίο μέχρι στιγμής, από την εμπειρία μου, δείχνει τη μεγαλύτερη σταθερότητα σε περίπτωση που χαλάσουν όλα, οπότε το προτιμώ).

Τώρα τοποθετούμε το διαμέρισμα στη σωστή θέση. Για να το κάνετε αυτό, προσθέστε τη σωστή γραμμή στο /etc/fstab:

/dev/mapper/data-www    /var/www                ext4    defaults        1 2

Και καλούμε

mount /var/www

Εάν παρουσιαστεί σφάλμα, ηχήστε το ξυπνητήρι! Γιατί αυτό σημαίνει ότι έχουμε ένα σφάλμα στο /etc/fstab. Και ότι στην επόμενη επανεκκίνηση θα έχουμε πολύ μεγάλα προβλήματα. Το σύστημα μπορεί να μην εκκινεί καθόλου, κάτι που είναι συχνά πολύ λυπηρό για τις υπηρεσίες cloud. Επομένως, είναι απαραίτητο είτε να διορθώσετε επειγόντως την τελευταία γραμμή που προστέθηκε, είτε να τη διαγράψετε εντελώς! Αυτός είναι ο λόγος για τον οποίο δεν γράψαμε την εντολή mount με μη αυτόματο τρόπο - τότε δεν θα είχαμε μια τόσο μεγάλη ευκαιρία να ελέγξουμε τη διαμόρφωση αμέσως.

Τώρα εγκαθιστούμε όλα όσα θέλαμε και ανοίγουμε τις θύρες για τον Ιστό:

dnf groupinstall "Development Tools"
dnf -y install httpd @nodejs @redis php
firewall-cmd --add-service http --permanent
firewall-cmd --add-service https --permanent

Εάν θέλετε, μπορείτε επίσης να βάλετε μια βάση δεδομένων εδώ, αλλά προσωπικά προσπαθώ να την κρατήσω ξεχωριστή από τον διακομιστή ιστού. Αν και το να την κρατάς κοντά είναι πιο γρήγορο, ναι. Η ταχύτητα των εικονικών προσαρμογέων δικτύου είναι συνήθως γύρω στα gigabit και όταν εργάζεστε στο ίδιο μηχάνημα, οι κλήσεις πραγματοποιούνται σχεδόν αμέσως. Αλλά είναι λιγότερο ασφαλές. Τι είναι πιο σημαντικό για ποιον;

Τώρα προσθέτουμε την παράμετρο στο αρχείο διαμόρφωσης (δημιουργούμε ένα νέο, η σύγχρονη ιδεολογία του CentOS είναι κάπως έτσι)

echo "vm.overcommit_memory = 1"> /etc/sysctl.d/98-sysctl.conf

Κάντε επανεκκίνηση του διακομιστή.
Στα σχόλια, με επέπληξαν επειδή με συμβούλεψαν να απενεργοποιήσω το SeLinux, οπότε θα διορθώσω τον εαυτό μου και θα γράψω για το γεγονός ότι μετά από αυτό πρέπει να θυμάστε να ρυθμίσετε το SeLinux.
Στην πραγματικότητα, κέρδος! 🙂

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο