Mise en place d’une plateforme LAMP – Partie 2

By | 20 mars 2012

Cet article est la suite de Mise en place d’une plateforme LAMP – Partie 1. Dans cette seconde partie, nous allons nous consacrer aux bases de données, en l’occurrence MySQL et Redis.

Installation de MySQL 5.5

Je ne vais pas m’attarder sur l’installation de MySQL car elle est très bien expliquée dans le fichier INSTALL-BINARY:

$> groupadd mysql # Creation du groupe MySQL
$> useradd -r -g mysql mysql # Création d'utilisateur MySQL
$> cd /usr/local
$> tar zxvf /path/to/mysql-VERSION-OS.tar.gz # Décompression
$> ln -s full-path-to-mysql-VERSION-OS mysql # Création lien symbolique
$> cd mysql
$> chown -R mysql .
$> chgrp -R mysql .
$> scripts/mysql_install_db --user=mysql # Installation
$> chown -R root .
$> chown -R mysql data
$> cp support-files/my-medium.cnf /etc/my.cnf
$> bin/mysqld_safe --user=mysql &
$> cp support-files/mysql.server /etc/init.d/mysql.server

Ajout des commandes MySQL dans /usr/local/bin de façon à pouvoir les exécuter sans devoir écrire le chemin complet.

$> cd /usr/local/bin
$> ln -s ../mysql/bin/mysql
$> ln -s ../mysql/bin/mysqladmin
$> /etc/init.d/mysql.server start # Démarrage du serveur MySQL
$> mysqladmin -u root password 'MyPassword' # Création du mot de passe root
$> mysql -u root -p # On vérifie l'accès au compte root via le client MySQL
Enter password:
mysql>

Installation terminée, je vais maintenant créer un utilisateur et une base de donnée pour chaque site:

mysql> CREATE USER 'site_1'@'my.ip' IDENTIFIED BY 'MyPassword';
mysql> CREATE DATABASE site_1;

Encore une fois ces quelques actions, création d’un utilisateur et d’une base de données, pourront être faites via le script de création de site.

Pour ce qui est de la configuration de MySQL je reviendrai plus tard dessus.

Installation de Redis

L’installation de Redis est très simple:

$> wget http://redis.googlecode.com/files/redis-2.4.9.tar.gz
$> tar xzf redis-2.4.9.tar.gz
$> cd redis-2.4.9
$> make

Installation terminée, je vais créer un utilisateur system pour redis, et créer des liens symboliques dans /usr/local vers les binaire redis.

$> useradd redis --no-create-home --system
$> cd /usr/local
$> ln -s /usr/local/src/redis-2.4.9 redis
$> ln -s ../redis/src/redis-server
$> ln -s ../redis/src/redis-cli

Redis ne fournit pas de script de démarrage de service dans ses sources. J’ai donc utilisé le script de ce site http://www.smipple.net/snippet/IanLewis/init.d%20script%20for%20redis, que j’ai adapté à mon installation:

$> vim /etc/init.d/redis
#!/bin/sh
### BEGIN INIT INFO
# Provides:     redis-server
# Required-Start:   $syslog
# Required-Stop:    $syslog
# Should-Start:     $local_fs
# Should-Stop:      $local_fs
# Default-Start:    2 3 4 5
# Default-Stop:     0 1 6
# Short-Description:    redis-server - Persistent key-value db
# Description:      redis-server - Persistent key-value db
### END INIT INFO

PATH=/opt/redis/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DIR_ROOT=/usr/local
DAEMON=`which redis-server`
REDIS_CLI=`which redis-cli`
CONFIG_FILE=/usr/local/redis/redis.conf
DAEMON_ARGS="$CONFIG_FILE"
NAME=redis-server
DESC=redis-server
PIDFILE=$DIR_ROOT/var/run/redis.pid
LOGFILE=$DIR_ROOT/var/log/redis.log

test -x $DAEMON || exit 0
test -x $DAEMONBOOTSTRAP || exit 0

set -e

