Debian & Nginx : Mise en place d’un serveur web chez soi

J'ai longtemps réfléchi aux différentes solutions pour héberger mon site web... D'une part j'étais très motivé pour acheter un hébergement payant chez OVH d'autre part j'étais aussi intéréssé pour héberger mon site moi même, chez moi. Et c'est finalement vers cette solution que je me suis tourné, je m'héberge chez moi avec ma propre connexion.

Cet article à pour but de vous expliquer comment monter un petit serveur web chez soi, pas cher et qui consomme peu. Notez toute fois qu'un minimum de connaissance sur les systèmes Linux et leurs commandes de bases est nécessaire pour la bonne compréhension de cet article.

La configuration

Pour ce qui est de la configuration, je me suis acheté la carte mère intel d945gclf2 qui intégre un processeur ATOM 330. J'ai rajouté à celle ci une barrette de DDR2 de 2Go (PC 5300 @ 667Mhz) et un disque dur. Et puis... C'est tout !! En effet un serveur n'a besoin de rien d'autre ( Si ce n'est un boitier ainsi qu'une petite alimentation ).

La plateforme au final consomme entre 30w et 40w, ce qui est tout à fait raisonnable pour une machine qui tourne toute l'année non stop.

Le choix de l'OS

Le choix de l'OS ou plutôt de la distribution car il est hors de questions pour moi de mettre un Windows Server, a été plutôt simple... Je me suis naturellement orienté vers la distribution bien connu dont la réputation n'est plus à démontrer, je cite : Debian. Pourquoi choisir Debian ?

Rapidement :

  • Elle est maintenue par ses utilisateurs
  • Une forte communauté
  • Le meilleur système de paquet
  • Installation facile
  • Stable
  • Sécurité accrue

La liste est encore longue mais je ne suis pas là pour faire la promotion de Debian chacun choisira la distribution qu'il souhaite.

Installation de Debian

Il vous faudra récupérer la version qui correspond à votre plateforme sur : http://www.debian.org/CD/http-ftp/ Bien entendu, vous l'avez vu dans le petit 1) je n'ai pas parlé d'écran ni de clavier qui ne sont pas nécessaire lorsque que le serveur sera 100% fonctionnel. Toute fois, vous en avez évidement besoin pour l'installation... (Ainsi qu'un lecteur CD ou une Clef USB ). Je ne vais pas détailler l'installation de debian tant son installation est simple. Si vous avez des doutes des questions je vous invite à lire la documentation de debian. /! => A l'installation, debian vous demandera ce que vous souhaitez installer de base, cochez simplement Le système de base inutile pour nous d'installer une interface graphique qui surchargera la machine en ressource.

Une installation toute propre !

Nous rentrons dans le vif du sujet. A partir de maintenant nous allons commencer la configuration du serveur mais aussi de votre Freebox. Un serveur se doit d'avoir une IP fixe c'est pourquoi, pour des raisons de sécurité nous allons configurer l'interface ETH0 en STATIC :

NOTE: Vous devez être en ROOT pour exécuter les commandes de cet article

