Επιστροφή στο blog

Ρύθμιση ενός Redis Server ως Session Handler για PHP σε Ubuntu 20.04

Ρύθμιση ενός Redis Server ως Session Handler για PHP σε Ubuntu 20.04

Redis είναι ένα σύστημα προσωρινής μνήμης (cache) και αποθήκευσης ανοιχτού κώδικα, που αναφέρεται επίσης και ως διακομιστής δομών δεδομένων. Προσφέρει προηγμένη υποστήριξη για διάφορους τύπους δεδομένων, όπως hashes, λίστες, σύνολα (sets), bitmaps και πολλά άλλα. Λόγω της εξαιρετικής του απόδοσης, το Redis είναι ιδιαίτερα δημοφιλές σε κορυφαίους κλάδους και μεγάλες πολυεθνικές εταιρείες.

Οφέλη του Redis

Όσον αφορά την ταχύτητα, οι διακομιστές Redis δεν έχουν αντίπαλο. Ως NoSQL διακομιστής βάσης δεδομένων, προσφέρει εξαιρετική ταχύτητα αποθήκευσης και ανάκτησης δεδομένων. Επιπλέον, το Redis διαθέτει εξαιρετικές λειτουργίες που καθιστούν απρόσκοπτη τη συνεργασία με διαφορετικά δεδομένα, συμπεριλαμβανομένων των πολύπλοκων. Η ευκολία χρήσης και οι εξελιγμένες λειτουργίες του Redis όχι μόνο το έκαναν να ξεχωρίσει, αλλά επέτρεψαν και την αυξανόμενη καθιέρωσή του ως κύρια βάση δεδομένων για εταιρικούς και ιδιώτες χρήστες.

Παρακάτω, θα περιγράψουμε λεπτομερώς τα βήματα που θα σας βοηθήσουν να εγκαταστήσετε το Redis στο λογισμικό Ubuntu 20.04. Σε αυτόν τον οδηγό, θα λάβετε όλες τις πληροφορίες που χρειάζεστε από την εγκατάσταση έως τη διαμόρφωση ενός εξωτερικού διακομιστή Redis που θα χρησιμοποιηθεί ως διαχειριστής συνεδρίας (session handler) για μια εφαρμογή PHP που εκτελείται σε Ubuntu 20.04.

Ξεκινώντας

Για να ακολουθήσετε τα βήματα, θα χρειαστείτε δύο διαφορετικούς διακομιστές βάσεων δεδομένων (droplets) που βρίσκονται στο ίδιο κέντρο δεδομένων με ενεργοποιημένο το ιδιωτικό δίκτυο. Αυτοί περιλαμβάνουν:

  • Έναν διακομιστή ιστού PHP που εκτελεί LAMP και LEMP σε Ubuntu 20.04 – θα αναφερόμαστε σε αυτόν τον διακομιστή ως web.

  • Έναν δεύτερο, καθαρό διακομιστή Ubuntu 20.04 όπου θα εγκατασταθεί το Redis – θα αναφερόμαστε σε αυτόν τον διακομιστή ως redis.

Βήμα 1 — Εγκατάσταση του διακομιστή Redis

Το πρώτο μας βήμα είναι να εγκαταστήσουμε τον διακομιστή Redis στο Ubuntu 20.04. Μόλις ολοκληρωθεί, βεβαιωθείτε ότι ο διακομιστής είναι σε λειτουργία στο redis Droplet.

Σε αυτόν τον οδηγό, θα χρησιμοποιήσουμε τα Personal Package Archives (PPA). Συνιστούμε ανεπιφύλακτα τη χρήση των PPA για λόγους ασφαλείας. Σε σύγκριση με άλλα αποθετήρια τρίτων, τα PPA είναι σταθερά, εύκολα στην εγκατάσταση και, πάνω απ' όλα, το αποθετήριο είναι σχεδιασμένο για χρήστες Ubuntu. Το PPA σάς επιτρέπει να λαμβάνετε την πιο πρόσφατη διαθέσιμη έκδοση λογισμικού, ακόμη και για λογισμικό που δεν βρίσκετε στα επίσημα αποθετήρια του Ubuntu.

Η χρήση PPA από μη εξουσιοδοτημένη πηγή είναι απολύτως απαγορευτική. Βεβαιωθείτε ότι λαμβάνετε τα PPA μόνο από αυθεντικές και επαληθευμένες πηγές. Μπορείτε να προσθέσετε το αποθετήριο PPA χρησιμοποιώντας την εντολή:

