Installer Apache dans un container LXC
Apache est un serveur HTTP distribué sous licence libre. Avec quasiment 50% de part de marché c’est un des serveur web les plus populaire.
Ses avantages sont:
- communauté imposantes et donc beaucoup de ressources disponibles
- modules qui permettent de prendre en charge de nombreux langages (PHP, Python, Ruby, etc..) et de personnaliser Apache
- open-source et maintenu par la fondation Apache
- disponible sur toutes les plateformes
Beaucoup de tutoriels existent pour installer Apache mais voici les informations que j’aurais aimé avoir sous la mains à mes débuts.
Créer un container
Vous pouvez très bien faire vos tests directement sur votre serveur ou sur votre environnement de développement mais il est intéressant de créer un container isolé de votre système. L’avantage est que si l’on casse le système, on peut le reproduire très facilement.
Pour cela, on utilise LXC (Linux Container). LXC s’installe très facilement avec un petit apt install
apt install lxc lxc-templates debootstrap
Ensuite, on crée un container basé sur une image Debian vierge grâce à lxc-create
:
sudo lxc-create --name apache -t debian
On démarre le container avec lxc-start
et on se connecte dessus à l’aide de lxc-attach
:
sudo lxc-start --name apache
sudo lxc-attach --name apache
Nous voilà dans notre container isolé de notre système.
Installation d’apache
Rien de bien sorcier, un petit apt install
et c’est plié:
apt install apache2
Afin de connaître l’adresse IP de notre machine on lance un ìfconfig
. On ouvre donc notre navigateur et on tape directement http://10.0.3.416 (en remplaçant par votre IP). La page d’accueil par défaut apparaît!
Ce n’est pas de la magie, la page par défaut est située ici.
/var/www/
└── html
└── index.html
Création de notre projet
Nous savons donc que nos projets doivent être stockées dans dans /var/www. Nous allons créer notre projet test.fr directement dans ce dans ce dossier.
mkdir -p /var/www/test.fr/public
Nous créeons un dossier public pour séparer ce qui sera accessible de ce qui sera innaccessible à tout le monde. C’est une bonne pratique
Maintenant on crée le fichier index.html.
echo '<h1>Hello world</h1>' > /var/www/test.fr/public/index.html
Et afin d’avoir du CSS, on rajoute la dernière version de Twitter Bootstrap en utilisant curl
.
apt install curl
curl https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.css > /var/www/test.fr/public/twitter-bootstrap.css
echo '<link rel="stylesheet" href="twitter-bootstrap.css">' >> /var/www/test.fr/public/index.html
Si tout c’est bien déroulé (il n’y a pas de raison), vous devriez avoir ça:
/var/www/test.fr/
└── public
├── index.html
└── twitter-bootstrap.css
Le Virtual Host
Le Virtual Host (Vhost pour les intimes) nous permet d’ héberger plusieurs sites sur un même serveur. Nous allons donc installer notre site test.fr sans écraser le site par défaut.
Pour cela, il suffit de créer une nouvelle configuration dans le dossier /etc/apache2. Deux dossiers existent pour stocker les configurations:
- sites-availables contient les configurations des sites disponibles
- sites-enabled contient les configurations des sites activées
Pour le moment, nous ajoutons notre configuration dans sites-availables:
vi /etc/apache2/sites-availables/test.fr.conf
.. et on rentre la configuration minimale:
# on spécifie le port d'écoute de ce site (80 = HTTP)
<VirtualHost *:80>
# le nom de domaine qui sera utilisé pour ce site
ServerName test.fr
# le dossier racine de notre site
DocumentRoot /var/www/test.fr/public
</VirtualHost>
Eh mais Je ne possède pas test.fr, comment va t-on faire?
C’est vrai mais on peut le simuler très facilement. Sur le PC client (celui qui visite le site), on va ajouter une entrée DNS au fichier /etc/hosts. Une entrée DNS fait correspondre un nom de domaine (= test.fr) à une adresse IP (= 10.0.3.416).
echo '10.0.3.146 test.fr' | sudo tee --append /etc/hosts
On termine par activer notre configuration. On utilise a2ensite
qui va s’occuper de créer un lien symbolique de notre fichier de configuration dans le dossier sites-enabled.
a2ensite test.fr
Il suffit de redémarrer notre serveur Apache.
systemctl reload apache2
Et de se rendre sur http://test.fr.
Dans un prochain article on verra comment améliorer la configuration de base d’Apache
Voir les autres articles liés
Soyez le roi des redirection
l'occasion de mettre ma pierre à l'édifice des Benchmarks existants