Configuration d'Apache pour du développement en simple utilisateur
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:
- Créer un répertoire bin dans le répertoire personnel:
mkdir ~/bin
- Ajouter
~/bin
au PATH: éditer~/.bash_profile
et y ajouter la ligne suivante:PATH=$HOME/bin:${PATH}
- 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. - 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