SPARQL Protocol and RDF Query Language/Travail pratique/Faire un serveur Web

Début de la boite de navigation du travail pratique
Faire un serveur Web
Image logo représentative de la faculté
T.P. no 2
Leçon : SPARQL Protocol and RDF Query Language

TP de niveau 15.

Précédent :Installer Ubuntu
Suivant :Initiation à PHP
En raison de limitations techniques, la typographie souhaitable du titre, « Travail pratique : Faire un serveur Web
SPARQL Protocol and RDF Query Language/Travail pratique/Faire un serveur Web
 », n'a pu être restituée correctement ci-dessus.


Pourquoi faire un serveur Web ?

modifier

Dans ce TP, nous allons installer un serveur Web fonctionnel classique qui nous servira de base dans les prochains TP pour utiliser SPARQL.

À savoir avant de commencer

modifier

On peut mettre en place un serveur de deux manières : comme une recette de cuisine ou comme un chimiste.

Le chimiste va essayer de comprendre ce qu’il fait avant de le faire. Le cuisinier va dérouler sa recette en espérant que ça fonctionne.

Si vous voulez suivre la recette, vous pouvez passer à la partie suivante, sinon je vous conseille de relire quelques articles de Wikipédia.

C'est quoi un serveur ? Et un client ?

modifier

Lire l’article Client Serveur de Wikipédia

C'est quoi une architecture trois tiers ?

modifier

Lire l’article Architecture trois tiers de Wikipédia

C'est quoi un serveur HTTP et un serveur Web ?

modifier

Lire l’article sur le protocole HTTP de Wikipédia

Un serveur Web utilise le protocole HTTP, cela signifie qu’il utilise :

  • le TCP comme couche de transport
  • le port 80 (443 pour HTTPS)

Ces deux informations sont indispensables pour configurer votre Firewall et ainsi ouvrir un serveur Web.

De manière générale, la configuration d'un service HTTP pose souvent problème :

  • Mauvaise configuration DNS
  • Problème de Firewall
  • Etc.

Questions qu'on doit se poser avant de faire UN site Web

modifier
  • Ce site Web est-il visible uniquement sur mon PC de développement ?
    • Mon PC de développement a-t-il une IP fixe ou dynamique ?
  • Ce site Web est-il visible de l’extérieur ou uniquement dans mon intranet ?
    • Si l'ordinateur a une IP dynamique, s’assurer que le nom de l'ordinateur est bien résolu par le serveur DNS de votre réseau
    • Si l'ordinateur a une IP fixe, vous pouvez faire un serveur Web sans vous soucier immédiatement du DNS
  • Ce site Web est-il visible de l’extérieur ?
    • Quelle IP fixe aura mon serveur ?
    • Quel nom de domaine aura mon serveur ?
    • Mon entreprise a-t-elle déjà un nom de domaine ?
      • Demander un sous-domaine ?

Question à se poser avant de faire DES sites Web

modifier

Un serveur n’a qu’un seul port 80. En pratique pour héberger plusieurs sites Web sur un serveur, il faut :

  • Attribuer au site Web un autre port
    • Redirection à faire par un autre composant réseau
    • Modifier le Firewall pour ouvrir des ports exotiques
  • Faire du Virtual Hosting

Le Virtual Hosting permet de n'utiliser que le port 80 et d’afficher le site Web en fonction du nom de domaine demandé. Ce qui est très pratique quand on doit développer et tester plusieurs sites Web sur son poste de développement.

Configurer un poste de développement Web avec un Virtual Hosting

modifier

Le Virtual Hosting permet de :

  • travailler sur plusieurs sites Web en même temps
  • simuler le nom de domaine comme si le service était en production et éviter d’utiliser des adresses IP (changeante en production et en développement)

Installation : Ouvrir les ports avec Docker

modifier

On suppose que nous sommes dans un environnement de développement :

  • Vous ne pouvez pas modifier le DNS de votre réseau
  • Votre site tourne sur CentOS dans un conteneur Docker sur votre PC

Ouvrir le port HTTP de votre conteneur Docker

modifier

Pour un serveur Web, vous devez ouvrir le port 80. Vous devez modifier votre image Docker (reconstruire l’image et recréer le conteneur) afin d'exposer le port 80.

Rajouter dans votre fichier Docker :

EXPOSE 80

Résoudre votre nom de domaine et connecter le port HTTP avec Windows ou Mac

modifier

Via Kitematic, vous devez relier le port 80 de votre PC à ce conteneur.

Pour résoudre votre nom de domaine sous Windows, rajouter la ligne suivante dans le fichier c://windows/system32/drivers/etc/hosts :

127.0.0.1 moncv

Quand votre service Web fonctionnera à la fin du TP, vous pourrez consulter votre site Web via l’adresse [1] (ou sinon [2]).

Résoudre votre nom de domaine avec Linux

modifier

Il faut résoudre localement votre nom de domaine associé à l’adresse IP de votre conteneur. Ouvrir le fichier sur votre PC :

sudo vim /etc/hosts

Ajouter le nom de domaine moncv avec son IP dans le fichier /etc/hosts de votre PC :

172.17.0.2 moncv

Sur le serveur, il faut résoudre ce nom de domaine. Ajouter le nom de domaine moncv dans le fichier /etc/hosts à la fin de la ligne où se trouve la définition du localhost :

127.0.0.1 localhost moncv

Quand votre service Web fonctionnera à la fin du TP, vous pourrez consulter votre site Web via l’adresse [3] (ou sinon [4]).

Installation : Apache2

modifier

Installation du package

modifier

Nous installons ce qu’il manque sur le serveur : (souvent, Apache est déjà installé)

