Installer Apache dans un container LXC

apache linux 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 diponnibles
  • 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
  • disponnible 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.

Instalation d’apache

Rien de bien sorcier, un petit apt install et c’est plié:

$ apt install apache2

Afin de connaitre l’addresse 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’acceuil par défaut apparait!

Page par défaut d'Apache

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 disponnibles
  • 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 addresse 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 redemmarer notre serveur Apache.

$ systemctl reload apache2

Et de se rendre sur http://test.fr.

Page d'acceuil de test.fr

Dans un prochain article on verra comment améliorer la configuration de base d’Apache