Πατήστε το πλήκτρο Enter για επιβεβαίωση. Μετά την επιβεβαίωση, θα ενημερώσουμε την προσωρινή μνήμη του διαχειριστή πακέτων χρησιμοποιώντας την ακόλουθη εντολή:

Στη συνέχεια, θα εγκαταστήσουμε το Redis χρησιμοποιώντας την εντολή:

Μόλις εκτελέσετε την εντολή, θα έχετε εγκαταστήσει το Redis στον διακομιστή σας. Ας δοκιμάσουμε την εγκατάσταση χρησιμοποιώντας την εντολή:

Μόλις εκτελέσετε την εντολή, θα δείτε μια παρουσία (instance) του Redis να εκτελείται στο localhost στη θύρα 6379. Επίσης, θα υπάρξει μια απάντηση με το όνομα PONG. Εάν τα δείτε αυτά, σημαίνει ότι ολοκληρώσατε με επιτυχία το πρώτο βήμα. Για έναν λεπτομερή οδηγό σχετικά με την εγκατάσταση και την ασφάλεια του Redis, μπορείτε να ρίξετε μια ματιά στον οδηγό μας How to Install and Secure Redis on Ubuntu 18.04.

Στη συνέχεια, ας προχωρήσουμε στο επόμενο βήμα - τη διαμόρφωση του Redis.

Βήμα 2 — Διαμόρφωση του Redis για αποδοχή εξωτερικών συνδέσεων

Ο κύριος στόχος της διαμόρφωσης του Redis είναι να δέχεται συνδέσεις που προέρχονται από έξω. Γιατί; Επειδή το Redis – από προεπιλογή, επιτρέπει συνδέσεις μόνο στο localhost, και υπάρχει περιορισμός σύνδεσης από οποιοδήποτε άλλο μέρος. Με απλά λόγια, θα έχετε πρόσβαση μόνο από το εσωτερικό του διακομιστή στον οποίο έχετε εγκαταστήσει το Redis.

Αρχικά, λάβετε μια λεπτομερή εικόνα των διεπαφών δικτύου σας χρησιμοποιώντας την ifconfig εντολή:

Θα λάβετε το παρακάτω αποτέλεσμα:

Στη eth1 διεπαφή, θα βρείτε το inet_addr. Εδώ έχουμε 10.133.14.9. Θα χρησιμοποιήσουμε αυτή τη διεύθυνση IP στα επόμενα βήματα για να συνδέσουμε τον διακομιστή redis από τον διακομιστή web.

Βήμα 3— Σύνδεση Localhost

Είστε ελεύθεροι να χρησιμοποιήσετε τον επεξεργαστή κώδικα της επιλογής σας (το Atom και το Visual Studio Code είναι τα πιο δημοφιλή).

Τώρα, ανοίξτε το αρχείο /etc/redis/redis.conf και αναζητήστε τη γραμμή που περιέχει τον ορισμό bind. Θα πρέπει να προσθέσετε τη διεύθυνση IP του ιδιωτικού σας δικτύου στη γραμμή:

Ενδέχεται να δείτε το localhost, αντί για 127.0.0.1. Μην ανησυχείτε, απλά πρέπει να προσθέσετε την ιδιωτική σας διεύθυνση IP. Στη συνέχεια, επανεκκινήστε την υπηρεσία Redis για να εφαρμόσετε τις αλλαγές. Χρησιμοποιήστε την παρακάτω εντολή για να επανεκκινήσετε τον διακομιστή redis:

Για τους χρήστες που έχουν εγκαταστήσει το Redis χρησιμοποιώντας την εφαρμογή ενός κλικ, θα ακολουθήσετε την παρακάτω εντολή για να επανεκκινήσετε τον διακομιστή σας:

Μόλις επανεκκινήσετε τον διακομιστή redis, οποιοσδήποτε διακομιστής βρίσκεται στο ίδιο ιδιωτικό δίκτυο θα συνδεθεί αυτόματα σε αυτήν την παρουσία Redis, χωρίς να χρειάζεται να το κάνετε μεμονωμένα.

Βήμα 4— Ρύθμιση κωδικού πρόσβασης διακομιστή Redis

Μπορείτε να παραλείψετε αυτό το βήμα εάν χρησιμοποιείτε την εγκατάσταση Redis για σκοπούς εξάσκησης ή εκπαίδευσης. Ωστόσο, η ρύθμιση κωδικού πρόσβασης για τον διακομιστή redis συνιστάται ανεπιφύλακτα εάν θέλετε να προσθέσετε ένα επιπλέον επίπεδο ασφάλειας στην εγκατάσταση Redis σας. Ας τροποποιήσουμε το ίδιο αρχείο ρυθμίσεων όπως κάναμε στο προηγούμενο βήμα. Χρησιμοποιήστε την εντολή για επεξεργασία:

