Julien De Bona
Free Software, Cooking, and Everything


Configuration d'Apache pour du développement en simple utilisateur

Publié le 2016-11-13.

Bien souvent, par paresse, on développe sur un serveur Apache installé depuis les packages et lancé par root sur le port 80; cependant, il est plus confortable de se configurer un serveur à part, lancé en simple utilisateur, et qu'on peut donc redémarrer à volonté sans devoir repasser par le compte root. Il est bien sûr possible de télécharger le source d'Apache, de le compiler et de l'installer dans le répertoire personnel, mais cela présente plusieurs inconvénients qui rendent cette méthode peu élégante:

  • Il faut du temps pour compiler Apache et tous les modules nécessaires
  • Cette compilation n'est pas toujours facile (par exemple la compilation des modules est plutôt joyeuse sous Solaris)
  • Chaque instance d'Apache utilise une installation, et tous les binaires sont donc inutilement dupliqués.
  • Un programme installé à partir des sources représente un surcoût de maintenance.

Marche à suivre

Ces instructions s'appliquent à Apache tel que packagé dans Debian 8 (Jessie)

Le démarrage et l'arrèt d'Apache sont gérés par apachectl. Apachectl est un script shell qui tire l'essentiel de sa configuration de variables d'environnement, pour l'essentiel tirées d'un fichier envvars situé dans le répertoire de configuration d'Apache.

Installation d'Apache

Il faut d'abord un Apache installé, typiquement depuis les packages. J'utilise le package apache2, de la Debian Jessie:

apt-get install apache2

Configuration de l'environnement privé de l'utilisateur

Le script apachectl se trouve dans /usr/sbin et peut donc ne pas se trouver dans le PATH.  Pour les utilisateurs d'Ubuntu, ça peut déjà être le cas. Sur Debian, il peut être plus commode de se donner un point d'entrée qui ne nécessite pas d'entrer le chemin complet. Les méthodes sont multiples:

  • Copie du script ou création d'un symlink dans un répertoire se trouvant dans le PATH (expliqué plus bas).
  • Alias shell configuré dans ~/.bash_profile ou ~/.bashrc
  • Création d'un wrapper dans le PATH (si on veut configurer plusieurs Apaches, c'est le plus simple.

Pour se créer un répertoire dans le PATH:

  1. Créer un répertoire bin dans le répertoire personnel: mkdir ~/bin
  2. Ajouter ~/bin au PATH: éditer ~/.bash_profile et y ajouter la ligne suivante: PATH=$HOME/bin:${PATH}
  3. Configurer le terminal pour lancer un login shell. Sur les 6 consoles virtuelles, il n'y a rien à faire. Sur le Xterm, il faut modifier le lanceur pour ajouter l'option -ls. Sur le terminal Gnome, aller dans "Edition","Profil courant", onglet "Titre et commande", cocher la case "Lancer la commande en tant que shell de connexion". Je le note ici car c'est quelque chose auquel on prête rarement attention, mais cela relève du shell, et non d'apache.
  4. Ouvrir un nouveau terminal pour jouir des nouveaux paramètres

On peut maintenant s'occuper d'Apache:, par exemple en créant un lien symbolique $HOME/bin/myapachectl pointant vers /usr/sbin/apachectl.

À l'inverse des anciennes versions, apachectl peut utiliser des variables d'environnement pour sa configuration. On peut donc ajouter la définition suivante dans ~/.bash_profile:

export APACHE_CONFDIR=$HOME/opt/apache/conf

Ensuite, créer les répertoires nécessaires:

mkdir -p ~/opt/apache/conf ~/opt/apache/logs ~/opt/apache/htdocs

Ensuite, y copier les fichiers de configuration:

cp -r /etc/apache2/* ~/opt/apache/conf

On peut maintenant configurer le serveur via le fichier ~/opt/apache/conf/envvars:

export APACHE_RUN_USER=julien
export APACHE_RUN_GROUP=julien
export APACHE_PID_FILE=/home/julien/opt/apache/apache.pid
export APACHE_RUN_DIR=/home/julien/opt/apache/logs
export APACHE_LOCK_DIR=/home/julien/opt/apache/logs
export APACHE_LOG_DIR=/home/julien/opt/apache/logs

Sous Stretch, ajouter également la ligne suivante:

export APACHE_STARTED_BY_SYSTEMD=true

Cette variable est utilisée par apachectl et sert à forcer une invocation de systemctl; ici, on joue en simple utilisateur dans sa session, complètement déconnecté de systemd, donc on cherche à lancer directement httpd en lui faisant croire qu'il a été invoqué par systemctl.

Comme le serveur ne pourra pas écouter sur des ports inférieurs à 1024, modifier $HOME/opt/apache/conf/ports.conf, par exemple:

Listen 8080

<IfModule ssl_module>
        Listen 8443
</IfModule>

<IfModule mod_gnutls.c>
        Listen 8443
</IfModule>

On peut finalement passer à la configuration de ses applications dans les vhosts ($HOME/opt/apache/conf/sites-enabled/000-default.conf). Penser à configurer le port et le DocumentRoot.

Démarrer le serveur

Comme le script myapachectl est dans le PATH, il suffit de le lancer avec au choix les options start, stop, restart ...

Désactiver le serveur par défaut

Pour arrêter, puis empêcher de démarrer l'Apache du système de démarrer au boot, exécuter les deux commandes suivantes en root:

systemctl stop apache2
systemctl disable apache2

tags: linux, apache, www

Quelques tags ...