Apache, configurer son environnement de développement

Bien que fonctionnelle, l’installation par défaut d’Apache ne correspond rarement à nos besoins. Voyons comment configurer Apache pour un environnement de développement local.

Dans ce billet, nous partons d’une installation d’Apache 2.2 réalisée sur Mac en utilisant MacPorts. En dehors de certains chemins propres à l’exemple, ce billet pourra être utile quelque soit l’origine de l’installation et la plateforme sur laquelle Apache est installé.

Modules chargés par Apache

Par défaut, Apache va charger une longue liste de modules. Sur l’ensemble de ces modules, seuls certains nous intéressent, nous allons désactiver le chargement des autres :

Éditez le fichier de configuration d’Apache :

# Le fichier de configuration d'Apache (installé via MacPorts)
sudo nano /opt/local/apache2/conf/httpd.conf
# Recherchez le bloc de ligne commençant par "LoadModule"
# La liste est longue !!!
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbd_module modules/mod_authn_dbd.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule file_cache_module modules/mod_file_cache.so
LoadModule cache_module modules/mod_cache.so
LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule mem_cache_module modules/mod_mem_cache.so
LoadModule dbd_module modules/mod_dbd.so
LoadModule dumpio_module modules/mod_dumpio.so
LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule include_module modules/mod_include.so
LoadModule filter_module modules/mod_filter.so
LoadModule substitute_module modules/mod_substitute.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule log_forensic_module modules/mod_log_forensic.so
LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule cern_meta_module modules/mod_cern_meta.so
LoadModule expires_module modules/mod_expires.so
LoadModule headers_module modules/mod_headers.so
LoadModule ident_module modules/mod_ident.so
LoadModule usertrack_module modules/mod_usertrack.so
LoadModule unique_id_module modules/mod_unique_id.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule version_module modules/mod_version.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule mime_module modules/mod_mime.so
LoadModule dav_module modules/mod_dav.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule asis_module modules/mod_asis.so
LoadModule info_module modules/mod_info.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
LoadModule imagemap_module modules/mod_imagemap.so
LoadModule actions_module modules/mod_actions.so
LoadModule speling_module modules/mod_speling.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule php5_module modules/libphp5.so

Voici la version où seuls les modules « de base » ne sont pas commentés (pour en savoir plus):

LoadModule authn_file_module modules/mod_authn_file.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
#LoadModule authn_anon_module modules/mod_authn_anon.so
#LoadModule authn_dbd_module modules/mod_authn_dbd.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
#LoadModule authz_user_module modules/mod_authz_user.so
#LoadModule authz_dbm_module modules/mod_authz_dbm.so
#LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
#LoadModule file_cache_module modules/mod_file_cache.so
#LoadModule cache_module modules/mod_cache.so
#LoadModule disk_cache_module modules/mod_disk_cache.so
#LoadModule mem_cache_module modules/mod_mem_cache.so
#LoadModule dbd_module modules/mod_dbd.so
#LoadModule dumpio_module modules/mod_dumpio.so
LoadModule ext_filter_module modules/mod_ext_filter.so
#LoadModule include_module modules/mod_include.so
LoadModule filter_module modules/mod_filter.so
#LoadModule substitute_module modules/mod_substitute.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule log_config_module modules/mod_log_config.so
#LoadModule log_forensic_module modules/mod_log_forensic.so
#LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
LoadModule mime_magic_module modules/mod_mime_magic.so
#LoadModule cern_meta_module modules/mod_cern_meta.so
LoadModule expires_module modules/mod_expires.so
LoadModule headers_module modules/mod_headers.so
#LoadModule ident_module modules/mod_ident.so
#LoadModule usertrack_module modules/mod_usertrack.so
#LoadModule unique_id_module modules/mod_unique_id.so
LoadModule setenvif_module modules/mod_setenvif.so
#LoadModule version_module modules/mod_version.so
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule mime_module modules/mod_mime.so
#LoadModule dav_module modules/mod_dav.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
#LoadModule asis_module modules/mod_asis.so
LoadModule info_module modules/mod_info.so
LoadModule cgi_module modules/mod_cgi.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
#LoadModule imagemap_module modules/mod_imagemap.so
LoadModule actions_module modules/mod_actions.so
LoadModule speling_module modules/mod_speling.so
#LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule php5_module        modules/libphp5.so

Les modules « Status et Info » sont chargés, décommentez la ligne « Include » en fin de fichier de configuration d’Apache :

# Real-time info on requests and configuration
Include conf/extra/httpd-info.conf

# Editez le fichier "httpd-info.conf"
sudo nano /opt/local/apache2/conf/extra/httpd-info.conf