Αφαιρέστε το σχόλιο από τη γραμμή που περιέχει το requirepass, και ορίστε έναν ισχυρό κωδικό πρόσβασης:

Επανεκκινήστε την υπηρεσία Redis για να εφαρμοστούν οι αλλαγές που κάνατε. Χρησιμοποιήστε την εντολή για επανεκκίνηση:

Βήμα 5 — Δοκιμή σύνδεσης και ελέγχου ταυτότητας Redis

Σε αυτό το βήμα, θα συνδεθούμε στην υπηρεσία Redis από το εσωτερικό του redis μηχανήματος για να βεβαιωθούμε ότι όλες οι αλλαγές που έγιναν λειτουργούν απρόσκοπτα όπως αναμένεται. Για να συνδεθείτε, χρησιμοποιήστε την παρακάτω εντολή:

Εδώ, ακόμα κι αν παραλείψετε να αναφέρετε το όνομα κεντρικού υπολογιστή (hostname), θα εξακολουθήσει να εκτελείται. Ο κύριος στόχος μας είναι να βεβαιωθούμε ότι η υπηρεσία Redis δέχεται τις συνδέσεις απρόσκοπτα:

Είναι πιθανό να λάβετε ένα AUTH σφάλμα κατά την προσπάθεια πρόσβασης στα δεδομένα με τον καθορισμένο κωδικό πρόσβασης:

Το αποτέλεσμα θα μοιάζει με αυτό:

Για να συνδεθείτε (authenticate), εκτελέστε την εντολή AUTH μαζί με τον ίδιο κωδικό πρόσβασης που ορίσατε στο /etc/redis/redis.conf αρχείο:

Στη συνέχεια, εκτελέστε ξανά την εντολή:

Αυτή τη φορά, θα λάβετε ένα OK ως απάντηση αντί για σφάλμα. Θα λάβετε το αποτέλεσμα όπως παρακάτω:

Το αποτέλεσμα empty list ή set σημαίνει ότι ο διακομιστής Redis είναι άδειος. Αυτό συμβαίνει επειδή δεν έχουμε ρυθμίσει ακόμα τον διακομιστή ιστού (web server) ως διαχειριστή συνεδρίας (session handler).

Σημείωση: Προτού προχωρήσουμε, βεβαιωθείτε ότι η συνεδρία SSH είναι ανοιχτή και συνδεδεμένη στο redis-cli. Στα επόμενα βήματα, θα επιστρέψουμε στη γραμμή εντολών του redis-cli για να επαληθεύσουμε εάν τα δεδομένα της συνεδρίας αποθηκεύτηκαν σωστά αφού κάνουμε τις απαραίτητες αλλαγές στον web διακομιστή.

Βήμα 6 — Εγκατάσταση της επέκτασης Redis στον διακομιστή ιστού (Web Server)

Τα επόμενα βήματα πρέπει να εκτελεστούν στον web διακομιστή. Πρέπει να εγκαταστήσουμε την επέκταση PHP Redis για να μπορεί η PHP να συνδεθεί στον διακομιστή Redis.

Αρχικά, ενημερώστε την προσωρινή μνήμη (cache) του διαχειριστή πακέτων εκτελώντας την εντολή:

Στη συνέχεια, εγκαταστήστε το php5-redis πακέτο:

Είστε πανέτοιμοι να συνδεθείτε στο Redis.

Βήμα 7 — Ρύθμιση του Redis ως προεπιλεγμένου διαχειριστή συνεδρίας (Session Handler) στον διακομιστή ιστού

Η PHP διαθέτει έναν προεπιλεγμένο διαχειριστή συνεδρίας. Σε αυτό το βήμα, θα επεξεργαστούμε το αρχείο php.ini στον web διακομιστή για να αλλάξουμε τις προεπιλεγμένες ρυθμίσεις. Η τοποθεσία του αρχείου php.ini εξαρτάται από το τρέχον stack:

  • Για ένα LAMP stack σε Ubuntu 20.04, χρησιμοποιήστε: /etc/php5/apache2/php.ini.

  • Για ένα LEMP stack σε Ubuntu 20.04, η διαδρομή είναι συνήθως /etc/php5/fpm/php.ini.

Εάν δεν είστε σίγουροι για την τοποθεσία του κύριου αρχείου σας php.ini, χρησιμοποιήστε τη βοήθεια της συνάρτησης phpinfo(). Τοποθετήστε τον ακόλουθο κώδικα σε ένα αρχείο με όνομα info.php μέσα στον ριζικό κατάλογο του ιστού σας (web root directory):

