Solution de messagerie web (nginx+rainloop)

 

Nous avons maintenant notre solution de messagerie opérationnelle, mais il nous faut une interface pour lire nos mails. Il y a généralement deux solutions pour cela, soit on utilise un client de messagerie sur notre machine comme outlook, mail ou thunderbird, soit nous utilisons un webmail qui est un site web installé la plupart du temps directement sur le serveur de messagerie et qui permet de consulter ses mails en ligne, comme gmail, yahoo ou outlook.com.

Dans notre cas, nous allons opter pour la seconde solution du webmail, bien que la première puisse être aussi utilisée, mais elle nécessiterait un peu de sécurisation complémentaire pour être efficace.

Avant de pouvoir installer notre webmail, il faut déjà que l'on ait un serveur web à notre disposition. Si vous avez bien suivi le cours depuis le premier ouvrage, vous serez un pro de l'installation d'apache2. Cependant, vu que vous êtes ici pour apprendre, nous allons utiliser un autre serveur web qui est en vogue en ce moment, il s'agit de nginx (prononcer engineX, comme un moteur en anglais)

Installation du serveur web

Le package pour installer nginx est... nginx !

root@Debian02:~# apt-get install nginx

Cependant, comme pour apache2, par défaut nginx n'interprète pas le PHP, il faut pour cela installer un package complémentaire qui fasse la liaison entre le serveur web et l'interpréteur PHP. Il s'agit de php-fpm. A vous de trouver la version correspondant à votre système, pour ma part il s'agit de php7.0.

root@Debian02:~# apt-get -y install php7.0-fpm

Nous pouvons vérifier si le serveur est bien en écoute :

root@Debian02:~# ss -antp

State Recv-Q Send-Q Local Address:Port Peer Address:Port

[...]

LISTEN 0 128 *:80 *:* users:(("nginx",pid=15292,fd=6),("nginx",pid=15291,fd=6))

[...]

LISTEN 0 128 :::80 :::* users:(("nginx",pid=15292,fd=7),("nginx",pid=15291,fd=7))

[...]

Le port 80 qui correspond à notre serveur web est bien en écoute, nous pouvons donc tester notre connexion à notre serveur avec notre navigateur préféré en indiquant l'adresse IP de notre serveur :

Page de connexion web à notre serveur nginxPage de connexion web à notre serveur nginx
 
Ça marche ! notre serveur est en place 
:D:D
 

Attention cependant, si votre machine est une machine virtuelle, il faut que vous fassiez en sorte de la rendre accessible, comme dans la quatrième partie du  cours précédent "Apprenez le fonctionnement des réseaux TCP/IP"

Il nous reste à vérifier qu'il interprète correctement le PHP car le webmail que l'on souhaite installer est codé en PHP. Pour cela, il va déjà falloir indiquer à notre serveur qu'il peut prendre en compte les pages d'index en PHP. Nous allons simplement ajouter index.php comme pages par défaut, et cela se fait dans le virtualhost par défaut /etc/nginx/sites-available/default sur la ligne qui commence par index :

# Add index.php to the list if you are using PHP

index index.php index.html index.htm index.nginx-debian.html;

Il faut ensuite ajouter la prise en compte de PHP en dé-commentant les lignes correspondant à PHP-fpm, dans le même fichier default :

 # pass PHP scripts to FastCGI server

 #

 location ~ \.php$ {

 include snippets/fastcgi-php.conf;

 

 # With php-fpm (or other unix sockets):

 fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;

 # # With php-cgi (or other tcp sockets):

 # fastcgi_pass 127.0.0.1:9000;

 }

Il faut ensuite re-démarrer le serveur pour que les modifications soient prises en compte:

root@Debian02:~# systemctl restart nginx

Pour tester, nous allons simplement créer une nouvelle page en php à la racine du serveur.

Mais où se situe-t-elle ?

Vous avez maintenant l'habitude, toutes les informations de base sont situées dans les fichiers de configuration, et ici notamment dans le fichier de virtualhost par défaut, nous pouvons lire :

root /var/www/html;

Les pages devraient donc se trouver dans ce répertoire :

root@Debian02:/var/www/html# ls -la /var/www/html

total 3

drwxr-xr-x 4 root root 4096 avril 4 15:30 .

drwxr-xr-x 3 root root 4096 mars 29 10:58 ..

-rw-r--r-- 1 root root 612 mars 29 10:58 index.nginx-debian.html

On y retrouve bien notre page par défaut vue auparavant.

Pour tester si le PHP est bien interprété, rien de plus simple, nous allons créer une page PHP qui ne contient qu'un appel à une fonction de base :

root@Debian02:/var/www/html# vim /var/www/html/index.php

Puis y rentrer nos informations php :

<?php

phpinfo();

?>

C'est relativement simpliste !

Mais regardons le résultat :

Page web représentant notre appel à phpinfo()Page web représentant notre appel à phpinfo()
 

Notre fonction phpinfo() a bien été interprétée, le PHP est donc bien installé.

Nous allons pouvoir passer à l'installation du webmail.

Installation du webmail

Il existe aujourd'hui de nombreux webmails qui offrent chacun des fonctionnalités diverses et variées. L'avantage de notre solution est qu'elle peut fonctionner avec la plupart des webmails existants, donc si celui que nous allons installer ne vous plait pas, vous restez libre d'en installer un autre, ou même d'en installer plusieurs si vous le souhaitez !