# Remplacez les 2 lignes "Allow from .example.com" par "Allow from localhost"

Redemarrez Apache, puis tapez http://localhost/server-status ou http://localhost/server-info

Utilisation des « Virtual Hosts »

Lorsque l’on travaille sur plusieurs projets, il est quasi nécessaire d’attribuer à chaque projet un nom de domaine plutôt que de travailler dans un répertoire (ou alias) sur « localhost ».

Imaginons travailler sur quatre projets :

  • http://localhost/blog/
  • http://localhost/dev-blog/
  • http://localhost/projet-zend/
  • http://localhost/projet-symfony/

En utilisant les hôtes virtuels, chacun de ces projets disposera de sa propre racine « Web », de son nom de domaine local et/ou réel et pourra avoir une configuration Apache et PHP particulière :

  • http://blog.local
  • http://dev-blog.local
  • http://projet-zf.local
  • http://projet-sf.local

Modifiez le fichier le fichier de configuration d’Apache :

sudo nano /opt/local/apache2/conf/httpd.conf
# Ajoutez les lignes suivante vers la fin du fichier
# Configuration des Vhosts
Include conf/vhost.d/*.conf

Créez le répertoire de configuration des « vhosts »

sudo mkdir /opt/local/apache2/conf/vhosts.d

Créez le fichier de configuration du « Virtual Host » par défaut :

sudo nano /opt/local/apache2/conf/vhosts.d/default_vhost.conf
# Copiez les lignes suivantes
NameVirtualHost *:80



  ServerName localhost
  ServerAdmin root@localhost
  DocumentRoot "/opt/local/apache2/htdocs"

  
        Options Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
  

Ce premier « vhost » est là pour poser certaines directives, ici « NameVirtualHost » que l’on aura pas à redéfinir dans les « vhosts » suivant. Ce premier « vhost » répond simplement à l’adresse « localhost » et pointe sur le répertoire « htdocs » créé à l’installation d’Apache. Vous pouvez désactiver l’accès à cet hôte si vous le souhaitez (Remplacer « Allow from all » par « Deny from all »).

Ajoutez un second fichier « vhost », par exemple pour installer votre blog WordPress en local :

sudo nano /opt/local/apache2/conf/vhosts.d/blog.local.conf
# Copier les lignes suivantes

  ServerName blog.local
  DocumentRoot "/Users/fabien/workspaces/sites/blog.myprod.net/public_html"
  
        Options Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
  
  ErrorLog /opt/local/apache2/logs/blog.error.log
  CustomLog /opt/local/apache2/logs/blog.access.log common

Finalisez l’environnement

Dans l’exemple du blog, la racine « Web » est placée dans l’espace de l’utilisateur « fabien ». Le serveur Web tourne par défaut avec les droits « User : www, Group : www ». Dans certains cas, vous serez obligés d’affiner les droits pour qu’Apache puisse manipuler (CRUD) des fichiers ou répertoires. Une autre solution consiste à modifier le fichier de configuration d’Apache pour qu’il utilise votre compte Utilisateur (exemple « fabien / staff »). Pour un espace local de développement, avec un php installé en module d’Apache, c’est une bonne solution si on ne souhaite pas jongler avec les droits. Cependant, attention aux commandes que pourrait effectuer vos scripts.

sudo nano /opt/local/apache2/conf/httpd.conf
# Faire tourner Apache avec vos droits utilisateur (ici les miens)
# Remplace l'utilisateur "www" et le groupe "www"
User fabien
Group staff

Modifiez la liste des fichiers d’index d’Apache :

sudo nano /opt/local/apache2/conf/httpd.conf
# Cherchez la ligne commençant par DirectoryIndex
# Apache utilise les fichiers d'index dans l'ordre
# Ajoutez index.php en premier

    DirectoryIndex index.php index.html

Pour la partie DNS, si vous ne disposez pas d’un serveur DNS local, modifiez le fichier « hosts » de votre machine (votre machine ne doit pas utilisez de serveur DHCP pour l’exemple suivant).

sudo nano /etc/hosts
# Ajouter pour chaque domaine local une ligne de la manière suivante
# Nous aurions pu ajouter des alias à localhost, mais je préfère utiliser l'interface externe.
# exemple :
192.168.100.5   blog.local

# Pour plusieurs domaines locaux, vous pouvez ajouter de nouvelles lignes :

192.168.100.5   blog.local
192.168.100.5   blog-dev.local

# Normalement, il ne devrait y avoir qu'une seule ligne :
# "Internet address" "Official host name" ["Aliases"]
192.168.100.5   blog.local blog-dev.local

Votre environnement local de développement Web (Apache, PHP) est à présent bien plus souple et fonctionnel.

Laisser un commentaire

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