PHP, APC, Cherokee & MySQL

Ce billet me sert de mémento pour un déploiement de  : PHP (sous sa forme FPM), MySQL et Cherokee comme serveur Web.

L’installation a été faite sur une Fedora 15 64bits fraichement installée (il manquait donc des dépendances). Cette distribution propose tous ces composants sous forme de RPM et quelques « yum install » pourraient vous suffire, cependant cela ne vous fera pas mettre la main dans le cambouis et vous n’apprendrez pas comment tout cela fonctionne 😉

Le niveau de l’article n’est pas haut mais il faut connaitre les bases de la ligne de commande sous linux car je n’explique pas toujours 😮

Petite remarque concernant l’installation de PHP : J’y ajoute 2 extensions :

  • APC (compilée en tant qu’extension externe)
  • memcached (compilée en static)

Pré-requis

Nous allons tout d’abord nous faire un dossier et y stocker tous les fichiers (codes sources) nécessaires. En date du billet, il s’agit des dernières versions disponible.


mkdir lamp
cd lamp

PHP

wget http://fr2.php.net/get/php-5.3.10.tar.bz2/from/this/mirror

APC

wget http://pecl.php.net/get/APC-3.1.9.tgz

Cherokee

wget http://www.cherokee-project.com/download/1.2/1.2.101/cherokee-1.2.101.tar.gz

MySQL

wget http://www.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.20-linux2.6-x86_64.tar.gz/from/http://mirrors.ircam.fr/pub/mysql/

PECL memcache

wget http://pecl.php.net/get/memcache-3.0.6.tgz

Dépendances

su -c "yum install libpng-devel libjpeg-devel libmcrypt-devel freetype-devel subversion autoconf213 libxml2-devel libtool-ltdl-devel bzip2-devel libcurl-devel rddtool"

Si vous êtes sur un système 64bits vous aurez besoin des version 32bits des librairies JPEG et PNG.


yum install libjpeg-turbo-devel.i686 libpng-devel.i686

PHP

Nous allons ajouter l’extension « memcached » en static dans PHP. Pour cela il faut décompresser PHP et memcached.  Puis ensuite nous déplacerons memcached décompressé dans le dossier des extensions de PHP (le code source).

Ensuite il faut régénérer le fichier de configuration de la compilation pour que PHP puisse prendre en charge cette nouvelle extension.


tar zxf memcache-3.0.6.tgz
tar jxf php-5.3.10.tar.bz2
mv memcache-3.0.6 ./php-5.3.10/ext/memcache
cd php-5.3.10
rm configure
./buildconf --force

Si vous rencontrez un problème lors de la recréation de la configuration allez voir mon billet sur l’utilisation d’autoconf 2.13

Configuration et compilation

./configure --prefix=/usr/local/php-fpm --enable-fpm --with-config-file-path=/etc  --with-zlib --with-bz2 --with-gd --with-jpeg-dir=/usr/lib64 --with-png-dir=/usr/lib64 --enable-mbstring --without-pear --enable-gd-native-ttf --enable-zip --without-pdo-sqlite --without-sqlite --without-sqlite3 --with-mhash --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-curl --with-freetype-dir --enable-gd-native-ttf --with-mcrypt --enable-memcache  --disable-ipv6
make
su -c "make install"
su -c "cp php.ini-production /etc/php.ini"

Script de démarrage

su -c "cp ./sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm"
su -c "chmod 0755 /etc/init.d/php-fpm"
su -c "cp /usr/local/php-fpm/etc/php-fpm.conf.default /usr/local/php-fpm/etc/php-fpm.conf"
su -c "chown -R apache:apache /usr/local/php-fpm/var/"

Ensuite il ne vous restera plus qu’a lancer le démon « php-fpm »

service php-fpm start

Pour ce qui est de la configuration, je ferais surement un billet pour expliquer comment configurer php-fpm.

Remarques

  • Pensez à régler le timezone dans le fichier php.ini
  • Régler la variable “error_log” dans le fichier php.ini

APC

tar zxf APC-3.1.9.tgz
cd APC-3.1.9
/usr/local/php-fpm/bin/phpize
./configure --enable-apc --with-php-config=/usr/local/php-fpm/bin/php-config
make
su -c "make install"

Réglage dans le php.ini

extension=apc.so
apc.enabled="1"
apc.shm_segments="1"
apc.shm_size="128M"
apc.num_files_hint="1024"
apc.ttl="7200"
apc.user_ttl="7200"
apc.gc_ttl="3600"
apc.cache_by_default="1"
;apc.filters=""
apc.mmap_file_mask="/tmp/apcphp5.XXXXXX"
apc.slam_defense="0"
apc.file_update_protection="2"
apc.enable_cli="0"
apc.max_file_size="1M"
apc.stat="1"
apc.write_lock="1"
apc.report_autofilter="0"
apc.include_once_override="0"
apc.rfc1867="0"
apc.rfc1867_prefix="upload_"
apc.rfc1867_name="APC_UPLOAD_PROGRESS"
apc.rfc1867_freq="0"
apc.localcache="0"
apc.localcache.size="512"
apc.coredump_unmap="0"