Pour notre mise en place, j'ai choisi Rainloop. C'est un webmail très simple et performant, et il a l'avantage de ne pas nécessiter d'installation de base de données, tant que l'on ne veut pas gérer de contacts. Pour l'installation de la plupart des autres webmails, ils vous faudra créer les bases de données nécessaires à leur fonctionnement.

Récupération des outils nécessaires et installation de rainloop

Dans un premier temps, vous allez devoir installer les outils nécessaires à l'installation de rainloop. Nous aurions pu faire comme dans le chapitre sur SMTP et régler les problèmes un à un au fur et à mesure que nous les rencontrions, mais je vous propose d'utiliser directement les commandes correctes afin de gagner du temps.

Il nous faut donc d'abord installer deux packages liés à PHP qui vont nous permettre par la suite d'installer facilement rainloop.

root@Debian02:~# apt-get install php-curl php-xml curl

Il nous faut ensuite créer les répertoires dans lequel rainloop va être installé, ainsi qu'un répertoire pour les logs.

root@Debian02:~# mkdir -p /var/www/rainloop/{public_html,logs}

Nous allons ensuite utiliser la commande curl pour installer rainloop vu que c'est ce qui est conseillé de faire par les développeurs de rainloop :

root@Debian02:~# cd /var/www/rainloop/public_html

root@Debian02:~# curl -sL https://repository.rainloop.net/installer.php | php

#!/usr/bin/env php

 

 

 [RainLoop Webmail Installer]

 

 

 * Connecting to repository ...

 * Downloading package ...

 * Complete downloading!

 * Installing package ...

 * Complete installing!

 

 * [Success] Installation is finished!

La commande curl permet de faire une requête web et de récupérer le résultat sous forme de fichier.

Ici, nous allons récupérer le fichier installer.php sur le site de rainloop, et nous allons ensuite l'exécuter avec la commande php. Ce script PHP va récupérer les sources du programme rainloop et installer les bons fichiers avec les bons droits au bons endroits, c'est à dire là où nous avons lancé la commande 
;);)
 

Et comme vous pouvez le voir, tout s'est bien passé !

Nous allons ensuite faire en sorte que notre webmail soit visible en tant que site web, et pour cela nous allons créer spécifiquement un virtualhost.

Création d'un virtualhost dédié pour notre webmail

Actuellement, la racine de notre serveur web est /var/www/html/, or nous avons installé rainloop dans /var/www/rainloop, qui est donc hors de la racine de notre serveur web. Rainloop est donc pour l'instant invisible pour notre serveur web.

Pour pouvoir le rendre accessible, nous allons créer un virtualhost spécifique qui va pointer dans notre répertoire d'installation /var/www/rainloop/public_html/

La création d'un virtualhost avec nginx est proche de la façon dont nous l'avons fait avec apache. Nous allons créer un fichier virtualhost dans le répertoire sites-available de configuration de nginx, puis nous ferons un lien dans le répertoire sites-enabled.

root@Debian02:~# vim /etc/nginx/sites-available/rainloop

Et nous allons y insérer les informations suivantes :

server {

 server_name rainloop.domaine.com;

 listen 80;

 root /var/www/rainloop/public_html;

 access_log /var/www/rainloop/logs/access.log;

 error_log /var/www/rainloop/logs/error.log;

 index index.php;

 

 location / {

 try_files $uri $uri/ /index.php?$query_string;

 }

 

 location ~ \.php$ {

 include snippets/fastcgi-php.conf;

 

 # With php-fpm (or other unix sockets):

 fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;

 # fastcgi_index index.php;

 # fastcgi_split_path_info ^(.+\.php)(.*)$;

 # fastcgi_keep_conn on;

 # include /etc/nginx/fastcgi_params;

 # fastcgi_pass unix:/var/run/php5-fpm.sock;

 # fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

 }

 

 location ~ /\.ht {

 deny all;

 }

 

 location ^~ /data {

 deny all;

 }

 

}

Le format de notre virtualhost est le même que le fichier default. Nous indiquons un server_name qui sera à indiquer dans l'URL pour accéder à rainloop. Nous indiquons aussi où se trouve la racine de notre virtualhost, et nous activons le PHP. Enfin, nous interdisons l'accès à tout fichier de type .htaccess ou au répertoire data.

Il faut ensuite activer ce virtualhost en créant le lien dans sites-enabled :

root@Debian02:~# ln -s /etc/nginx/sites-available/rainloop /etc/nginx/sites-enabled/rainloop

Vous pouvez relancer le service nginx pour que nos modifications de configuration soient prises en compte :

root@Debian02:~# systemctl restart nginx

Mais attention ! notre virtualhost n'est pour l'instant accessible qu'avec le nom rainloop.domaine.com. Or nous ne possédons pas ce domaine.

Cependant, vous savez déjà comment procéder car nous avions rencontré le même problème dans le cours précédent quand nous avons abordé la notion de virtualhost. Vous allez pouvoir entrer ce nom dans le fichier hosts de la machine qui accède au webmail. Il faudra faire la liaison entre le nom rainloop.domaine.com et l'adresse IP de votre serveur.

Une fois que vous aurez réalisé cette manipulation, vous pourrez accéder à votre webmail, notamment pour le configurer !

Page de connexion de rainloopPage de connexion de rainloop
 

Configuration du webmail

Pour se connecter à la console d'administration, il faut ajouter ?admin dans l'URL, ce qui donne pour nous http://rainloop.domaine.fr/?admin

Le login/mot de passe par défaut est admin/12345.

Si tout s'est bien passé, vous voilà connecté :