WRInaute passionné
Suite à une discussion et quelques MP me demandant comment installer et paramétrer memcache, je vous livre un petit tuto :wink:
Je précise que le script perl de chargement de la configuration du daemon memcached n'est pas de moi mais de Jay Bonci et que j'ai ré-ecrit le script shell de lancement du daemon deDanny Bembibre ( http://www.vbseo.com/blogs/danny-bembib ... cached-44/ ) prévu pour CentOS pour l'adapter à la Debian etch (le reste est de moi ). Merci donc de laisser les commentaires dans les scripts par respet pour leurs auteurs.
C'est parti !
Pour installer memcached et memcache pour PHP à partir des sources, il vous faut bien entendu disposer sur votre serveur des outils de compilation et de configuration (gcc, g++, make, autoconf, automake, libtool, flex, bison etc ...). Pour savoir si ces outils sont installés, il suffit de saisir en ligne de commande :
Si le programme est absent, un simple apt-get fera l'affaire !
Il faut également installer le paquetage zlib1g-dev
On choisi d'installer les sources dans /usr/local/src
1 - Installation de memcached
on récupère l'archive memcached, on la décompacte, on la compile et on l'installe :
On va maintenant créer un fichier de configuation indiquant à memcached : /etc/memcached.conf
1 - la taille mémoire à utiliser (parametre -m)
2 - le port sur lequel memcached sera accessible (parametre -p)
3 - l'utilisateur qui executera memcached (parametre -u)
4 - preciser que memcached doit juste être utilisé en local (parametre -l 127.0.0.1) consultez la doc si vous utilisez un cluster de serveurs :wink:
On crée maintenant le script shell de lancement du daemon : /etc/init.d/memcached
On oublie pas de lui donner les droits d'éxécution : chmod +x /etc/init.d/memcached
On crée le fichier perl /usr/local/bin/start-memcached
et on lui donne aussi les droits d'exécution : chmod +x /usr/local/bin/start-memcached
On indique maintenant à notre serveur de lancer le daemon au démarrage :
Memcached est installé. on utilise les commandes suivantes pour le lancer ou l'arrêter :
Hé! vous barrez pas, c'est pas fini ! Il faut maintenant recompiler PHP pour qu'il utilise memcache :wink:
Bon, on respire un grand coup et on s'y remet
On récupère l'archive de la librairie memcache pour PHP, on la décompresse et on la copie dans le dossier ext de nos sources PHP (dans l'exemple c'est php 5.2.4 dont les sources se trouvent dans /usr/local/src/php-5.2.4 )
Maintenant il nous faut reconstruire le fichier configure de php pour qu'il prenne en compte notre nouvelle extension :
Vous pouvez maintenant recompiler PHP en oubliant pas de préciser --enable-memcache dans vos options de configuration :
Si php est compilé statiquement avec apache, vous devez aussi recompiler apache
Vous redémarrez apache ainsi que le daemon memcached et c'est prêt.
Pour utiliser memcache avec php, repportez à la doc de php (http://fr3.php.net/manual/fr/ref.memcache.php) et ayez un peu d'imagination pour utiliser cette mémoire partagée. (Par exemple, je l'utilise beaucoup pour stocker des classe sérialisées) mais je fais confiance à votre imagination ...
Ouf! c'est fini ! mais pas de panique, c'est plus long à lire qu'à faire :wink:
Je précise que le script perl de chargement de la configuration du daemon memcached n'est pas de moi mais de Jay Bonci et que j'ai ré-ecrit le script shell de lancement du daemon deDanny Bembibre ( http://www.vbseo.com/blogs/danny-bembib ... cached-44/ ) prévu pour CentOS pour l'adapter à la Debian etch (le reste est de moi ). Merci donc de laisser les commentaires dans les scripts par respet pour leurs auteurs.
C'est parti !
Pour installer memcached et memcache pour PHP à partir des sources, il vous faut bien entendu disposer sur votre serveur des outils de compilation et de configuration (gcc, g++, make, autoconf, automake, libtool, flex, bison etc ...). Pour savoir si ces outils sont installés, il suffit de saisir en ligne de commande :
Code:
sd-10781:~# whereis g++
g++: /usr/bin/g++
Si le programme est absent, un simple apt-get fera l'affaire !
Il faut également installer le paquetage zlib1g-dev
On choisi d'installer les sources dans /usr/local/src
1 - Installation de memcached
on récupère l'archive memcached, on la décompacte, on la compile et on l'installe :
Code:
cd /usr/local/src
wget http://www.danga.com/memcached/dist/memcached-1.2.4.tar.gz
tar zxf memcached-1.2.4.tar.gz
cd /usr/local/src/memcached-1.2.4
./configure
make
make install
On va maintenant créer un fichier de configuation indiquant à memcached : /etc/memcached.conf
1 - la taille mémoire à utiliser (parametre -m)
2 - le port sur lequel memcached sera accessible (parametre -p)
3 - l'utilisateur qui executera memcached (parametre -u)
4 - preciser que memcached doit juste être utilisé en local (parametre -l 127.0.0.1) consultez la doc si vous utilisez un cluster de serveurs :wink:
Code:
#Quantité mémoire à allouer à memcached
-m 16
# port
-p 11211
# utilisateur pour executer le daemon nobody/apache/www-data
-u nobody
# ecouter localement seulement
-l 127.0.0.1
On crée maintenant le script shell de lancement du daemon : /etc/init.d/memcached
Code:
#!/bin/bash
#
# memcached Ce script shell prend en charge le démarrage et l'arrêt du daemon memcached.
#
# description: memcached est un système de cache mémoire distribué,
# performant et generique, créé dans le but d'accelérer
# les sites web dynamique en diminuant la charge sur la BDD.
#
# fichier de configuration du daemon : /etc/memcached.conf
# script de chargement du lancement du daemon avec sa config : /usr/local/bin/start-memcached
#
# sur une idée de Danny Bembibre ( http://www.vbseo.com/blogs/danny-bembibre/daemon-scripts-memcached-44/ )
#
# adapté pour Debian etch par Jérôme Rossignol ( http://www.blog-mestre.fr )
#
. /lib/lsb/init-functions
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/bin/memcached
DAEMONBOOTSTRAP=/usr/local/bin/start-memcached
DAEMONCONF=/etc/memcached.conf
DESC="memcached"
PIDFILE=/var/run/memcached.pid
test -x $DAEMON || exit 0
test -x $DAEMONBOOTSTRAP || exit 0
set -e
start() {
log_daemon_msg "Starting $DESC"
log_end_msg 0
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMONBOOTSTRAP -- $DAEMON_OPTS ;
}
stop() {
if [ -f $PIDFILE ]; then
if start-stop-daemon --quiet --stop --oknodo --retry 30 --pidfile $PIDFILE --exec $DAEMON; then
rm -f $PIDFILE
log_daemon_msg "Stopping $DESC"
log_end_msg 0
else
log_end_msg 1
fi
else
log_daemon_msg "$DESC not running"
log_end_msg 0
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|restart|reload}"
exit 1
esac
On oublie pas de lui donner les droits d'éxécution : chmod +x /etc/init.d/memcached
On crée le fichier perl /usr/local/bin/start-memcached
Code:
#!/usr/bin/perl -w
# start-memcached
# 2003/2004 - Jay Bonci <jaybonci@debian.org>
# This script handles the parsing of the /etc/memcached.conf file
# and was originally created for the Debian distribution.
# Anyone may use this little script under the same terms as
# memcached itself.
use strict;
if ($> != 0 and $< != 0) {
print STDERR "Only root wants to run start-memcached.\n";
exit;
}
my $etcfile = shift || "/etc/memcached.conf";
my $params = [];
my $etchandle;
# This script assumes that memcached is located at /usr/bin/memcached, and
# that the pidfile is writable at /var/run/memcached.pid
my $memcached = "/usr/local/bin/memcached";
my $pidfile = "/var/run/memcached.pid";
# If we don't get a valid logfile parameter in the /etc/memcached.conf file,
# we'll just throw away all of our in-daemon output. We need to re-tie it so
# that non-bash shells will not hang on logout. Thanks to Michael Renner for
# the tip
my $fd_reopened = "/dev/null";
sub handle_logfile {
my ($logfile) = @_;
$fd_reopened = $logfile;
}
sub reopen_logfile {
my ($logfile) = @_;
open *STDERR, ">>$logfile";
open *STDOUT, ">>$logfile";
open *STDIN, ">>/dev/null";
$fd_reopened = $logfile;
}
# This is set up in place here to support other non -[a-z] directives
my $conf_directives = {
"logfile" => \&handle_logfile
};
if (open $etchandle, $etcfile) {
foreach my $line (<$etchandle>) {
$line =~ s/\#.*//go;
$line = join ' ', split ' ', $line;
next unless $line;
next if $line =~ /^\-[dh]/o;
if ($line =~ /^[^\-]/o) {
my ($directive, $arg) = $line =~ /^(.*?)\s+(.*)/;
$conf_directives->{$directive}->($arg);
next;
}
push @$params, $line;
}
}
unshift @$params, "-u root" unless (grep $_ eq '-u', @$params);
$params = join " ", @$params;
if (-e $pidfile) {
open PIDHANDLE, "$pidfile";
my $localpid = <PIDHANDLE>;
close PIDHANDLE;
chomp $localpid;
if (-d "/proc/$localpid") {
print STDERR "memcached is already running.\n";
exit;
} else {
`rm -f $localpid`;
}
}
my $pid = fork();
if ($pid == 0) {
reopen_logfile($fd_reopened);
exec "$memcached $params";
exit(0);
} elsif (open PIDHANDLE,">$pidfile") {
print PIDHANDLE $pid;
close PIDHANDLE;
} else {
print STDERR "Can't write pidfile to $pidfile.\n";
}
et on lui donne aussi les droits d'exécution : chmod +x /usr/local/bin/start-memcached
On indique maintenant à notre serveur de lancer le daemon au démarrage :
Code:
update-rc.d /etc/init.d/memcached defaults
Memcached est installé. on utilise les commandes suivantes pour le lancer ou l'arrêter :
Code:
/etc/init.d/memcached start
/etc/init.d/memcached stop
/etc/init.d/memcached restart
Hé! vous barrez pas, c'est pas fini ! Il faut maintenant recompiler PHP pour qu'il utilise memcache :wink:
Bon, on respire un grand coup et on s'y remet
On récupère l'archive de la librairie memcache pour PHP, on la décompresse et on la copie dans le dossier ext de nos sources PHP (dans l'exemple c'est php 5.2.4 dont les sources se trouvent dans /usr/local/src/php-5.2.4 )
Code:
cd /usr/local/src
wget http://pecl.php.net/get/memcache-2.2.1.tgz
tar zxf memcache-2.2.1.tgz
mv /usr/local/src/memcache-2.2.1 /usr/local/src/php-5.2.4/ext/memcache
Maintenant il nous faut reconstruire le fichier configure de php pour qu'il prenne en compte notre nouvelle extension :
Code:
cd /usr/local/src/php-5.2.4
rm configure
./buildconf --force
Vous pouvez maintenant recompiler PHP en oubliant pas de préciser --enable-memcache dans vos options de configuration :
Code:
./configure ..... --enable-memcache .....
make
make install
Si php est compilé statiquement avec apache, vous devez aussi recompiler apache
Vous redémarrez apache ainsi que le daemon memcached et c'est prêt.
Pour utiliser memcache avec php, repportez à la doc de php (http://fr3.php.net/manual/fr/ref.memcache.php) et ayez un peu d'imagination pour utiliser cette mémoire partagée. (Par exemple, je l'utilise beaucoup pour stocker des classe sérialisées) mais je fais confiance à votre imagination ...
Ouf! c'est fini ! mais pas de panique, c'est plus long à lire qu'à faire :wink: