Table des matières

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/ :

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 :

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