introduction
Redis est un système de stockage et de cache clé-valeur open source, également appelé serveur de structure de données pour sa prise en charge avancée de plusieurs types de données, tels que les hachages, les listes, les ensembles et les images bitmap, entre autres. Il prend également en charge la mise en cluster, ce qui le rend souvent utilisé pour des environnements hautement disponibles et évolutifs.
Dans ce didacticiel, nous verrons comment installer et configurer un serveur Redis externe afin qu’il soit utilisé comme gestionnaire de session pour une application PHP fonctionnant sous Ubuntu 14.04.
Le gestionnaire de session est responsable du stockage et de la récupération des données enregistrées dans les sessions - par défaut, PHP utilise * fichiers * pour cela. Un gestionnaire de session externe peut être utilisé pour créer scalable environnements PHP derrière un https://www.digitalocean.com/community/ tutoriels / concepts d’introduction à haproxy-et-équilibrage de charge [équilibreur de charge], dans lesquels tous les nœuds d’application se connectent à un serveur central pour partager les informations de session.
Conditions préalables
Nous allons travailler avec deux serveurs distincts dans ce tutoriel. Pour des raisons de sécurité et de performances, il est important que les deux gouttelettes soient situées dans le même centre de données avec https://www.digitalocean.com/community/tutorials/how-to-set-up-and-use-digitalocean-private-networking [ réseau privé] activé. Voici ce dont vous aurez besoin:
-
Un serveur Web PHP exécutant LAMP ou https: //www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-14-04[LEMP] sur Ubuntu 14.04 - nous ferons référence à ce serveur comme * web *
-
Un second serveur propre Ubuntu 14.04 sur lequel Redis sera installé - nous désignerons ce serveur par * redis *
Vous aurez besoin d’un accès SSH approprié aux deux serveurs en tant qu’utilisateur régulier, avec l’autorisation https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04].
Étape 1 - Installez le serveur Redis
La première chose à faire est de mettre le serveur Redis en marche, sur notre * Redis * Droplet.
Nous utiliserons le gestionnaire de paquets Ubuntu habituel avec un référentiel de confiance PPA fourni par Chris Lea. Ceci est nécessaire pour nous assurer que nous obtenons la dernière version stable de Redis.
Tout d’abord, ajoutez le référentiel PPA en exécutant:
sudo add-apt-repository ppa:chris-lea/redis-server
Appuyez sur + ENTER
pour confirmer.
Maintenant, vous devez mettre à jour le cache du gestionnaire de paquets:
sudo apt-get update
Et enfin, installons Redis en lançant:
sudo apt-get install redis-server
Redis devrait maintenant être installé sur votre serveur. Pour tester l’installation, essayez cette commande:
redis-cli ping
Cela permettra de se connecter à une instance Redis s’exécutant sur * localhost * sur le port * 6379 *. Vous devriez obtenir un * PONG * comme réponse.
Étape 2 - Configurez Redis pour accepter les connexions externes
Par défaut, Redis n’autorise que les connexions à + localhost +
, ce qui signifie que vous ne pourrez accéder que de l’intérieur du serveur sur lequel Redis est installé. Nous devons modifier cette configuration pour autoriser les connexions provenant d’autres serveurs du même réseau privé que le serveur * redis *.
La première chose à faire est de rechercher l’adresse IP du réseau privé de la machine Redis. Les étapes suivantes doivent être exécutées sur le serveur * redis *.
Exécutez + ifconfig +
pour obtenir des informations sur vos interfaces réseau:
sudo ifconfig
Vous devriez obtenir un résultat similaire à ceci:
Output eth0 Link encap:Ethernet HWaddr 04:01:63:7e:a4:01
inet addr:188.166.77.33 Bcast:188.166.127.255 Mask:255.255.192.0
inet6 addr: fe80::601:63ff:fe7e:a401/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3497 errors:0 dropped:0 overruns:0 frame:0
TX packets:3554 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4895060 (4.8 MB) TX bytes:619070 (619.0 KB)
eth1 Link encap:Ethernet HWaddr 04:01:63:7e:a4:02
inet addr: Bcast:10.133.255.255 Mask:255.255.0.0
inet6 addr: fe80::601:63ff:fe7e:a402/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:648 (648.0 B) TX bytes:578 (578.0 B)
Recherchez le + inet_addr +
attribué à l’interface * eth1 *. Dans ce cas, il s’agit de «+ 10.133.14.9 +» - il s’agit de l’adresse IP que nous utiliserons plus tard pour se connecter au serveur * redis * à partir du serveur * web *.
A l’aide de votre éditeur de ligne de commande préféré, ouvrez le fichier + / etc / redis / redis.conf +
et cherchez la ligne contenant la définition + bind +
. Vous devez ajouter votre * adresse IP de réseau privé * à la ligne, comme suit:
sudo vim /etc/redis/redis.conf
/etc/redis/redis.conf
bind localhost
Si vous voyez «+ 127.0.0.1 » au lieu de « localhost +», c’est bien; Il suffit d’ajouter votre adresse IP privée après ce qui existe déjà.
Maintenant, il vous suffit de redémarrer le service Redis pour appliquer les modifications:
sudo service redis-server restart
Avec cette modification, tout serveur du même réseau privé pourra également se connecter à cette instance Redis.
Étape 3 - Définissez un mot de passe pour le serveur Redis
Pour ajouter une couche de sécurité supplémentaire à votre installation Redis, nous vous invitons à définir un mot de passe pour accéder aux données du serveur. Nous allons éditer le même fichier de configuration de l’étape précédente, + / etc / redis / redis.conf +
:
sudo vim /etc/redis/redis.conf
Maintenant, décommentez la ligne contenant + requirepass +
et définissez un mot de passe fort:
/etc/redis/redis.conf
requirepass
Redémarrez le service Redis pour que les modifications prennent effet:
sudo service redis-server restart
Étape 4 - Tester la connexion et l’authentification Redis
Pour vérifier si toutes vos modifications ont fonctionné comme prévu, connectez-vous au service Redis depuis l’ordinateur * redis *:
redis-cli -h
Output10.133.14.9:6379>
Si vous avez défini un mot de passe et essayez maintenant d’accéder aux données, vous devriez obtenir une erreur AUTH:
keys *
Output(error) NOAUTH Authentication required.
Pour vous authentifier, il vous suffit d’exécuter la commande + AUTH +
, en fournissant le même mot de passe que vous avez défini dans le fichier + / etc / redis / redis.conf +
:
AUTH yourverycomplexpasswordhere
Vous devriez obtenir un * OK * en réponse. Maintenant si vous courez:
keys *
Le résultat devrait ressembler à ceci:
Output(empty list or set)
Cette sortie signifie simplement que votre serveur Redis est vide, ce qui est exactement ce à quoi nous nous attendions, car le serveur * Web * n’est pas encore configuré pour utiliser ce serveur Redis en tant que gestionnaire de session.
Conservez cette session SSH ouverte et connectée au + redis-cli +
pendant que nous effectuons les étapes suivantes - nous reviendrons à l’invite + redis-cli +
pour vérifier si les données de la session sont correctement stockées. changements nécessaires sur le serveur * Web *.
Étape 5 - Installer l’extension Redis sur le serveur Web
Les prochaines étapes doivent être exécutées sur le serveur * Web *. Nous devons installer l’extension PHP Redis, sinon PHP ne pourra pas se connecter au serveur Redis.
Commencez par mettre à jour le cache de votre gestionnaire de paquets en lançant:
sudo apt-get update
Puis installez le paquet + php5-redis +
:
sudo apt-get install php5-redis
Votre serveur Web devrait maintenant pouvoir se connecter à Redis.
Étape 6 - Définir Redis comme gestionnaire de session par défaut sur le serveur Web
Maintenant, nous devons éditer le fichier + php.ini
sur le serveur * web * pour changer le gestionnaire de session par défaut pour PHP. L’emplacement de ce fichier dépendra de votre pile actuelle. Pour une pile * LAMP * sous Ubuntu 14.04, il s’agit généralement de «+ / etc / php5 / apache2 / php.ini». Pour une pile * LEMP * sous Ubuntu 14.04, le chemin est généralement + / etc / php5 / fpm / php.ini +
.
Si vous n’êtes pas sûr de l’emplacement de votre fichier + php.ini
principal, un moyen simple de le savoir est d’utiliser la fonction` + phpinfo () + . Il suffit de placer le code suivant dans un fichier nommé `+ info.php +
dans votre répertoire racine Web:
<?php
phpinfo();
Lorsque vous accédez au script à partir de votre navigateur, recherchez la ligne contenant «Fichier de configuration chargé» et recherchez l’emplacement exact du fichier + php.ini +
chargé.
Ouvrez votre fichier + php.ini
et recherchez la ligne contenant` + session.save_handler`. La valeur par défaut est + fichiers +
. Vous devriez le changer en + redis +
.
Sur les environnements * LAMP *:
sudo vim /etc/php5/apache2/php.ini
Sur les environnements * LEMP *:
sudo vim /etc/php5/fpm/php.ini
/etc/php5/fpm/php.ini
session.save_handler = redis
Vous devriez maintenant trouver la ligne contenant + session.save_path +
. Décommentez-le et changez la valeur pour qu’il contienne la chaîne de connexion Redis. Le contenu doit suivre ce format, le tout sur une seule ligne: + tcp: // IPADDRESS: PORT? Auth = REDISPASSWORD +
/etc/php5/fpm/php.ini
session.save_path = "tcp://?auth="
Enregistrez le fichier et redémarrez le service * php *.
Sur les environnements * LAMP *:
sudo service apache2 restart
Sur les environnements * LEMP *:
sudo service php5-fpm restart
Étape 7 - Testez la gestion de session Redis
Pour vous assurer que vos sessions sont maintenant gérées par Redis, vous aurez besoin d’un script ou d’une application PHP stockant des informations sur les sessions. Nous allons utiliser un script simple qui implémente un compteur - chaque fois que vous rechargez la page, le nombre imprimé est incrémenté.
Créez un fichier nommé + test.php +
sur le serveur * Web * et placez-le dans le dossier racine de votre document:
sudo vim test.php
/usr/share/nginx/html/test.php
<?php
//simple counter to test sessions. should increment on each page reload.
session_start();
$count = isset($_SESSION['count']) ? $_SESSION['count'] : 1;
echo $count;
$_SESSION['count'] = ++$count;
Pointez votre navigateur sur + http: /// test.php +
afin d’accéder au script. Il faut incrémenter le nombre chaque fois que vous rechargez la page.
Vous devriez maintenant avoir les informations de session stockées sur le serveur Redis. Pour vérifier, retournez à votre session SSH sur la machine * redis *, où nous nous sommes déjà connectés au service Redis en utilisant + redis-cli +
. Récupérez à nouveau le contenu avec + keys * +
:
keys *
Et vous devriez obtenir un résultat similaire à ceci:
Output1) "PHPREDIS_SESSION:j9rsgtde6st2rqb6lu5u6f4h83"
Cela montre que les informations de session sont stockées sur le serveur Redis. Vous pouvez connecter des serveurs Web supplémentaires au serveur Redis de la même manière.
Conclusion
Redis est un service de stockage clé-valeur puissant et rapide qui peut également être utilisé comme gestionnaire de session pour PHP, permettant de créer des environnements PHP évolutifs en fournissant un système distribué pour le stockage de session. Pour plus d’informations sur la mise à l’échelle des applications PHP, vous pouvez consulter cet article: Horizontally Scaling PHP Applications.