vim /etc/network/interfaces Et ajoutez-y ceci (cette configuration est à titre d'exemple, à vous de la modifier en fonction de votre réseau) :

iface eth0 inet static
    address 192.168.0.50
    netmask 255.255.255.0
    network 192.168.0.0
    broadcast 192.168.0.255
    gateway 192.168.0.254
    dns-nameservers 212.27.40.240 212.27.40.241

En suite faites un :

ifup eth0
/etc/init.d/networking restart
ifconfig

Le ifconfig devrait vous afficher quelque chose comme ça :

eth0      Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX
          inet addr: 192.168.0.50  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:61925 errors:0 dropped:1079664851842 overruns:0 frame:0
          TX packets:85865 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:10074863 (9.6 MiB)  TX bytes:105396775 (100.5 MiB)
          Interrupt:252
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:8873 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8873 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:6296776 (6.0 MiB)  TX bytes:6296776 (6.0 MiB)

Si c'est le cas essayez un nslookup pour vérifier votre connexion à internet: nslookup google.fr

Nous avons maintenant notre serveur connecté à internet : SUPER !! Mais c'est loin d'être fini... En effet nous avons attribué une ip fixe à notre serveur. Admettons qu'un autre ordinateur ait la même ip que votre serveur : il y a conflit ! C'est pourquoi nous allons utiliser les BAUX DHCP. Les baux DHCP sont une sécurité en plus qui permet d'attribuer une IP à une adresse mac. Le but est donc de récupérer l'adresse mac de notre interface eth0 et de toujours lui attribuer la même adresse IP. Si quelqu'un d'autre veut prendre la même ip que le serveur, notre routeur dira : Non cette adresse est réservée au serveur ! Comme ça personne ne pourra lui piquer ( par inadvertance j'entends ;-) ) Pour récupérer l'adresse MAC de notre Interface ETH0 : ifconfig | grep HWaddr

A la fin vous devez avoir quelque chose sous la forme suivante : XX:XX:XX:XX:XX:XX , c'est votre adresse mac. Notez là. Nous allons maintenant ajouter une règle sur notre routeur (freebox). Connectez vous sur votre compte Onglet Internet => Configurer mon routeur Freebox =>

Ajoutez ceci : baux dhcp freebox

Voilà pour ce qui est de la configuration réseau : c'est ok ! Maintenant passons aux choses sérieuses. Sous debian quand vous voulez installer un paquet que vous n'avez pas, on vous demande d'insérer le cd... C'est cool mais très chiant. C'est pourquoi il va falloir dire à debian : Maintenant tu es connecté à internet alors, cherche sur internet ! Pour ce faire, faites :

vim /etc/apt/sources.list Puis commentez les deux lignes qui commencent par deb cdrom comme ceci :

#deb cdrom:[Debian GNU/Linux 5.0.2 _Lenny_ - Official amd64 CD Binary-1 20090628-17:29]/ lenny main

    #deb cdrom:[Debian GNU/Linux 5.0.2 _Lenny_ - Official amd64 CD Binary-1 20090628-17:29]/ lenny main

    deb http://ftp.fr.debian.org/debian/ lenny main
deb-src http://ftp.fr.debian.org/debian/ lenny main

    deb http://security.debian.org/ lenny/updates main
deb-src http://security.debian.org/ lenny/updates main

    deb http://volatile.debian.org/debian-volatile lenny/volatile main
deb-src http://volatile.debian.org/debian-volatile lenny/volatile main

Enregistrer puis faite :

apt-get update

Et : apt-get upgrade

Votre système va être mis à jour :-)

Installation de SSH !

L'installation de SSH est obligatoire. SSH vous permettra de prendre le contrôle de votre serveur à partir d'un autre ordinateur. Son utilisation est très simple. Sa configuration peut être un peu plus difficile pour quelqu'un qui n'a jamais mis en place un serveur SSH. Je ne vais pas rentrer dans le detail sur SSH. Il y'a déjà beaucoup de tuto sur le net. Installer SSH serveur :

apt-get install openssh-server

Configurer SSH : vim /etc/ssh/sshd_config

Redémarrer SSH : /etc/init.d/ssh reload Vous pouvez configurer pas mal de chose... Changer le port, Autorisez l'authentification avec l'utilisateur Root etc etc.. Ensuite pour vous connecter à votre serveur en SSH, c'est tout bête : ssh login@192.168.0.50

Pour le moment nous nous connectons en local. Une fois la connection à SSH effectuée vous n'avez plus besoin de votre écran... Vous prendrez le main sur votre serveur via un autre ordinateur de votre réseau... Si vous en possédez un toute fois x-)

Installation de Nginx

Nous allons procéder à l'installation du serveur WEB Nginx. Nginx c'est plus simple à configurer que Appache... Et surtout c'est le plus performant de tous les serveurs web. Donc installons Nginx: apt-get install nginx

Si via un navigateur vous tapez 192.168.0.50 ( l'ip local de votre serveur ) vous devriez tomber sur la page par défaut de Nginx : (Welcome to nginx)

Installation de PHP /MySQL

La commande pour installer php et mysql est la suivante : apt-get install php5-common php5-cgi mysql-server mysql-client mysql-common php5-mysql

Configuration de Nginx & PHP

Nous allons maintenant creer un fichier qui s'occupera de gérer le processus PHP. Créer le fichier:

nano /etc/init.d/fastcgi

Insérez ceci dedans :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/bin/bash

COMMAND=/usr/bin/spawn-fcgi
ADDRESS=127.0.0.1
PORT=9000
USER=www-data
GROUP=www-data
PHPCGI=/usr/bin/php5-cgi
PIDFILE=/var/run/fastcgi-php.pid
RETVAL=0

    case `$1` in
    start)
      $COMMAND -a $ADDRESS -p $PORT -u $USER -g $GROUP -f $PHPCGI -P $PIDFILE
      RETVAL=$?
  ;;
    stop)
      killall -9 php5-cgi
      RETVAL=$?
  ;;
    restart)
      killall -9 php5-cgi
      $COMMAND
      RETVAL=$?
  ;;
    *)
      echo `Usage: fastcgi {start|stop|restart}`
      exit 1
  ;;
