Installer plusieurs versions de PHP sur un serveur web
Il arrive qu'il soit nécessaire d'installer des versions de PHP spécifiques pour des projets qu'on héberge. Le must du must est de passer par son gestionnaire de paquet mais ce n'est pas toujours possible. Il convient donc de récupérer le ou les versions nécessaires et de les compiler.
Une des problématiques réside dans la sécurisation du serveur web. Il est important de considérer que se passer de son gestionnaire de paquet est dangereux car on ne bénéficie pas des mises à jour de sécurité et qu'il est impératif de gérer les droits pour que les projets impactés s'exécutent avec des utilisateurs qui leur sont dédiés.
La procédure d'installation n'est pas compliquée mais ça demande d'être minutieux.
Pour gérer la récupération du code source et de sa compilation, j'aime beaucoup travailler avec PhpFarm. On va donc récupérer le projet et simplement balancer un peu de config.
Pour cet exemple, je veux d'installer PHP 5.4.28. L'ensemble des commandes est fait en root.
aptitude update
aptitude install git make
cd /usr/local
git clone git://git.code.sf.net/p/phpfarm/code phpfarm
cd phpfarm/src
Je vous propose de modifier les options de compilation afin d'avoir quelques outils souvent très utilisés. Il suffit d'éditer le fichier src/options.sh et d'éditer la liste des paramètres :
configoptions="\
--enable-bcmath \
--enable-calendar \
--enable-exif \
--enable-ftp \
--enable-mbstring \
--enable-pcntl \
--enable-soap \
--enable-sockets \
--enable-sqlite-utf8 \
--enable-wddx \
--enable-zip \
--with-openssl \
--with-zlib \
--with-gettext \
--enable-libxml \
--with-zlib \
--with-xsl \
--with-jpeg-dir \
--with-png-dir \
--with-gd \
--with-ttf \
--with-freetype-dir \
--with-pdo-mysql \
--with-mysql \
$gcov"
À présent, il suffit de demander à PhpFarm de télécharger et compiler notre version de PHP.
./compile.sh 5.4.28
Il manquera sans doute des lib de dev. Par exemple, s'il remonte une erreur concerant jpeg, faite une recherche du type aptitude search jpeg | grep dev et installez ce qui convient (le paquet libjpeg8-dev dans ce cas).
Une fois la compilation achevée, il faut configurer le serveur web (apache2 dans mon cas). Je rappel que je veux que mes projets aient un utilisateur dédié. Je vais faire une configuration similaire à celle-ci.
a2enmod actions suexec
mkdir -p /var/www/service-web/bin/cgi
echo /usr/local/phpfarm/inst/bin /var/www/service-web/bin/cgi none bind >> /etc/fstab
mount /usr/local/phpfarm/inst/bin
Si j'ai un projet "blog", mon utilisateur dédié sera "webblog". J'ai également un groupe "webgroup" pour tout mes projets.
addgroup webgroup
useradd -G webgroup -s /bin/false -M webblog
chown -R webblog:webgroup /chemin/vers/projet/blog
mkdir /var/www/service-web/bin/cgi/webblog
cd /var/www/service-web/bin/cgi/webblog
cat > php-cgi <<EOS
#!/bin/sh
exec /usr/local/phpfarm/inst/bin/php-cgi-5.4.28
EOS
chown -R webblog:webgroup .
chmod u+x php-cgi
Il manque plus que la modification du VirtualHost :
<VirtualHost *:80>
[...]
SuexecUserGroup webblog webgroup
ScriptAlias /phpfarm-bin/ /var/www/service-web/bin/cgi/webblog/
AddHandler application/x-httpd-php5 php
Action application/x-httpd-php5 /phpfarm-bin/php-cgi
[...]
</VirtualHost>
Faites une petite prière et relancez apache :
service apache2 restart
Comme je n'utilise que du FastCGI (ou des CGI), je ne sais pas comment la configuration réagit si PHP (en module apache) est activé.

Expiration de certificats SSL
Fin avril dernier, j'ai publié un projet qui génère un récapitulatif de la date d'expiratio…

Outil de création d’un espace web Apache et PHP
Dans mon activité personnelle et professionnelle, je suis amené à créer des espaces d’héber…

API pour récupérer le contenu Open Graph d'une page web
Pour la fonctionnalité de partage de liens sur ce blog, j'ai développé un script qui récupé…