Configuration Apache et PHP
Apache est conçu pour prendre en charge de nombreux modules lui donnant des fonctionnalités supplémentaires : interprétation du langage Perl, PHP, Python et Ruby, serveur proxy, Common Gateway Interface, Server Side Includes, réécriture d'URL, négociation de contenu, protocoles de communication additionnels, etc. Néanmoins, il est à noter que l'existence de nombreux modules Apache complexifie la configuration du serveur web. En effet, les bonnes pratiques recommandent de ne charger que les modules utiles : de nombreuses failles de sécurité affectant uniquement les modules d'Apache sont régulièrement découvertes.
Tous les fichiers de configuration Apache sont stockés dans /etc/apache2/ :
- apache2.conf : configuration générale (ancien httpd.conf)
- mods-available/ : modules disponibles
- mods-enabled/ : modules activés
- sites-available/ : sites disponibles (contient default pour le site hébergé par défaut)
- sites-enabled/ : Sites activés
Pour activer un module Apache on utilise la commande a2enmod (Apache 2 Enable Module), exemple avec l'activation du module rewrite :
sudo a2enmod rewrite
Activer un module revient à créer un lien symbolique du fichier concerné du dossier mods-available dans le dossier mods-enabled
Pour connaitre la liste des modules actifs à tout moment :
apache2ctl -t -D DUMP_MODULES
Après avoir activé un module il faut forcer Apache à recharger sa configuration avec la commande suivante :
sudo /etc/init.d/apache2 reload
ou en cas de soucis on peut également redémarrer directement Apache avec :
sudo /etc/init.d/apache2 restart
Configuration Apache pour le développement
Tout d'abord on va changer l'index du site par défaut d'Apache pour afficher un phpinfo()
sudo rm /var/www/index.html sudo vi /var/www/index.php
Et on y saisi :
<?php phpinfo(); ?>
Si vous saisissez http://server.local.lan, vous devriez voir le phpinfo() (faites un refresh du cache navigateur le cas échéant)
On va configurer Apache pour créer des vhosts à la volée, ainsi chaque développeur aura à disposition son propre espace de développement mais également une url par projet.
Exemple :
Le développeur “Jean Dupont” (identifiant jdupont) aura l'url suivante pour le projet “test” : http://test.jdupont.server.local.lan
L'url pointera sur le dossier /home/web/jdupont/test/www
Pour faire ça, on va utiliser le module vhost_alias d'Apache.
Tout d'abord on va créer le dossier où seront stockés les dossiers des développeurs :
sudo mkdir /home/web sudo chown www-data:www-data /home/web sudo chmod 775 /home/web
A noter que l'on assigne le dossier à l'utilisateur www-data et au groupe du même nom qui sont ceux d'Apache par défaut. Plus tard, les développeurs feront partie du même groupe quand les utilisateurs seront créés.
On active le module vhost_alias, plus d'autres modules utiles pour le développement :
sudo a2enmod vhost_alias rewrite headers expires
Puis on crée le fichier de configuration du vhost :
sudo vi /etc/apache2/sites-available/vhost.conf
On y copie les lignes suivantes :
<VirtualHost *:80> ServerAlias *.server.local.lan VirtualDocumentRoot /home/web/%2/%1/www <directory /home/web> Options Indexes FollowSymLinks MultiViews AllowOverride All Order deny,allow Allow from All </directory> </VirtualHost>
Puis on l'active :
sudo a2ensite vhost.conf
Pour finir on relance Apache :
sudo /etc/init.d/apache2 restart
Pour tester vous pouvez effectuer ceci :
sudo mkdir -p /home/web/test/test/www sudo cp /var/www/index.php /home/web/test/test/www/ sudo chown -R www-data:www-data /home/web/test sudo chmod -R 775 /home/web/test
Saisisez l'url suivante dans votre navigateur : http://test.test.server.local.lan
Si vous voyez le phpinfo (provenant de index.php) créé auparavant, c'est que votre configuration est bonne.
Vous pouvez supprimer le dossier de test :
sudo rm -rf /home/web/test
Configuration Apache alternative pour le développement
Il est possible d'avoir des urls très proches des urls de production en utilisant la configuration suivante (et en configurant correctement votre DNS) :
<VirtualHost *:80> ServerAlias *.dev VirtualDocumentRoot /home/web/%2.0.%3/%1/web <directory /home/web/%2.0.%3/%1/web> Options Indexes FollowSymLinks MultiViews AllowOverride All Order deny,allow Allow from All </directory> </VirtualHost>
Dans cette exemple pour accéder à un site dont l'url sera http://www.exemple.com.dev on créera un dossier /home/web/exemple.com/www/web
Variable d’environnement
Il est possible de déclarer une variable d'environnement pour différencier le serveur de développement du serveur de production, exemple :
<VirtualHost *:80> ServerAlias *.dev VirtualDocumentRoot /home/web/%2.0.%3/%1/web <directory /home/web/%2.0.%3/%1/web> Options Indexes FollowSymLinks MultiViews AllowOverride All Order deny,allow Allow from All </directory> SetEnv APP_ENV dev </VirtualHost>
On pourra alors faire une condition dans les scripts PHP :
if(getenv('APP_ENV') === 'dev') { ... }
Attention pour PHP en CLI, vous devez également définir la variable dans le fichier /etc/environment (APP_ENV=dev)
Modules PHP
Bon nombre des fonctionnalités offertes par PHP le sont en fait par des extensions: des modules. En fait, PHP profite des multiples bibliothèques écrites en langage C pour nous fournir ces services. PHP étant modulaire, ces extensions peuvent être chargées ou non, selon les besoins.
On va installer 5 modules parmi les plus courant et les plus utiles pour le développement, il s'agit de :
- php5-gd : génération et manipulation d'images
- php5-xdebug : affichage de données de debug supplémentaires
- php5-curl : permet de vous connecter et de communiquer avec différents types de serveurs, et ce, avec différents types de protocoles.
- php5-imagick : extension pour créer et modifier les images, en utilisant l'API ImageMagick.
- php5-apc : permet de mettre en cache le code PHP déjà compilé
sudo apt-get install php5-gd php5-xdebug php5-curl php5-imagick php5-apc
Facultatif
Configuration xdebug
Par défaut xdebug affiche 3 niveaux max quand on fait un var_dump ce qui est un peu faible par moment, on peut augmenter cette valeur :
sudo vi /etc/php5/apache2/conf.d/xdebug.ini
Puis on y saisi à la fin du fichier :
xdebug.var_display_max_depth=10
Configuration PHP
On peut également configurer php pour plus de confort de développement :
sudo vi /etc/php5/apache2/php.ini
Par exemple :
post_max_size = 20M
upload_max_filesize = 20M
date.timezone = "Europe/Paris"
Rechargement
Pour finir on recharge Apache :
sudo /etc/init.d/apache2 reload