esac
exit $RETVAL

Maintenant nous devons installer spawn-fcgi qui autorise la séparation des processus fcgi du processus serveur web. Seulement, la seule façon de l'installer est semble-t-il d'installer lighttpd.

Installons donc lighttpd

apt-get install lighttpd

Lighttpd est un serveur web tout comme nginx. Lors de l'installation, lighttpd ne va pas pouvoir se lancer du fait que le port 80 est déjà utilisé par Nginx. De ce fait pour éviter que lighttpd se lance à chaque redémarrage du système nous allons utiliser la commande suivante : update-rc.d -f lighttpd remove

Puis cette commande pour lancer le processus PHP utilisé par Nginx:

chmod +x /etc/init.d/fastcgi
update-rc.d fastcgi defaults
/etc/init.d/fastcgi start

Maintenant il ne reste plus qu'à faire la configuration des virtual host de Nginx. Pour cela il faut éditer le fichier /etc/nginx/sites-available/default mais avant ça il est préférable de faire une copie de ce fichier.

Faites un : cp /etc/nginx/sites-available/defaut /etc/nginx/site-available/default.old

Puis

vim /etc/nginx/sites-available/default

Supprimez tout son contenu et ajoutez y:

server {

        listen 80;
    server_name  mon-site.com;
    access_log /var/log/nginx/mon-site_access.log;
    error_log /var/log/nginx/mon-site_error.log;

        root   /var/www/mon-site/;
    index index.php index.html;

    location ~ .php$ {
       fastcgi_pass  localhost:9000;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_NAME $fastcgi_script_name;
       fastcgi_param REQUEST_URI $request_uri;
       fastcgi_param DOCUMENT_URI $document_uri;
       fastcgi_param DOCUMENT_ROOT $document_root;
       fastcgi_param REMOTE_ADDR $remote_addr;
       fastcgi_param REMOTE_PORT $remote_port;
       fastcgi_param SERVER_ADDR $server_addr;
       fastcgi_param SERVER_PORT $server_port;
       fastcgi_param SERVER_NAME $server_name;
       fastcgi_param SCRIPT_FILENAME  /var/www/mon-site$fastcgi_script_name;
       fastcgi_param QUERY_STRING $query_string;
       fastcgi_param REQUEST_METHOD $request_method;
       fastcgi_param CONTENT_TYPE $content_type;
       fastcgi_param CONTENT_LENGTH $content_length;
    }
}

Ici vous devez donc modifier mon-site Par exemple remplacer ces lignes :

server_name : mon-site.com;
root /var/www/mon-site/;
 fastcgi_param SCRIPT_FILENAME  /var/www/mon-site$fastcgi_script_name;

Par ces lignes :

server_name : toto.com;
root /var/www/toto/;
fastcgi_param SCRIPT_FILENAME  /var/www/toto$fastcgi_script_name;