case "$1" in
  start)
    echo -n "Starting $DESC: "
    touch $PIDFILE $LOGFILE
    chown redis:redis $PIDFILE $LOGFILE
    if start-stop-daemon --start --quiet --umask 007 --pidfile $PIDFILE --chuid redis:redis --exec $DAEMON -- $DAEMON_ARGS &
    then
        echo "$NAME."
    else
        echo "failed"
    fi
    ;;
  stop)
    echo "Stopping $DESC"
    if [ ! -e "$PIDFILE" ]
    then
      echo "failed"
    else
      LISTENING_PORT=`grep -E "^ *port +([0-9]+) *$" "$CONFIG_FILE" | grep -Eo "[0-9]+"`
      $REDIS_CLI -p $LISTENING_PORT SHUTDOWN
      #rm -f $PIDFILE
    fi
    ;;

  restart|force-reload)
    ${0} stop
    ${0} start
    ;;
  *)
    echo "Usage: /etc/init.d/$NAME {start|stop|restart|force-reload}" >&2
    exit 1
    ;;
esac

exit 0

Par contre avant de démarrer votre serveur, il va falloir aller modifier la configuration de redis. Si avez suivi ce tutoriel pour installer redis, votre fichier de configuration devrait se trouver dans /usr/local/redis/redis.conf. Les lignes à modifier concerne le fait que Redis doit être lancé en tant que démon, et le chemin du fichier PID.

$> daemonize yes # Par défaut à no
$> pidfile /usr/local/var/run/redis.pid # Par défaut à /var/run/redis.pid

Vous pouvez maintenant démarrer votre serveur, et lancer un prompt redis pour valider le bon fonctionnement:

$> /etc/init.d/redis start
$> redis-cli
redis 127.0.0.1:6379> APPEND myKey myValue
(integer) 13
redis 127.0.0.1:6379> get myKey
"myValumyValue"
redis 127.0.0.1:6379>

Maintenant que le serveur Redis est installé, nous allons installer le module Php qui va nous permettre d’utiliser Redis depuis un client php.

$> wget https://github.com/nicolasff/phpredis/tarball/master -O nicolasff-phpredis-199d5e6.tar.gz
$> tar -xzvf nicolasff-phpredis-199d5e6.tar.gz
$> cd nicolasff-phpredis-199d5e6
$> phpize
$> ./configure
$> make && make install

Si vous rencontrez ce genre d’erreur lors de l’execution de phpize, executez les commandes suivantes:

$> phpize
Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20060613
Zend Extension Api No:   220060519
Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment variable is set correctly and then rerun this script.
$> cd /usr/src
$> wget http://ftp.gnu.org/gnu/m4/m4-1.4.9.tar.gz
$> tar -zvxf m4-1.4.9.tar.gz
$> cd m4-1.4.9/
$> ./configure && make && make install
$> cd ../
$> wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.62.tar.gz
$> tar -zvxf autoconf-2.62.tar.gz
$> cd autoconf-2.62/
$> ./configure && make && make install

La librairie client compilée, nous allons maintenant la charger au sein de php. Pour ce faire, nous allons devoir définir dans php.ini le chemin dans lequel php devra rechercher les librairies et aussi activer celle de redis.
Modification du fichier php.ini:

$> vim /usr/local/lib/php.ini
extension_dir = "/usr/local/php/lib/extensions/" # Dossier à scanner pour charger les lib
extension=redis.so # Activation de la lib redis
$> php -m | grep redis
redis

La dernière ligne executée nous confirme que le module redis est chargé. Nous allons maintenant vérifier qu’il fonctionne aussi avec php-fpm, mais avant ça il va falloir redémarrer le serveur php afin qu’il prenne en compte la nouvelle configuration:

$> /etc/init.d/php-fpm restart

Un script php pour valider le module Redis avec php-fpm:

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->set('myKey', 'myValue');
var_dump('myKey');
$redis->close();

Redis est maintenant installé, et prêt pour une utilisation avec PHP.