Sous Ubuntu

sudo apt-get install apache2

Sous Fedora ou CentOS

yum install httpd
systemctl start httpd
systemctl enable httpd

Activer le mod_rewrite

modifier

De nombreuses applications, comme Mediawiki, ne peuvent fonctionner qu'avec ce mode pour réécrire les URL. (Pour aller plus loin)

On active le mode en lecture et écriture "mod_rewrite" :

Sous Ubuntu

sudo a2enmod rewrite

(A vérifier) Sous Fedora ou CentOS : on vérifie avec cette commande que le "mod_rewrite" est déjà activé.

httpd -M | grep rewrite

Vous devez voir la ligne suivante s'afficher :

...
rewrite_module (shared)
...

Activer le Virtual Hosting

modifier

On vérifie la configuration d’Apache pour faire du Virtual Hosting en vérifiant que la ligne suivante n’est pas précédée d'un commentaire (c'est-à-dire qu'elle ne doit pas être précédée d'un #):

NameVirtualHost *:80 
  • Sous Ubuntu cette ligne se trouve dans le fichier /etc/apache2/ports.conf
  • Sous Fedora ou CentOS et les autres distributions Linux c’est dans le fichier /etc/httpd/conf/httpd.conf

Tester votre configuration

modifier

On vérifie la configuration d'Apache pour voir les sites Web déjà fonctionnels :

Sous Ubuntu

apache2ctl -S

Sous Fedora ou CentOS

httpd -S

Vous pouvez voir qu'un site Web "default server" existe déjà.

Vous pouvez taper dans votre navigateur le nom du site Web monCV et vous devriez voir la page "It works!".
L'adresse monCV pointe vers l'adresse 127.0.0.1 comme nous l'avons configurée précédemment ; puisqu’un site Web par défaut existe, il est logique que le site monCV pointe vers ce site Web.

Configuration du site Web monCV

modifier

Nous allons configurer le site monCV pour qu’il pointe vers un répertoire précis de votre ordinateur.


Création du répertoire qui va contenir le site

modifier

Nous allons créer le répertoire /var/www/moncv .

sudo mkdir /var/www/moncv

Sous Ubuntu

modifier

Pour autoriser le chargement de fichier via SFTP, on change le propriétaire du répertoire.

sudo mkdir /var/www/moncv
sudo chown <mettre_votre_user_id> /var/www/moncv


On duplique le fichier de configuration du site Web par défaut pour servir de modèle à notre nouveau site Web "moncv".

Pour cela, on exécute la commande suivante pour dupliquer le fichier de configuration :

sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/moncv

Ensuite, on ouvre ce fichier :

sudo gedit /etc/apache2/sites-available/moncv

On modifie ou on ajoute les lignes suivantes (en gras) dans ce fichier :

<VirtualHost *:80>
        ServerAdmin contact@moncv

        ServerName  moncv
        DocumentRoot /var/www/moncv

        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/moncv/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

Pour prendre en compte ce fichier de configuration, il faut activer ce site Web avec cette commande :

sudo a2ensite moncv

Pour votre information, vous pouvez à tout moment désactiver ce site Web avec la commande suivante :

sudo a2dissite moncv

Pour prendre en compte la création de ce site Web, il faut redémarrer Apache :

sudo service apache2 reload
apache2ctl -S

Sous Fedora ou CentOS

modifier

Pour autoriser le chargement de fichier via SFTP, on change le propriétaire du répertoire.

su -
mkdir /var/www/moncv
chown <user_name> /var/www/moncv


Créer le fichier moncv.conf :

vim /etc/httpd/conf.d/moncv.conf

Insérer, dans le fichier moncv.conf, ce contenu :

<VirtualHost *:80>
     ServerName moncv
     DocumentRoot /var/www/moncv
</VirtualHost>

Pour prendre en compte ces fichiers de configuration :

apachectl restart

Vérifier que votre nouveau site web est dans la liste :

httpd -S

Pour prendre en compte la création de ce site Web, il faut redémarrer Apache :

systemctl reload httpd
httpd -S

Transfert du fichier HTML via SFTP

modifier

On écrit ce texte dans le fichier index.html pour afficher MonCV à l'écran :

<html>
   <body>
      MonCv
   </body>
</html>

Puis avec un logiciel comme Filezilla, vous allez vous connecter au port 22 (ssh) de votre serveur Web puis transférer le fichier index.html dans le répertoire "/var/www/moncv".

Il suffit de tester en accédant à travers un navigateur à l'adresse http://moncv pour voir s'afficher "moncv" à l'écran.

Maintenant, que votre première page HTML, vous pourrez maintenant essayer de la rendre dynamique en y insérant du PHP pour afficher le contenu d'une base de données MySQL ou SPARQL par exemple. Pour le faire, il faudra installer PHP, MySQL... et un triplestore ! Ce sera pour un autre TP.

Exercices

modifier

(1) Fabriquer une image Docker pour construire automatiquement le serveur Web de la même manière que dans ce TP et pour pouvoir mettre à jour le site Web via SFTP.


  1. Trouver les options de démarrage du conteneur Docker afin de partager le répertoire de développement de votre site Web sur votre PC directement au sein du conteneur à l'emplacement du site Web.
  2. En utilisant Visual Studio Code Review ou votre IDE préféré, activer au travers de l’IDE votre conteneur en partageant la racine de votre projet Web pour tester vos pages Web.

Pour aller plus loin

modifier


Les messages d'erreurs !!

modifier

Vous rencontrez un message d'erreurs ? Ecrivez ici les messages que vous rencontrez et la solution que vous proposez (Désactiver SELinux n'est pas une bonne solution).