NOTE : /var/www/ est le repertoire par défaut, vous pouvez très bien le remplacer par /home/VOTRE_USER/

Ensuite vous devez donc créer le dossier toto qui contiendra les fichiers de votre site toto.com mkdir /var/www/toto

On crée un fichier index.php pour tester notre configuration : vim /var/www/toto/index.php

Insérez ceci dedans: puis modifiez les droits sur votre dossier www et ses sous répertoires (dont le nouveau toto)

chown -R www-data:www-data /var/www/

On redémarre Nginx:

/etc/init.d/nginx reload Si tout c'est bien passé quand vous accédez à 192.168.0.50 (ou l'ip local de votre serveur) sur votre navigateur, vous devriez avoir la configuration de php s'afficher à l'écran :-)

Installation de Bind et Webmin

Bind est le serveur DNS le plus utilisé. Il nous servira entre autre pour les sous domaines de notre site. Webmin est une interface de gestion Unix basé sur le web. Autrement dit vous pourrez gérer la configuration de votre serveur via votre navigateur.. Plutôt cool ! Installation de bind : apt-get install bind9 Installation de webmin, ajouter cette ligne dans : /etc/apt/sources.list deb http://download.webmin.com/download/repository sarge contrib Puis fait : apt-get update apt-get install webmin

Ensuite après avoir installé webmin, pour vous connecter dessus, allez à l'adresse : https://ip_server_local:10000 N'oubliez pas le httpS ! Connectez vous avec vos identifiants root par défaut. Changer la langue en Français.

DNS et redirection de Ports

Maintenant tout est presque prêt... Il ne vous reste plus qu'a rediriger votre nom de domaine sur l'ip de votre FREEBOX. L'exemple sera montré chez ovh mais il sera sensiblement le même ailleurs.

Tout d'abord il vous faut l'ip de votre FREEBOX, là nous ne parlons plus d'ip local attention ! Pour la trouver allez simplement soit sur votre compte, soit à l'adresse suivante : www.mon-ip.com Admetons que la mienne soit : 88.222.54.78. Il faut que je dise à OVH : très bien ce nom domaine (qui m'appartient bien sur) : toto.com doit pointer sur cette ip : 88.222.54.78. Il vous suffit de créer un enregistrement de type A. Qui sera comme ça : Sous domaine : www.toto.com ou juste : toto.com IP: 88.222.54.78 L'enregistrement est effectué, notez toute fois qu'il faut attendre plusieurs heures.

Maintenant, sur votre compte Free Onglet internet > Personnaliser mon reverse DNS. Dans le champ Reverse DNS personnalisé entré votre nom de domaine : toto.com puis enregistré.

Pour résumé nous avons fait l'inverse. Nous avons dis à notre freebox : Très bien l'ip : 88.222.54.78 a pour nom toto.com

Si vous avez un refus, renouvelez l'opération dans quelque heures. Sinon si tout est dans l'ordre il ne vous reste plus qu'à attendre la propagation DNS. (plusieurs heures encore une fois )

Dernière étape.. Les redirections de PORTS... En effet vous avez pu remarquer que depuis tout à l'heure nous accédions au serveur web, au ssh ou même webmin.. en local ! Maintenant il faut dire à la freebox de rediriger les ports 80 (http) 22 (ssh) et 10000 (port par defaut de webmin) sur notre serveur.. Pour ça rien de plus simple ! Toujour sur votre compte Onglet internet > Configurer mon routeur Freebox et faites ceci : redirection port freebox

Redémarrez votre freebox... Et accédez à votre site via votre nom de domaine si ça ne marche pas essayez d'y accéder par l'ip de votre freebox. Si ça marche, vous avez un problème au niveau du nom de domaine.

Deux solutions : Attendre (propagations des dns). Puis si rien ne change recommencez l'opération ou demandez de l'aide. Sinon si ça ne marche pas même avec l'ip de votre freebox, vous avez un problème avec nginx ou de redirection du port 80.

En espérant que cet article vous aura aidé.

Thomas Durin