Όταν προσπαθήσετε να αποκτήσετε πρόσβαση στο σενάριο (script) από το πρόγραμμα περιήγησής σας, αναζητήστε τη γραμμή που περιέχει το “Loaded Configuration File”. Θα βρείτε την ακριβή τοποθεσία του κύριου php.ini που φορτώθηκε. Φροντίστε να αφαιρέσετε το αρχείο info.php καθώς περιέχει όλο το ευαίσθητο περιεχόμενο του περιβάλλοντός σας.

Μετά από αυτό, ανοίξτε το αρχείο php.ini και αναζητήστε τη γραμμή που περιέχει το session.save_handler. Η προεπιλεγμένη τιμή θα είναι files, φροντίστε να την αλλάξετε σε redis.

Σε περιβάλλοντα LAMP:

Σε περιβάλλοντα LEMP:

Στη συνέχεια, αφαιρέστε το σχόλιο (uncomment) από το session.save_path και τροποποιήστε την τιμή ώστε να περιέχει τη συμβολοσειρά σύνδεσης (connection string) του Redis. Το περιεχόμενο πρέπει να ακολουθεί την παρακάτω μορφή:

Χρησιμοποιήστε τον κωδικό πρόσβασης που ορίσαμε στο Βήμα- 4. Σε περίπτωση που δεν χρησιμοποιείτε τον καθορισμένο κωδικό πρόσβασης, τότε δώστε την παράμετρο auth κατά τη ρύθμιση του Redis. Τώρα, αποθηκεύστε το αρχείο και επανεκκινήστε την php υπηρεσία και στα δύο περιβάλλοντα.

Σε LAMP περιβάλλοντα:

Σε LEMP περιβάλλοντα:

Βήμα 8 — Δοκιμή της Διαχείρισης Συνεδριών Redis

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

Δημιουργήστε ένα αρχείο με όνομα demo.php στον web διακομιστή και κρατήστε το μέσα στον ριζικό φάκελο εγγράφων σας:

Then, change the /usr/share/nginx/html για να αντικατοπτρίζει τη διαδρομή του ριζικού φακέλου εγγράφων σας:

Στη συνέχεια, πρέπει να κατευθύνετε το πρόγραμμα περιήγησής σας στο http://web/demo.php για να αποκτήσετε πρόσβαση στο σενάριο. Το πρόγραμμα θα αυξάνει τον αριθμό κάθε φορά που επαναφορτώνετε τη σελίδα.

Τώρα θα έχετε πληροφορίες συνεδρίας αποθηκευμένες στον διακομιστή Redis. Για να το επαληθεύσετε, πρέπει να επιστρέψετε στη συνεδρία SSH στο redis μηχάνημα χρησιμοποιώντας το redis-cli. Λάβετε το περιεχόμενο για άλλη μια φορά με keys *:

Θα δείτε το παρακάτω αποτέλεσμα:

Το αποτέλεσμα επαληθεύει ότι όλες οι πληροφορίες είναι αποθηκευμένες με ασφάλεια στον redis διακομιστή. Αν θέλετε να συνδέσετε επιπλέον web διακομιστές, μπορείτε να ακολουθήσετε την ίδια διαδικασία.

Συμπέρασμα

Το Redis είναι μια βάση δεδομένων NoSQL που επιτρέπει την αποθήκευση πολυάριθμων μη δομημένων δεδομένων. Πολύ λίγες βάσεις δεδομένων μπορούν να συγκριθούν με τις λειτουργίες και την απλότητα του redis διακομιστή. Η αυξανόμενη δημοτικότητά του τον καθιστά συνεχώς απαραίτητο, με λίγα υποκατάστατα σε σύγκριση με τα ευρεία χαρακτηριστικά του.

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

Happy Computing!

author

Shreyas Patil

Συγγραφέας · CloudSigma

Ο Preslav Dobrev είναι Δημιουργικός Σχεδιαστής στην CloudSigma, με εστίαση στη συνεπή επιχειρηματική ταυτότητα μέσω παραδοσιακών και καινοτόμων καναλιών μάρκετινγκ. Διαθέτει την ικανότητα να συνδυάζει το καλλιτεχνικό όραμα με το στρατηγικό μάρκετινγκ για τη δημιουργία εντυπωσιακών αφηγήσεων επωνυμίας.

Σχόλια

Δεν υπάρχουν σχόλια ακόμα. Γράψτε το πρώτο.