Cherokee

tar zxf cherokee-1.2.101.tar.gz
cd cherokee-1.2.101
./configure --with-wwwuser=apache --with-wwwgroup=apache --prefix=/usr/local/cherokee --sysconfdir=/etc
make
su -c "make install"

Script de démarrage

Je vous propose ce script de démarrage qu’il faudra placer dans /etc/init.d

Cherokee init.d script

su -c "chmod +x /etc/init.d/cherokee"

Administrer le serveur

Pour administrer le serveur rien de plus simple.
En effet, il existe une interface d’administration qui vous évitera de toucher au fichier de conf plutot indigeste…
Sur votre serveur, connecté en root.


/usr/local/cherokee/sbin/cherokee-admin

L’administration va se lancer sur le port 9090 sur 127.0.0.1 et va vous générer un mot de passe. Ce mot de passe change à chaque lancement de l’administration.

Le probleme d’etre sur http://127.0.0.1:9090/ c’est que s’il s’agit d’un serveur distant (c’est à dire que ce n’est pas votre propre machine) vous aurez du mal à vous connecter (c’est à dire que si par exemple votre serveur à l’IP 192.168.10.1 vous ne pourrez pas vous y connecter dessus en faisant http://192.168.10.10:9090 ).

Pour résoudre ce probleme vous avez 2 solutions :

  • Ajouter un paramètre lors du lancement de l’admin
  • Se connecter en utilisant un tunnel SSH
Tout ceci est expliqué dans la documentation ( http://www.cherokee-project.com/doc/other_bundle_cherokee-admin.html ) mais je vous réexplique :
En ajoutant le paramètre « -b » au lancement vous allez demander à l’administration d’écouter sur toutes les interfaces réseau (par défaut l’admin n’écoute que sur l’interface locale, 127.0.0.1).
Cela vous permet donc de vous connecter via l’IP “public” de votre serveur. Mais attention ! Car toute personne connaissant le port + le mot de passe peut alors venir modifier votre configuration. Ce n’est donc pas recommandé sur un serveur en production.L’autre méthode consiste à créer un tunnel SSH entre votre poste et le serveur distant. Pour cela votre poste doit tourner sous linux pour executer une commande « ssh ».
Voici la commande


ssh -l utilisateurServeurDistant -L 9090:localhost:9090 adresseIPServeurDistant

Cela va vous demander d’accepter la clef du serveur (si vous ne vous etes jamais connecté en SSH).
Puis il faudra saisir le mot de passe correspondant à l’utilisateur distant que vous avez renseigné.
Une fois que vous êtes connecté vous pouvez lancer un navigateur et vous connecter via http://localhost:9090/Personnellement je préfère la première méthode mais avec quelques précautions :
  • L’interface d’administration ne doit être lancée que lorsque vous en avez vraiment besoin. Une fois vos changements terminés, arrêtez-la.
  • Utilisez un firewall pour limiter les accès au port 9090 à votre seul adresse IP

Configuration de la “source PHP”

Cherokee ne va pas détecter PHP car il cherche la version “CGI” (Il cherche dans le PATH l’exécutable en plus). Donc nous allons paramétrer nous même la source.
Utilisez l’interface d’admin de cherokee (voir le chapitre précédent)
Dans la catégorie “Sources” cliquez sur le “+” pour ajouter.

  • Tapez un surnom : PHP-FPM
  • Tapez la connection : 127.0.0.1:9000

ps: Pensez à démarrer le démon de PHP-FPM

MySQL

Attention car si vous utilisez KDE, vous allez avoir un problème avec MySQL déjà installé !

A faire en root :


groupadd mysql
useradd -r -g mysql mysql
tar zxf mysql-5.5.13-linux2.6-x86_64.tar.gz
mv mysql-5.5.13-linux2.6-x86_64 /usr/local/
cd /usr/local
ln -s /usr/local/mysql-5.5.13-linux2.6-x86_64/ /usr/local/mysql
cd mysql
chown -R mysql .
chgrp -R mysql .
scripts/mysql_install_db --user=mysql
chown -R root .
chown -R mysql data
cp support-files/mysql.server /etc/init.d/mysqld
cp ./support-files/my-medium.cnf /etc/my.cnf
chkconfig --add mysqld

 

Conclusion

Bon voila, je m’arrête ici pour ce billet, j’espere qu’il vous aura été utile 🙂

 

Taggé , , , .Mettre en favori le Permaliens.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *