Ce module ajoute la possibilité d'exécuter des scripts PHP dans votre serveur Web via le module apache. Il permet également de déployer un dépôt PEAR.
Packages debian nécessaires : libapache2-mod-fcgid, php5-cgi, php5-cli
Packages debian facultatifs : php5-dev
Module pkgi nécessaires : Aucun
Modules pkgi optionnels : apache
Variables spécifiques pkgi :
APPNAME_PHP_XDEBUG_REMOTE_PORT : le port d'écoute de la machine où est installé le debugguer xdebugAPPNAME_PHP_XDEBUG_REMOTE_HOST : le nom réseau de la machine où est installé le debugguer xdebugStructure du module :
bin/pkgi-install-pear : script permettant de déployer simplement un dépôt PEAR (en faisant appel à go-pear), et des extensions PECL.bin/pkgi-install-pear-phar : script permettant de déployer simplement un dépôt PEAR/PECL en faisant appel à la version phar dego-pear (cette commande est disponible depuis la version 3.15 de pkgi).etc/php5/conf.d/ : les fichiers php.ini modularisés. Ici l'utilisateur peut surcharger les variables par défaut de PHP en rajoutant son ou ses fichiers surchargeant la configuration de PHP par défaut.etc/php5/php.ini : le fameux php.ini (configuration de php) qui est la concaténation des fichiers trouvés dans etc/php5/conf.d/etc/apache2/conf.d/php : la config pour charger le module php à la sauce "apache FastCGI"usr/share/php/XXXX : c'est l'emplacement préconisé pour placer vos librairies PHP (remplacez XXX par le nom de votre librairie).usr/bin/php : PHP en ligne de commande basé sur le php.ini locale de votre applicationvar/lib/apache2/fcgid : Répertoire de stockage interne à fcgid (ne pas toucher)usr/lib/fcgi-bin/php-fcgi-wrapper : Lien symbolique vers le binaire php5-cgi de la machine var/www/ : le répertoire correspondant à l'URL racine de votre serveur apache (DocumentRoot), placez y ici vos scripts PHP que vous souhaitez exécuter dans le serveur apache.Depuis pkgi 2.13 le module apache FastCGI est utilisé pour exécuter les scripts à travers le serveur apache.
Dans les versions de pkgi antérieurs à la version 2.13, PHP fonctionnait exclusivement avec apache en mode prefork. Ce type de fonctionnement à deux inconvénients principaux :
Pour éviter ces 2 problèmes, la solution consiste à utiliser apache en mode worker.
FastCGI est lui capable de fonctionner indifféremment avec apache en mode prefork ou worker. Un autre avantage de FatsCGI est sa rapidité : plus rapide ou au moins aussi rapide que prefork suivant les cas.
Références :
La première étape est d'installer les packages PEAR "de base", pour cela il suffit de lancer la commande suivante :
bin/pkgi-install-pear
Plusieurs fichiers seront téléchargés et installés dont :
usr/bin/pear : le binaire de pear, c'est celui la que vous devrez utiliser par la suite pour installer des packages (si vous chargez etc/profile dans votre environnement, ce chemin sera automatiquement réglé dans votre console)usr/share/php/pear/ : c'est ici que seront placées toutes les sources PHP des différents packages que vous installerez. Ce chemin sera configuré automatiquement dans la variable include_path du php.ini de l'application.usr/share/php/xxx/ : vous pouvez placer d'autre librairies dans des répertoires au même niveau que pear (ex: xxx). Tous ces éventuels répertoires seront alors automatiquement configurés dans la variable include_path du php.ini de l'application. (depuis pkgi 2.11)usr/etc/pear.conf : c'est ici que seront stockées les variables de configurations de PEAR (l'emplacement est étrange mais c'est ce que Debian utilise par défaut)
Pour installer un package, il ne vous reste plus qu'à utiliser la commande usr/bin/pear (ou tout simplement pear si vous avez chargé etc/profile dans votre environnement). Par exemple pour installer le package Pxxo, procédez comme cela :
usr/bin/pear install pxxo/Pxxo
Les prérequis sont :
php5-dev (utilisé pour la compilation des extensions)bin/pkgi-install-pear
Ensuite, vous pouvez utiliser la commande usr/bin/pecl pour compiler vos extensions. Voila des exemples :
usr/bin/pecl install xdebug usr/bin/pecl install apc usr/bin/pecl install oci8
usr/lib/php5/extensions/
Il suffit de mettre le bout de code PHP suivant en tête de tous vos scripts :
<?php // bout de code à activer si vous êtes avec une URL https publique // $_SERVER['HTTPS'] = 'on'; // ce code permet de rendre "transparent" le reverse proxy if (isset($_SERVER['REMOTE_ADDR'])) { $_SERVER['REMOTE_ADDR'] = isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR']; } if (isset($_SERVER['HTTP_HOST'])) { $_SERVER['HTTP_HOST'] = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : $_SERVER['HTTP_HOST']; } if (isset($_SERVER['SERVER_ADDR'])) { $_SERVER['SERVER_ADDR'] = isset($_SERVER['HTTP_X_FORWARDED_SERVER']) ? $_SERVER['HTTP_X_FORWARDED_SERVER'] : $_SERVER['SERVER_ADDR']; } if (isset($_SERVER['SERVER_PORT'])) { $_SERVER['SERVER_PORT'] = isset($_SERVER['HTTP_X_FORWARDED_SERVER']) ? (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ? 443 : 80) : $_SERVER['SERVER_PORT']; if ($_SERVER['SERVER_PORT'] == 443) { $_SERVER['HTTPS'] = 'on'; } }
Version templatisée (à privilégier) :
<?php echo '<?php'; ?> <?php if (preg_match('/^https/', getenv('APPNAME_APACHE_URL_ROOT'))) { ?> $_SERVER['HTTPS'] = 'on'; <?php } ?> // ce code permet de rendre "transparent" le reverse proxy if (isset($_SERVER['REMOTE_ADDR'])) { $_SERVER['REMOTE_ADDR'] = isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR']; } if (isset($_SERVER['HTTP_HOST'])) { $_SERVER['HTTP_HOST'] = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : $_SERVER['HTTP_HOST']; } if (isset($_SERVER['SERVER_ADDR'])) { $_SERVER['SERVER_ADDR'] = isset($_SERVER['HTTP_X_FORWARDED_SERVER']) ? $_SERVER['HTTP_X_FORWARDED_SERVER'] : $_SERVER['SERVER_ADDR']; } if (isset($_SERVER['SERVER_PORT'])) { $_SERVER['SERVER_PORT'] = isset($_SERVER['HTTP_X_FORWARDED_SERVER']) ? (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ? 443 : 80) : $_SERVER['SERVER_PORT']; if ($_SERVER['SERVER_PORT'] == 443) { $_SERVER['HTTPS'] = 'on'; } }
Il suffit donc de copier/coller la version "templatisée" de ce code dans le fichier suivant de votre module pkgi :
pkgi/votremodule/etc/php5/prepend.d/reverse-proxy.php
Il sera alors automatiquement inclus avant d'exécuter les scripts PHP de votre application.
On commence par compiler le module :
rm -f usr/lib/php5/extensions/apc.so ./bin/pkgi-install-pear ./usr/bin/pecl install apc
Ensuite on crée la configuration pour le php.ini dans le fichier pkgi/monmodule/etc/php5/conf.d/020apc.ini :
[apc] extension = apc.so apc.enabled = On
On relance deux fois (à cause d'un bug pkgi connu) le build et on redémarre le serveur apache :
./pkgi/build ./pkgi/build ./etc/init.d/apache2 restart